From 8d850d1ce1fbc13b8124d2cfcb9eaa724350dbec Mon Sep 17 00:00:00 2001 From: qxz15oi Date: Mon, 26 Apr 2021 11:47:36 +0200 Subject: [PATCH] openshift/runtime/previously onborded applications all compiling and with templates - READMEs linking the confluence for custom services & synthetics --- .../alerting-profile/alerting-profile.yaml | 60 ++++ .../alerting-profile/default.json} | 19 -- .../calculated-metrics-service/README.md | 10 + .../conditional-naming-processgroup/README.md | 67 ++++ .../conditional-naming-processgroup.yaml | 8 + .../template.json | 29 ++ .../conditional-naming-service/README.md | 35 ++ .../conditional-naming-service.yaml | 8 + .../conditional-naming-service/template.json | 29 ++ .../CD_APIGW/custom-service-java/README.md | 4 + .../custom-service-java.yaml | 9 + .../custom-service-java/template-1-1.json | 23 ++ .../CD_APIGW/dashboard/README.md | 13 + .../CD_APIGW/dashboard/dashboard.yaml | 127 ++++++++ .../CD_APIGW/dashboard/default.json | 308 ++++++++++++++++++ .../CD_APIGW/notification/README.md | 60 ++++ .../notification/email.json} | 0 .../notification/msTeams.json} | 0 .../CD_APIGW/notification/notification.yaml | 51 +++ .../CD_APIGW/synthetic-monitor/README.md | 4 + .../CD_APIGW/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 + .../conditional-naming-processgroup/README.md | 67 ++++ .../conditional-naming-processgroup.yaml | 8 + .../template.json | 29 ++ .../conditional-naming-service/README.md | 35 ++ .../conditional-naming-service.yaml | 8 + .../conditional-naming-service/template.json | 29 ++ .../CD_APIM/custom-service-java/README.md | 4 + .../custom-service-java.yaml | 9 + .../custom-service-java/template-1-1.json | 23 ++ .../CD_APIM/dashboard/README.md | 13 + .../CD_APIM/dashboard/dashboard.yaml | 127 ++++++++ .../CD_APIM/dashboard/default.json | 308 ++++++++++++++++++ .../CD_APIM/notification/README.md | 60 ++++ .../CD_APIM/notification/email.json | 13 + .../notification/msTeams.json} | 2 +- .../CD_APIM/notification/notification.yaml | 51 +++ .../CD_APIM/synthetic-monitor/README.md | 4 + .../CD_APIM/synthetic-monitor/default.json | 82 +++++ .../synthetic-monitor/synthetic-monitor.yaml | 10 + .../alerting-profile/ASBC-HAL.json | 92 ------ .../alerting-profile/alerting-profile.yaml | 62 +++- .../alerting-profile/default.json} | 47 ++- .../calculated-metrics-service/README.md | 10 + .../conditional-naming-processgroup/README.md | 67 ++++ .../conditional-naming-processgroup.yaml | 8 + .../template.json | 29 ++ .../conditional-naming-service/README.md | 35 ++ .../conditional-naming-service.yaml | 8 + .../conditional-naming-service/template.json | 29 ++ .../CD_ASBC-HAL/custom-service-java/README.md | 4 + .../custom-service-java.yaml | 9 + .../custom-service-java/template-1-1.json | 23 ++ .../CD_ASBC-HAL/dashboard/README.md | 13 + .../CD_ASBC-HAL/dashboard/dashboard.yaml | 127 ++++++++ .../CD_ASBC-HAL/dashboard/default.json | 308 ++++++++++++++++++ .../CD_ASBC-HAL/notification/README.md | 60 ++++ .../CD_ASBC-HAL/notification/email.json | 13 + .../notification/msTeams.json} | 4 +- .../notification/notification.yaml | 51 +++ .../CD_ASBC-HAL/synthetic-monitor/README.md | 4 + .../synthetic-monitor/default.json | 82 +++++ .../synthetic-monitor/synthetic-monitor.yaml | 10 + .../calculated-metrics-service/README.md | 10 + .../conditional-naming-processgroup/README.md | 67 ++++ .../conditional-naming-processgroup.yaml | 8 + .../template.json | 29 ++ .../conditional-naming-service/README.md | 35 ++ .../conditional-naming-service.yaml | 8 + .../conditional-naming-service/template.json | 29 ++ .../CD_ASBC-RSU/custom-service-java/README.md | 4 + .../custom-service-java.yaml | 9 + .../custom-service-java/template-1-1.json | 23 ++ .../CD_ASBC-RSU/dashboard/README.md | 13 + .../CD_ASBC-RSU/dashboard/dashboard.yaml | 127 ++++++++ .../CD_ASBC-RSU/dashboard/default.json | 308 ++++++++++++++++++ .../CD_ASBC-RSU/synthetic-monitor/README.md | 4 + .../synthetic-monitor/default.json | 82 +++++ .../synthetic-monitor/synthetic-monitor.yaml | 10 + .../alerting-profile/alerting-profile.yaml | 62 +++- .../alerting-profile/default.json} | 47 ++- .../calculated-metrics-service/README.md | 10 + .../conditional-naming-processgroup/README.md | 67 ++++ .../conditional-naming-processgroup.yaml | 8 + .../template.json | 29 ++ .../conditional-naming-service/README.md | 35 ++ .../conditional-naming-service.yaml | 8 + .../conditional-naming-service/template.json | 29 ++ .../custom-service-java/README.md | 4 + .../custom-service-java.yaml | 9 + .../custom-service-java/template-1-1.json | 23 ++ .../CD_ASBC-SMACC/dashboard/README.md | 13 + .../CD_ASBC-SMACC/dashboard/dashboard.yaml | 127 ++++++++ .../CD_ASBC-SMACC/dashboard/default.json | 308 ++++++++++++++++++ .../CD_ASBC-SMACC/synthetic-monitor/README.md | 4 + .../synthetic-monitor/default.json | 82 +++++ .../synthetic-monitor/synthetic-monitor.yaml | 10 + .../alerting-profile/CDApp-Repository.json | 63 ---- .../alerting-profile/alerting-profile.yaml | 61 +++- .../alerting-profile/default.json | 103 ++++++ .../calculated-metrics-service/README.md | 10 + .../conditional-naming-processgroup/README.md | 67 ++++ .../conditional-naming-processgroup.yaml | 8 + .../template.json | 29 ++ .../conditional-naming-service/README.md | 35 ++ .../conditional-naming-service.yaml | 8 + .../conditional-naming-service/template.json | 29 ++ .../custom-service-java/README.md | 4 + .../custom-service-java.yaml | 9 + .../custom-service-java/template-1-1.json | 23 ++ .../CD_App-Repository/dashboard/README.md | 13 + .../dashboard/dashboard.yaml | 127 ++++++++ .../CD_App-Repository/dashboard/default.json | 308 ++++++++++++++++++ .../CD_App-Repository/notification/README.md | 60 ++++ .../CD_App-Repository/notification/email.json | 13 + .../notification/msTeams.json} | 4 +- .../notification/notification.yaml | 51 +++ .../synthetic-monitor/README.md | 4 + .../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 + .../conditional-naming-processgroup/README.md | 67 ++++ .../conditional-naming-processgroup.yaml | 8 + .../template.json | 29 ++ .../conditional-naming-service/README.md | 35 ++ .../conditional-naming-service.yaml | 8 + .../conditional-naming-service/template.json | 29 ++ .../custom-service-java/README.md | 4 + .../custom-service-java.yaml | 9 + .../custom-service-java/template-1-1.json | 23 ++ .../CD_BMWPoints/dashboard/README.md | 13 + .../CD_BMWPoints/dashboard/dashboard.yaml | 127 ++++++++ .../CD_BMWPoints/dashboard/default.json | 308 ++++++++++++++++++ .../management-zone/CDBMWPoints.json | 31 -- .../CD_BMWPoints/management-zone/README.md | 76 +++++ .../management-zone/default.json} | 95 ++++-- .../management-zone/management-zone.yaml | 3 +- .../CD_BMWPoints/notification/README.md | 60 ++++ .../CD_BMWPoints/notification/email.json | 13 + .../notification/msTeams.json} | 4 +- .../notification/notification.yaml | 51 +++ .../CD_BMWPoints/synthetic-monitor/README.md | 4 + .../synthetic-monitor/default.json | 82 +++++ .../synthetic-monitor/synthetic-monitor.yaml | 10 + .../alerting-profile/Buffet.json | 183 ----------- .../alerting-profile/alerting-profile.yaml | 64 +++- .../alerting-profile/default.json | 103 ++++++ .../calculated-metrics-service/README.md | 10 + .../conditional-naming-processgroup/README.md | 67 ++++ .../conditional-naming-processgroup.yaml | 8 + .../template.json | 29 ++ .../conditional-naming-service/README.md | 35 ++ .../conditional-naming-service.yaml | 8 + .../conditional-naming-service/template.json | 29 ++ .../custom-service-java/README.md | 4 + .../custom-service-java.yaml | 9 + .../custom-service-java/template-1-1.json | 23 ++ .../CD_Billing_Buffet/dashboard/README.md | 13 + .../dashboard/dashboard.yaml | 127 ++++++++ .../CD_Billing_Buffet/dashboard/default.json | 308 ++++++++++++++++++ .../management-zone/README.md | 76 +++++ .../management-zone/default.json} | 107 +++--- .../management-zone/management-zone.yaml | 24 +- .../CD_Billing_Buffet/notification/README.md | 60 ++++ .../CD_Billing_Buffet/notification/email.json | 13 + .../notification/msTeams.json | 11 + .../notification/notification.yaml | 51 +++ .../synthetic-monitor/README.md | 4 + .../synthetic-monitor/default.json | 82 +++++ .../synthetic-monitor/synthetic-monitor.yaml | 10 + .../CD_CCG/alerting-profile/CDCCG.json | 63 ---- .../alerting-profile/alerting-profile.yaml | 61 +++- .../CD_CCG/alerting-profile/default.json | 103 ++++++ .../calculated-metrics-service/README.md | 10 + .../conditional-naming-processgroup/README.md | 67 ++++ .../conditional-naming-processgroup.yaml | 8 + .../template.json | 29 ++ .../conditional-naming-service/README.md | 35 ++ .../conditional-naming-service.yaml | 8 + .../conditional-naming-service/template.json | 29 ++ .../CD_CCG/custom-service-java/README.md | 4 + .../custom-service-java.yaml | 9 + .../custom-service-java/template-1-1.json | 23 ++ .../CD_CCG/dashboard/README.md | 13 + .../CD_CCG/dashboard/dashboard.yaml | 127 ++++++++ .../CD_CCG/dashboard/default.json | 308 ++++++++++++++++++ .../CD_CCG/management-zone/CDCCG.json | 73 ----- .../CD_CCG/management-zone/README.md | 76 +++++ .../management-zone/default.json} | 95 ++++-- .../management-zone/management-zone.yaml | 3 +- .../CD_CCG/notification/README.md | 60 ++++ .../CD_CCG/notification/email.json | 13 + .../CD_CCG/notification/msTeams.json | 11 + .../CD_CCG/notification/notification.yaml | 51 +++ .../CD_CCG/synthetic-monitor/README.md | 4 + .../CD_CCG/synthetic-monitor/default.json | 82 +++++ .../synthetic-monitor/synthetic-monitor.yaml | 10 + .../CD_CSI/alerting-profile/CDCSI.json | 63 ---- .../alerting-profile/alerting-profile.yaml | 61 +++- .../CD_CSI/alerting-profile/default.json | 103 ++++++ .../calculated-metrics-service/README.md | 10 + .../conditional-naming-processgroup/README.md | 67 ++++ .../conditional-naming-processgroup.yaml | 8 + .../template.json | 29 ++ .../conditional-naming-service/README.md | 35 ++ .../conditional-naming-service.yaml | 8 + .../conditional-naming-service/template.json | 29 ++ .../CD_CSI/custom-service-java/README.md | 4 + .../custom-service-java.yaml | 9 + .../custom-service-java/template-1-1.json | 23 ++ .../CD_CSI/dashboard/README.md | 13 + .../CD_CSI/dashboard/dashboard.yaml | 127 ++++++++ .../CD_CSI/dashboard/default.json | 308 ++++++++++++++++++ .../CD_CSI/management-zone/CDCSI.json | 73 ----- .../CD_CSI/management-zone/README.md | 76 +++++ .../management-zone/default.json} | 95 ++++-- .../management-zone/management-zone.yaml | 3 +- .../CD_CSI/notification/README.md | 60 ++++ .../CD_CSI/notification/email.json | 13 + .../CD_CSI/notification/msTeams.json | 11 + .../CD_CSI/notification/notification.yaml | 51 +++ .../CD_CSI/synthetic-monitor/README.md | 4 + .../CD_CSI/synthetic-monitor/default.json | 82 +++++ .../synthetic-monitor/synthetic-monitor.yaml | 10 + .../alerting-profile/NGTP.json | 122 ------- .../alerting-profile/alerting-profile.yaml | 62 +++- .../alerting-profile/default.json | 103 ++++++ .../calculated-metrics-service/README.md | 10 + .../conditional-naming-processgroup/README.md | 67 ++++ .../conditional-naming-processgroup.yaml | 8 + .../template.json | 29 ++ .../conditional-naming-service/README.md | 35 ++ .../conditional-naming-service.yaml | 8 + .../conditional-naming-service/template.json | 29 ++ .../custom-service-java/README.md | 4 + .../custom-service-java.yaml | 9 + .../custom-service-java/template-1-1.json | 23 ++ .../dashboard/README.md | 13 + .../dashboard/dashboard.yaml | 127 ++++++++ .../dashboard/default.json | 308 ++++++++++++++++++ .../CDCall-Handling-Backends.json | 55 ---- .../management-zone/README.md | 76 +++++ .../management-zone/default.json | 114 +++++++ .../management-zone/management-zone.yaml | 24 +- .../notification/README.md | 60 ++++ .../notification/email.json | 13 + .../notification/msTeams.json | 11 + .../notification/notification.yaml | 77 +++-- .../synthetic-monitor/README.md | 4 + .../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 + .../conditional-naming-processgroup/README.md | 67 ++++ .../conditional-naming-processgroup.yaml | 8 + .../template.json | 29 ++ .../conditional-naming-service/README.md | 35 ++ .../conditional-naming-service.yaml | 8 + .../conditional-naming-service/template.json | 29 ++ .../custom-service-java/README.md | 4 + .../custom-service-java.yaml | 9 + .../custom-service-java/template-1-1.json | 23 ++ .../CD_CallCenterClient/dashboard/README.md | 13 + .../dashboard/dashboard.yaml | 127 ++++++++ .../dashboard/default.json | 308 ++++++++++++++++++ .../management-zone/CDCallCenterClient.json | 37 --- .../management-zone/README.md | 76 +++++ .../management-zone/default.json | 114 +++++++ .../management-zone/management-zone.yaml | 3 +- .../notification/README.md | 60 ++++ .../notification/email.json | 13 + .../notification/msTeams.json | 11 + .../notification/notification.yaml | 51 +++ .../synthetic-monitor/README.md | 4 + .../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 + .../conditional-naming-processgroup/README.md | 67 ++++ .../conditional-naming-processgroup.yaml | 8 + .../template.json | 29 ++ .../conditional-naming-service/README.md | 35 ++ .../conditional-naming-service.yaml | 8 + .../conditional-naming-service/template.json | 29 ++ .../custom-service-java/README.md | 4 + .../custom-service-java.yaml | 9 + .../custom-service-java/template-1-1.json | 23 ++ .../dashboard/README.md | 13 + .../dashboard/dashboard.yaml | 127 ++++++++ .../dashboard/default.json | 308 ++++++++++++++++++ .../CDConnected-Backend-Services.json | 31 -- .../management-zone/README.md | 76 +++++ .../management-zone/default.json | 114 +++++++ .../management-zone/management-zone.yaml | 3 +- .../notification/README.md | 60 ++++ .../notification/email.json | 13 + .../notification/msTeams.json | 11 + .../notification/notification.yaml | 51 +++ .../synthetic-monitor/README.md | 4 + .../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 + .../conditional-naming-processgroup/README.md | 67 ++++ .../conditional-naming-processgroup.yaml | 8 + .../template.json | 29 ++ .../conditional-naming-service/README.md | 35 ++ .../conditional-naming-service.yaml | 8 + .../conditional-naming-service/template.json | 29 ++ .../custom-service-java/README.md | 4 + .../custom-service-java.yaml | 9 + .../custom-service-java/template-1-1.json | 23 ++ .../dashboard/README.md | 13 + .../dashboard/dashboard.yaml | 127 ++++++++ .../dashboard/default.json | 308 ++++++++++++++++++ .../CDConnected-User-Behaviour.json | 31 -- .../management-zone/README.md | 76 +++++ .../management-zone/default.json | 114 +++++++ .../management-zone/management-zone.yaml | 3 +- .../notification/README.md | 60 ++++ .../notification/email.json | 13 + .../notification/msTeams.json | 11 + .../notification/notification.yaml | 51 +++ .../synthetic-monitor/README.md | 4 + .../synthetic-monitor/default.json | 82 +++++ .../synthetic-monitor/synthetic-monitor.yaml | 10 + .../alerting-profile/CDCDIP.json | 63 ---- .../alerting-profile/alerting-profile.yaml | 61 +++- .../alerting-profile/default.json | 103 ++++++ .../calculated-metrics-service/README.md | 10 + .../conditional-naming-processgroup/README.md | 67 ++++ .../conditional-naming-processgroup.yaml | 8 + .../template.json | 29 ++ .../conditional-naming-service/README.md | 35 ++ .../conditional-naming-service.yaml | 8 + .../conditional-naming-service/template.json | 29 ++ .../custom-service-java/README.md | 4 + .../custom-service-java.yaml | 9 + .../custom-service-java/template-1-1.json | 23 ++ .../dashboard/README.md | 13 + .../dashboard/dashboard.yaml | 127 ++++++++ .../dashboard/default.json | 308 ++++++++++++++++++ .../CDConnectedDrive-Internet-Portal.json | 58 ---- .../management-zone/README.md | 76 +++++ .../management-zone/default.json | 114 +++++++ .../management-zone/management-zone.yaml | 3 +- .../notification/README.md | 60 ++++ .../notification/email.json | 13 + .../notification/msTeams.json | 11 + .../notification/notification.yaml | 51 +++ .../synthetic-monitor/README.md | 4 + .../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 + .../conditional-naming-processgroup/README.md | 67 ++++ .../conditional-naming-processgroup.yaml | 8 + .../template.json | 29 ++ .../conditional-naming-service/README.md | 35 ++ .../conditional-naming-service.yaml | 8 + .../conditional-naming-service/template.json | 29 ++ .../custom-service-java/README.md | 4 + .../custom-service-java.yaml | 9 + .../custom-service-java/template-1-1.json | 23 ++ .../CD_ContentProvider/dashboard/README.md | 13 + .../dashboard/dashboard.yaml | 127 ++++++++ .../CD_ContentProvider/dashboard/default.json | 308 ++++++++++++++++++ .../management-zone/CDContentProvider.json | 31 -- .../management-zone/README.md | 76 +++++ .../management-zone/default.json | 114 +++++++ .../management-zone/management-zone.yaml | 3 +- .../CD_ContentProvider/notification/README.md | 60 ++++ .../notification/email.json | 13 + .../notification/msTeams.json | 11 + .../notification/notification.yaml | 51 +++ .../synthetic-monitor/README.md | 4 + .../synthetic-monitor/default.json | 82 +++++ .../synthetic-monitor/synthetic-monitor.yaml | 10 + .../alerting-profile/NewComponent.json | 91 ------ .../alerting-profile/alerting-profile.yaml | 66 +++- .../CD_DPP_DPM/alerting-profile/default.json | 103 ++++++ .../calculated-metrics-service/README.md | 10 + .../conditional-naming-processgroup/README.md | 67 ++++ .../conditional-naming-processgroup.yaml | 8 + .../template.json | 29 ++ .../conditional-naming-service/README.md | 35 ++ .../conditional-naming-service.yaml | 8 + .../conditional-naming-service/template.json | 29 ++ .../CD_DPP_DPM/custom-service-java/README.md | 4 + .../custom-service-java.yaml | 9 + .../custom-service-java/template-1-1.json | 23 ++ .../CD_DPP_DPM/dashboard/README.md | 13 + .../CD_DPP_DPM/dashboard/dashboard.yaml | 127 ++++++++ .../CD_DPP_DPM/dashboard/default.json | 308 ++++++++++++++++++ .../CD_DPP_DPM/management-zone/README.md | 76 +++++ .../management-zone/default.json} | 190 +++++++---- .../management-zone/management-zone.yaml | 9 +- .../CD_DPP_DPM/notification/README.md | 60 ++++ .../CD_DPP_DPM/notification/email.json | 13 + .../CD_DPP_DPM/notification/msTeams.json | 11 + .../CD_DPP_DPM/notification/notification.yaml | 58 +++- .../CD_DPP_DPM/synthetic-monitor/README.md | 4 + .../CD_DPP_DPM/synthetic-monitor/default.json | 82 +++++ .../synthetic-monitor/synthetic-monitor.yaml | 10 + .../alerting-profile/alerting-profile.yaml | 64 +++- .../CD_LSC/alerting-profile/default.json | 103 ++++++ .../calculated-metrics-service/README.md | 10 + .../conditional-naming-processgroup/README.md | 67 ++++ .../conditional-naming-processgroup.yaml | 8 + .../template.json | 29 ++ .../conditional-naming-service/README.md | 35 ++ .../conditional-naming-service.yaml | 8 + .../conditional-naming-service/template.json | 29 ++ .../CD_LSC/custom-service-java/README.md | 4 + .../custom-service-java.yaml | 9 + .../custom-service-java/template-1-1.json | 23 ++ .../CD_LSC/dashboard/LSC-FSU.json | 233 ------------- .../CD_LSC/dashboard/README.md | 13 + .../CD_LSC/dashboard/dashboard.yaml | 131 +++++++- .../CD_LSC/dashboard/default.json | 308 ++++++++++++++++++ .../CD_LSC/management-zone/README.md | 76 +++++ .../CD_LSC/management-zone/default.json | 114 +++++++ .../management-zone/management-zone.yaml | 24 +- .../CD_LSC/notification/README.md | 60 ++++ .../CD_LSC/notification/email.json | 13 + .../CD_LSC/notification/msTeams.json | 11 + .../CD_LSC/notification/notification.yaml | 51 +++ .../CD_LSC/synthetic-monitor/README.md | 4 + .../CD_LSC/synthetic-monitor/default.json | 82 +++++ .../synthetic-monitor/synthetic-monitor.yaml | 10 + .../alerting-profile/MessagingS.json | 92 ------ .../alerting-profile/alerting-profile.yaml | 64 +++- .../alerting-profile/default.json | 103 ++++++ .../calculated-metrics-service/README.md | 10 + .../conditional-naming-processgroup/README.md | 67 ++++ .../conditional-naming-processgroup.yaml | 8 + .../template.json | 29 ++ .../conditional-naming-service/README.md | 35 ++ .../conditional-naming-service.yaml | 8 + .../conditional-naming-service/template.json | 29 ++ .../custom-service-java/README.md | 4 + .../custom-service-java.yaml | 9 + .../custom-service-java/template-1-1.json | 23 ++ .../CD_Messaging-Services/dashboard/README.md | 13 + .../dashboard/dashboard.yaml | 127 ++++++++ .../dashboard/default.json | 308 ++++++++++++++++++ .../management-zone/CDMessaging-Services.json | 176 ---------- .../management-zone/README.md | 76 +++++ .../management-zone/default.json} | 242 ++++++++------ .../management-zone/management-zone.yaml | 4 +- .../notification/README.md | 60 ++++ .../notification/email.json | 13 + .../notification/msTeams.json | 11 + .../notification/notification.yaml | 54 ++- .../synthetic-monitor/README.md | 4 + .../synthetic-monitor/default.json | 82 +++++ .../synthetic-monitor/synthetic-monitor.yaml | 10 + .../alerting-profile/NewComponent.json | 92 ------ .../alerting-profile/alerting-profile.yaml | 64 +++- .../CD_PISA/alerting-profile/default.json | 103 ++++++ .../calculated-metrics-service/README.md | 10 + .../conditional-naming-processgroup/README.md | 67 ++++ .../conditional-naming-processgroup.yaml | 8 + .../template.json | 29 ++ .../conditional-naming-service/README.md | 35 ++ .../conditional-naming-service.yaml | 8 + .../conditional-naming-service/template.json | 29 ++ .../CD_PISA/custom-service-java/README.md | 4 + .../custom-service-java.yaml | 9 + .../custom-service-java/template-1-1.json | 23 ++ .../CD_PISA/dashboard/README.md | 13 + .../CD_PISA/dashboard/dashboard.yaml | 127 ++++++++ .../CD_PISA/dashboard/default.json | 308 ++++++++++++++++++ .../CD_PISA/management-zone/README.md | 76 +++++ .../CD_PISA/management-zone/default.json | 114 +++++++ .../management-zone/management-zone.yaml | 28 +- .../CD_PISA/notification/README.md | 60 ++++ .../CD_PISA/notification/email.json | 13 + .../CD_PISA/notification/msTeams.json | 11 + .../CD_PISA/notification/notification.yaml | 54 ++- .../CD_PISA/synthetic-monitor/README.md | 4 + .../CD_PISA/synthetic-monitor/default.json | 82 +++++ .../synthetic-monitor/synthetic-monitor.yaml | 10 + .../alerting-profile/alerting-profile.yaml | 53 ++- .../CD_Perseus/alerting-profile/default.json | 103 ++++++ .../calculated-metrics-service/README.md | 10 + .../conditional-naming-processgroup/README.md | 67 ++++ .../conditional-naming-processgroup.yaml | 8 + .../template.json | 29 ++ .../conditional-naming-service/README.md | 35 ++ .../conditional-naming-service.yaml | 8 + .../conditional-naming-service/template.json | 29 ++ .../CD_Perseus/custom-service-java/README.md | 4 + .../custom-service-java.yaml | 9 + .../custom-service-java/template-1-1.json | 23 ++ .../CD_Perseus/dashboard/README.md | 13 + .../CD_Perseus/dashboard/dashboard.yaml | 127 ++++++++ .../CD_Perseus/dashboard/default.json | 308 ++++++++++++++++++ .../CD_Perseus/management-zone/README.md | 76 +++++ .../CD_Perseus/management-zone/default.json | 114 +++++++ .../management-zone/management-zone.yaml | 5 +- .../CD_Perseus/notification/README.md | 60 ++++ .../CD_Perseus/notification/email.json | 13 + .../CD_Perseus/notification/msTeams.json | 11 + .../CD_Perseus/notification/notification.yaml | 58 +++- .../CD_Perseus/synthetic-monitor/README.md | 4 + .../CD_Perseus/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 + .../conditional-naming-processgroup/README.md | 67 ++++ .../conditional-naming-processgroup.yaml | 8 + .../template.json | 29 ++ .../conditional-naming-service/README.md | 35 ++ .../conditional-naming-service.yaml | 8 + .../conditional-naming-service/template.json | 29 ++ .../custom-service-java/README.md | 4 + .../custom-service-java.yaml | 9 + .../custom-service-java/template-1-1.json | 23 ++ .../CD_RemoteServices/dashboard/README.md | 13 + .../dashboard/dashboard.yaml | 127 ++++++++ .../CD_RemoteServices/dashboard/default.json | 308 ++++++++++++++++++ .../management-zone/CDRemoteServices.json | 267 --------------- .../management-zone/README.md | 76 +++++ .../management-zone/default.json | 114 +++++++ .../management-zone/management-zone.yaml | 3 +- .../CD_RemoteServices/notification/README.md | 60 ++++ .../CD_RemoteServices/notification/email.json | 13 + .../notification/msTeams.json | 11 + .../notification/notification.yaml | 51 +++ .../synthetic-monitor/README.md | 4 + .../synthetic-monitor/default.json | 82 +++++ .../synthetic-monitor/synthetic-monitor.yaml | 10 + .../alerting-profile/NewComponent.json | 91 ------ .../alerting-profile/alerting-profile.yaml | 66 +++- .../CD_Speech/alerting-profile/default.json | 103 ++++++ .../calculated-metrics-service/README.md | 10 + .../conditional-naming-processgroup/README.md | 67 ++++ .../conditional-naming-processgroup.yaml | 8 + .../template.json | 29 ++ .../conditional-naming-service/README.md | 35 ++ .../conditional-naming-service.yaml | 8 + .../conditional-naming-service/template.json | 29 ++ .../CD_Speech/custom-service-java/README.md | 4 + .../custom-service-java.yaml | 9 + .../custom-service-java/template-1-1.json | 23 ++ .../CD_Speech/dashboard/README.md | 13 + .../CD_Speech/dashboard/dashboard.yaml | 127 ++++++++ .../CD_Speech/dashboard/default.json | 308 ++++++++++++++++++ .../CD_Speech/management-zone/README.md | 76 +++++ .../CD_Speech/management-zone/default.json | 114 +++++++ .../management-zone/management-zone.yaml | 5 +- .../CD_Speech/notification/README.md | 60 ++++ .../CD_Speech/notification/email.json | 13 + .../CD_Speech/notification/msTeams.json | 11 + .../CD_Speech/notification/notification.yaml | 56 +++- .../CD_Speech/synthetic-monitor/README.md | 4 + .../CD_Speech/synthetic-monitor/default.json | 82 +++++ .../synthetic-monitor/synthetic-monitor.yaml | 10 + .../conditional-naming-processgroup/README.md | 67 ++++ .../conditional-naming-processgroup.yaml | 8 + .../template.json | 29 ++ .../conditional-naming-service/README.md | 35 ++ .../conditional-naming-service.yaml | 8 + .../conditional-naming-service/template.json | 29 ++ .../custom-service-java/README.md | 30 +- .../synthetic-monitor/README.md | 37 +-- .../conditional-naming-processgroup/README.md | 67 ++++ .../conditional-naming-processgroup.yaml | 8 + .../template.json | 29 ++ .../conditional-naming-service/README.md | 35 ++ .../conditional-naming-service.yaml | 8 + .../conditional-naming-service/template.json | 29 ++ .../CD_aluis/custom-service-java/README.md | 30 +- .../CD_aluis/synthetic-monitor/README.md | 37 +-- .../conditional-naming-processgroup/README.md | 67 ++++ .../conditional-naming-processgroup.yaml | 8 + .../template.json | 29 ++ .../conditional-naming-service/README.md | 35 ++ .../conditional-naming-service.yaml | 8 + .../conditional-naming-service/template.json | 29 ++ .../CD_am-casa/custom-service-java/README.md | 30 +- .../CD_am-casa/synthetic-monitor/README.md | 37 +-- .../conditional-naming-processgroup/README.md | 67 ++++ .../conditional-naming-processgroup.yaml | 8 + .../template.json | 29 ++ .../conditional-naming-service/README.md | 35 ++ .../conditional-naming-service.yaml | 8 + .../conditional-naming-service/template.json | 29 ++ .../CD_am-cesim/custom-service-java/README.md | 30 +- .../CD_am-cesim/synthetic-monitor/README.md | 37 +-- .../conditional-naming-processgroup/README.md | 67 ++++ .../conditional-naming-processgroup.yaml | 8 + .../template.json | 29 ++ .../conditional-naming-service/README.md | 35 ++ .../conditional-naming-service.yaml | 8 + .../conditional-naming-service/template.json | 29 ++ .../CD_am-cns/custom-service-java/README.md | 30 +- .../CD_am-cns/synthetic-monitor/README.md | 37 +-- .../conditional-naming-processgroup/README.md | 67 ++++ .../conditional-naming-processgroup.yaml | 8 + .../template.json | 29 ++ .../conditional-naming-service/README.md | 35 ++ .../conditional-naming-service.yaml | 8 + .../conditional-naming-service/template.json | 29 ++ .../custom-service-java/README.md | 30 +- .../CD_am-device/synthetic-monitor/README.md | 37 +-- .../conditional-naming-processgroup/README.md | 67 ++++ .../conditional-naming-processgroup.yaml | 8 + .../template.json | 29 ++ .../conditional-naming-service/README.md | 35 ++ .../conditional-naming-service.yaml | 8 + .../conditional-naming-service/template.json | 29 ++ .../CD_am-ecs/custom-service-java/README.md | 30 +- .../CD_am-ecs/synthetic-monitor/README.md | 37 +-- .../conditional-naming-processgroup/README.md | 67 ++++ .../conditional-naming-processgroup.yaml | 8 + .../template.json | 29 ++ .../conditional-naming-service/README.md | 35 ++ .../conditional-naming-service.yaml | 8 + .../conditional-naming-service/template.json | 29 ++ .../CD_am-egim/custom-service-java/README.md | 30 +- .../CD_am-egim/synthetic-monitor/README.md | 37 +-- .../conditional-naming-processgroup/README.md | 67 ++++ .../conditional-naming-processgroup.yaml | 8 + .../template.json | 29 ++ .../conditional-naming-service/README.md | 35 ++ .../conditional-naming-service.yaml | 8 + .../conditional-naming-service/template.json | 29 ++ .../custom-service-java/README.md | 30 +- .../CD_am-esim-ui/synthetic-monitor/README.md | 37 +-- .../conditional-naming-processgroup/README.md | 67 ++++ .../conditional-naming-processgroup.yaml | 8 + .../template.json | 29 ++ .../conditional-naming-service/README.md | 35 ++ .../conditional-naming-service.yaml | 8 + .../conditional-naming-service/template.json | 29 ++ .../CD_am-lmcs/custom-service-java/README.md | 30 +- .../CD_am-lmcs/synthetic-monitor/README.md | 37 +-- .../conditional-naming-processgroup/README.md | 67 ++++ .../conditional-naming-processgroup.yaml | 8 + .../template.json | 29 ++ .../conditional-naming-service/README.md | 35 ++ .../conditional-naming-service.yaml | 8 + .../conditional-naming-service/template.json | 29 ++ .../custom-service-java/README.md | 30 +- .../synthetic-monitor/README.md | 37 +-- .../conditional-naming-processgroup/README.md | 67 ++++ .../conditional-naming-processgroup.yaml | 8 + .../template.json | 29 ++ .../conditional-naming-service/README.md | 35 ++ .../conditional-naming-service.yaml | 8 + .../conditional-naming-service/template.json | 29 ++ .../CD_am-proxy/custom-service-java/README.md | 30 +- .../CD_am-proxy/synthetic-monitor/README.md | 37 +-- .../conditional-naming-processgroup/README.md | 67 ++++ .../conditional-naming-processgroup.yaml | 8 + .../template.json | 29 ++ .../conditional-naming-service/README.md | 35 ++ .../conditional-naming-service.yaml | 8 + .../conditional-naming-service/template.json | 29 ++ .../CD_am-store/custom-service-java/README.md | 30 +- .../CD_am-store/synthetic-monitor/README.md | 37 +-- .../conditional-naming-processgroup/README.md | 67 ++++ .../conditional-naming-processgroup.yaml | 8 + .../template.json | 29 ++ .../conditional-naming-service/README.md | 35 ++ .../conditional-naming-service.yaml | 8 + .../conditional-naming-service/template.json | 29 ++ .../CD_am-svms/custom-service-java/README.md | 30 +- .../CD_am-svms/synthetic-monitor/README.md | 37 +-- .../conditional-naming-processgroup/README.md | 67 ++++ .../conditional-naming-processgroup.yaml | 8 + .../template.json | 29 ++ .../conditional-naming-service/README.md | 35 ++ .../conditional-naming-service.yaml | 8 + .../conditional-naming-service/template.json | 29 ++ .../CD_am-ui/custom-service-java/README.md | 30 +- .../CD_am-ui/synthetic-monitor/README.md | 37 +-- .../conditional-naming-processgroup/README.md | 67 ++++ .../conditional-naming-processgroup.yaml | 8 + .../template.json | 29 ++ .../conditional-naming-service/README.md | 35 ++ .../conditional-naming-service.yaml | 8 + .../conditional-naming-service/template.json | 29 ++ .../CD_am-usage/custom-service-java/README.md | 30 +- .../CD_am-usage/synthetic-monitor/README.md | 37 +-- .../conditional-naming-processgroup/README.md | 67 ++++ .../conditional-naming-processgroup.yaml | 8 + .../template.json | 29 ++ .../conditional-naming-service/README.md | 35 ++ .../conditional-naming-service.yaml | 8 + .../conditional-naming-service/template.json | 29 ++ .../custom-service-java/README.md | 30 +- .../synthetic-monitor/README.md | 37 +-- .../conditional-naming-processgroup/README.md | 67 ++++ .../conditional-naming-processgroup.yaml | 8 + .../template.json | 29 ++ .../conditional-naming-service/README.md | 35 ++ .../conditional-naming-service.yaml | 8 + .../conditional-naming-service/template.json | 29 ++ .../CD_am-vms/custom-service-java/README.md | 30 +- .../CD_am-vms/synthetic-monitor/README.md | 37 +-- .../conditional-naming-processgroup/README.md | 67 ++++ .../conditional-naming-processgroup.yaml | 8 + .../template.json | 29 ++ .../conditional-naming-service/README.md | 35 ++ .../conditional-naming-service.yaml | 8 + .../conditional-naming-service/template.json | 29 ++ .../custom-service-java/README.md | 30 +- .../synthetic-monitor/README.md | 37 +-- .../conditional-naming-processgroup/README.md | 67 ++++ .../conditional-naming-processgroup.yaml | 8 + .../template.json | 29 ++ .../conditional-naming-service/README.md | 35 ++ .../conditional-naming-service.yaml | 8 + .../conditional-naming-service/template.json | 29 ++ .../custom-service-java/README.md | 30 +- .../synthetic-monitor/README.md | 37 +-- .../conditional-naming-processgroup/README.md | 67 ++++ .../conditional-naming-processgroup.yaml | 8 + .../template.json | 29 ++ .../conditional-naming-service/README.md | 35 ++ .../conditional-naming-service.yaml | 8 + .../conditional-naming-service/template.json | 29 ++ .../custom-service-java/README.md | 30 +- .../synthetic-monitor/README.md | 37 +-- .../conditional-naming-processgroup/README.md | 67 ++++ .../conditional-naming-processgroup.yaml | 8 + .../template.json | 29 ++ .../conditional-naming-service/README.md | 35 ++ .../conditional-naming-service.yaml | 8 + .../conditional-naming-service/template.json | 29 ++ .../custom-service-java/README.md | 30 +- .../synthetic-monitor/README.md | 37 +-- .../conditional-naming-processgroup/README.md | 67 ++++ .../conditional-naming-processgroup.yaml | 8 + .../template.json | 29 ++ .../conditional-naming-service/README.md | 35 ++ .../conditional-naming-service.yaml | 8 + .../conditional-naming-service/template.json | 29 ++ .../CD_asbc-sts/custom-service-java/README.md | 30 +- .../CD_asbc-sts/synthetic-monitor/README.md | 37 +-- .../conditional-naming-processgroup/README.md | 67 ++++ .../conditional-naming-processgroup.yaml | 8 + .../template.json | 29 ++ .../conditional-naming-service/README.md | 35 ++ .../conditional-naming-service.yaml | 8 + .../conditional-naming-service/template.json | 29 ++ .../CD_asbctvp/custom-service-java/README.md | 30 +- .../CD_asbctvp/synthetic-monitor/README.md | 37 +-- .../conditional-naming-processgroup/README.md | 67 ++++ .../conditional-naming-processgroup.yaml | 8 + .../template.json | 29 ++ .../conditional-naming-service/README.md | 35 ++ .../conditional-naming-service.yaml | 8 + .../conditional-naming-service/template.json | 29 ++ .../custom-service-java/README.md | 30 +- .../synthetic-monitor/README.md | 37 +-- .../conditional-naming-processgroup/README.md | 67 ++++ .../conditional-naming-processgroup.yaml | 8 + .../template.json | 29 ++ .../conditional-naming-service/README.md | 35 ++ .../conditional-naming-service.yaml | 8 + .../conditional-naming-service/template.json | 29 ++ .../custom-service-java/README.md | 30 +- .../synthetic-monitor/README.md | 37 +-- .../conditional-naming-processgroup/README.md | 67 ++++ .../conditional-naming-processgroup.yaml | 8 + .../template.json | 29 ++ .../conditional-naming-service/README.md | 35 ++ .../conditional-naming-service.yaml | 8 + .../conditional-naming-service/template.json | 29 ++ .../custom-service-java/README.md | 30 +- .../CD_b2v-com-be/synthetic-monitor/README.md | 37 +-- .../conditional-naming-processgroup/README.md | 67 ++++ .../conditional-naming-processgroup.yaml | 8 + .../template.json | 29 ++ .../conditional-naming-service/README.md | 35 ++ .../conditional-naming-service.yaml | 8 + .../conditional-naming-service/template.json | 29 ++ .../custom-service-java/README.md | 30 +- .../synthetic-monitor/README.md | 37 +-- .../conditional-naming-processgroup/README.md | 67 ++++ .../conditional-naming-processgroup.yaml | 8 + .../template.json | 29 ++ .../conditional-naming-service/README.md | 35 ++ .../conditional-naming-service.yaml | 8 + .../conditional-naming-service/template.json | 29 ++ .../custom-service-java/README.md | 30 +- .../CD_b2v-com-fe/synthetic-monitor/README.md | 37 +-- .../conditional-naming-processgroup/README.md | 67 ++++ .../conditional-naming-processgroup.yaml | 8 + .../template.json | 29 ++ .../conditional-naming-service/README.md | 35 ++ .../conditional-naming-service.yaml | 8 + .../conditional-naming-service/template.json | 29 ++ .../custom-service-java/README.md | 30 +- .../synthetic-monitor/README.md | 37 +-- .../conditional-naming-processgroup/README.md | 67 ++++ .../conditional-naming-processgroup.yaml | 8 + .../template.json | 29 ++ .../conditional-naming-service/README.md | 35 ++ .../conditional-naming-service.yaml | 8 + .../conditional-naming-service/template.json | 29 ++ .../custom-service-java/README.md | 30 +- .../synthetic-monitor/README.md | 37 +-- .../conditional-naming-processgroup/README.md | 67 ++++ .../conditional-naming-processgroup.yaml | 8 + .../template.json | 29 ++ .../conditional-naming-service/README.md | 35 ++ .../conditional-naming-service.yaml | 8 + .../conditional-naming-service/template.json | 29 ++ .../CD_b2v-nots/custom-service-java/README.md | 30 +- .../CD_b2v-nots/synthetic-monitor/README.md | 37 +-- .../conditional-naming-processgroup/README.md | 67 ++++ .../conditional-naming-processgroup.yaml | 8 + .../template.json | 29 ++ .../conditional-naming-service/README.md | 35 ++ .../conditional-naming-service.yaml | 8 + .../conditional-naming-service/template.json | 29 ++ .../custom-service-java/README.md | 30 +- .../synthetic-monitor/README.md | 37 +-- .../conditional-naming-processgroup/README.md | 67 ++++ .../conditional-naming-processgroup.yaml | 8 + .../template.json | 29 ++ .../conditional-naming-service/README.md | 35 ++ .../conditional-naming-service.yaml | 8 + .../conditional-naming-service/template.json | 29 ++ .../custom-service-java/README.md | 30 +- .../synthetic-monitor/README.md | 37 +-- .../conditional-naming-processgroup/README.md | 67 ++++ .../conditional-naming-processgroup.yaml | 8 + .../template.json | 29 ++ .../conditional-naming-service/README.md | 35 ++ .../conditional-naming-service.yaml | 8 + .../conditional-naming-service/template.json | 29 ++ .../custom-service-java/README.md | 30 +- .../synthetic-monitor/README.md | 37 +-- .../conditional-naming-processgroup/README.md | 67 ++++ .../conditional-naming-processgroup.yaml | 8 + .../template.json | 29 ++ .../conditional-naming-service/README.md | 35 ++ .../conditional-naming-service.yaml | 8 + .../conditional-naming-service/template.json | 29 ++ .../CD_cac/custom-service-java/README.md | 30 +- .../CD_cac/synthetic-monitor/README.md | 37 +-- .../conditional-naming-processgroup/README.md | 67 ++++ .../conditional-naming-processgroup.yaml | 8 + .../template.json | 29 ++ .../conditional-naming-service/README.md | 35 ++ .../conditional-naming-service.yaml | 8 + .../conditional-naming-service/template.json | 29 ++ .../custom-service-java/README.md | 30 +- .../synthetic-monitor/README.md | 37 +-- .../conditional-naming-processgroup/README.md | 67 ++++ .../conditional-naming-processgroup.yaml | 8 + .../template.json | 29 ++ .../conditional-naming-service/README.md | 35 ++ .../conditional-naming-service.yaml | 8 + .../conditional-naming-service/template.json | 29 ++ .../CD_cdc/custom-service-java/README.md | 30 +- .../CD_cdc/synthetic-monitor/README.md | 37 +-- .../conditional-naming-processgroup/README.md | 67 ++++ .../conditional-naming-processgroup.yaml | 8 + .../template.json | 29 ++ .../conditional-naming-service/README.md | 35 ++ .../conditional-naming-service.yaml | 8 + .../conditional-naming-service/template.json | 29 ++ .../custom-service-java/README.md | 30 +- .../synthetic-monitor/README.md | 37 +-- .../conditional-naming-processgroup/README.md | 67 ++++ .../conditional-naming-processgroup.yaml | 8 + .../template.json | 29 ++ .../conditional-naming-service/README.md | 35 ++ .../conditional-naming-service.yaml | 8 + .../conditional-naming-service/template.json | 29 ++ .../custom-service-java/README.md | 30 +- .../synthetic-monitor/README.md | 37 +-- .../conditional-naming-processgroup/README.md | 67 ++++ .../conditional-naming-processgroup.yaml | 8 + .../template.json | 29 ++ .../conditional-naming-service/README.md | 35 ++ .../conditional-naming-service.yaml | 8 + .../conditional-naming-service/template.json | 29 ++ .../custom-service-java/README.md | 30 +- .../synthetic-monitor/README.md | 37 +-- .../conditional-naming-processgroup/README.md | 67 ++++ .../conditional-naming-processgroup.yaml | 8 + .../template.json | 29 ++ .../conditional-naming-service/README.md | 35 ++ .../conditional-naming-service.yaml | 8 + .../conditional-naming-service/template.json | 29 ++ .../custom-service-java/README.md | 30 +- .../synthetic-monitor/README.md | 37 +-- .../conditional-naming-processgroup/README.md | 67 ++++ .../conditional-naming-processgroup.yaml | 8 + .../template.json | 29 ++ .../conditional-naming-service/README.md | 35 ++ .../conditional-naming-service.yaml | 8 + .../conditional-naming-service/template.json | 29 ++ .../custom-service-java/README.md | 30 +- .../synthetic-monitor/README.md | 37 +-- .../conditional-naming-processgroup/README.md | 67 ++++ .../conditional-naming-processgroup.yaml | 8 + .../template.json | 29 ++ .../conditional-naming-service/README.md | 35 ++ .../conditional-naming-service.yaml | 8 + .../conditional-naming-service/template.json | 29 ++ .../custom-service-java/README.md | 30 +- .../synthetic-monitor/README.md | 37 +-- .../conditional-naming-processgroup/README.md | 67 ++++ .../conditional-naming-processgroup.yaml | 8 + .../template.json | 29 ++ .../conditional-naming-service/README.md | 35 ++ .../conditional-naming-service.yaml | 8 + .../conditional-naming-service/template.json | 29 ++ .../custom-service-java/README.md | 30 +- .../synthetic-monitor/README.md | 37 +-- .../conditional-naming-processgroup/README.md | 67 ++++ .../conditional-naming-processgroup.yaml | 8 + .../template.json | 29 ++ .../conditional-naming-service/README.md | 35 ++ .../conditional-naming-service.yaml | 8 + .../conditional-naming-service/template.json | 29 ++ .../custom-service-java/README.md | 30 +- .../synthetic-monitor/README.md | 37 +-- .../conditional-naming-processgroup/README.md | 67 ++++ .../conditional-naming-processgroup.yaml | 8 + .../template.json | 29 ++ .../conditional-naming-service/README.md | 35 ++ .../conditional-naming-service.yaml | 8 + .../conditional-naming-service/template.json | 29 ++ .../custom-service-java/README.md | 30 +- .../synthetic-monitor/README.md | 37 +-- .../conditional-naming-processgroup/README.md | 67 ++++ .../conditional-naming-processgroup.yaml | 8 + .../template.json | 29 ++ .../conditional-naming-service/README.md | 35 ++ .../conditional-naming-service.yaml | 8 + .../conditional-naming-service/template.json | 29 ++ .../custom-service-java/README.md | 30 +- .../synthetic-monitor/README.md | 37 +-- .../conditional-naming-processgroup/README.md | 67 ++++ .../conditional-naming-processgroup.yaml | 8 + .../template.json | 29 ++ .../conditional-naming-service/README.md | 35 ++ .../conditional-naming-service.yaml | 8 + .../conditional-naming-service/template.json | 29 ++ .../custom-service-java/README.md | 30 +- .../synthetic-monitor/README.md | 37 +-- .../conditional-naming-processgroup/README.md | 67 ++++ .../conditional-naming-processgroup.yaml | 8 + .../template.json | 29 ++ .../conditional-naming-service/README.md | 35 ++ .../conditional-naming-service.yaml | 8 + .../conditional-naming-service/template.json | 29 ++ .../custom-service-java/README.md | 30 +- .../synthetic-monitor/README.md | 37 +-- .../conditional-naming-processgroup/README.md | 67 ++++ .../conditional-naming-processgroup.yaml | 8 + .../template.json | 29 ++ .../conditional-naming-service/README.md | 35 ++ .../conditional-naming-service.yaml | 8 + .../conditional-naming-service/template.json | 29 ++ .../custom-service-java/README.md | 30 +- .../synthetic-monitor/README.md | 37 +-- .../conditional-naming-processgroup/README.md | 67 ++++ .../conditional-naming-processgroup.yaml | 8 + .../template.json | 29 ++ .../conditional-naming-service/README.md | 35 ++ .../conditional-naming-service.yaml | 8 + .../conditional-naming-service/template.json | 29 ++ .../custom-service-java/README.md | 30 +- .../synthetic-monitor/README.md | 37 +-- .../conditional-naming-processgroup/README.md | 67 ++++ .../conditional-naming-processgroup.yaml | 8 + .../template.json | 29 ++ .../conditional-naming-service/README.md | 35 ++ .../conditional-naming-service.yaml | 8 + .../conditional-naming-service/template.json | 29 ++ .../CD_cm/custom-service-java/README.md | 30 +- .../CD_cm/synthetic-monitor/README.md | 37 +-- .../conditional-naming-processgroup/README.md | 67 ++++ .../conditional-naming-processgroup.yaml | 8 + .../template.json | 29 ++ .../conditional-naming-service/README.md | 35 ++ .../conditional-naming-service.yaml | 8 + .../conditional-naming-service/template.json | 29 ++ .../custom-service-java/README.md | 30 +- .../synthetic-monitor/README.md | 37 +-- .../conditional-naming-processgroup/README.md | 67 ++++ .../conditional-naming-processgroup.yaml | 8 + .../template.json | 29 ++ .../conditional-naming-service/README.md | 35 ++ .../conditional-naming-service.yaml | 8 + .../conditional-naming-service/template.json | 29 ++ .../custom-service-java/README.md | 30 +- .../synthetic-monitor/README.md | 37 +-- .../conditional-naming-processgroup/README.md | 67 ++++ .../conditional-naming-processgroup.yaml | 8 + .../template.json | 29 ++ .../conditional-naming-service/README.md | 35 ++ .../conditional-naming-service.yaml | 8 + .../conditional-naming-service/template.json | 29 ++ .../custom-service-java/README.md | 30 +- .../synthetic-monitor/README.md | 37 +-- .../conditional-naming-processgroup/README.md | 67 ++++ .../conditional-naming-processgroup.yaml | 8 + .../template.json | 29 ++ .../conditional-naming-service/README.md | 35 ++ .../conditional-naming-service.yaml | 8 + .../conditional-naming-service/template.json | 29 ++ .../custom-service-java/README.md | 30 +- .../synthetic-monitor/README.md | 37 +-- .../conditional-naming-processgroup/README.md | 67 ++++ .../conditional-naming-processgroup.yaml | 8 + .../template.json | 29 ++ .../conditional-naming-service/README.md | 35 ++ .../conditional-naming-service.yaml | 8 + .../conditional-naming-service/template.json | 29 ++ .../custom-service-java/README.md | 30 +- .../synthetic-monitor/README.md | 37 +-- .../conditional-naming-processgroup/README.md | 67 ++++ .../conditional-naming-processgroup.yaml | 8 + .../template.json | 29 ++ .../conditional-naming-service/README.md | 35 ++ .../conditional-naming-service.yaml | 8 + .../conditional-naming-service/template.json | 29 ++ .../CD_csu/custom-service-java/README.md | 30 +- .../CD_csu/synthetic-monitor/README.md | 37 +-- .../conditional-naming-processgroup/README.md | 67 ++++ .../conditional-naming-processgroup.yaml | 8 + .../template.json | 29 ++ .../conditional-naming-service/README.md | 35 ++ .../conditional-naming-service.yaml | 8 + .../conditional-naming-service/template.json | 29 ++ .../custom-service-java/README.md | 30 +- .../synthetic-monitor/README.md | 37 +-- .../conditional-naming-processgroup/README.md | 67 ++++ .../conditional-naming-processgroup.yaml | 8 + .../template.json | 29 ++ .../conditional-naming-service/README.md | 35 ++ .../conditional-naming-service.yaml | 8 + .../conditional-naming-service/template.json | 29 ++ .../custom-service-java/README.md | 30 +- .../synthetic-monitor/README.md | 37 +-- .../conditional-naming-processgroup/README.md | 67 ++++ .../conditional-naming-processgroup.yaml | 8 + .../template.json | 29 ++ .../conditional-naming-service/README.md | 35 ++ .../conditional-naming-service.yaml | 8 + .../conditional-naming-service/template.json | 29 ++ .../custom-service-java/README.md | 30 +- .../synthetic-monitor/README.md | 37 +-- .../conditional-naming-processgroup/README.md | 67 ++++ .../conditional-naming-processgroup.yaml | 8 + .../template.json | 29 ++ .../conditional-naming-service/README.md | 35 ++ .../conditional-naming-service.yaml | 8 + .../conditional-naming-service/template.json | 29 ++ .../custom-service-java/README.md | 30 +- .../synthetic-monitor/README.md | 37 +-- .../conditional-naming-processgroup/README.md | 67 ++++ .../conditional-naming-processgroup.yaml | 8 + .../template.json | 29 ++ .../conditional-naming-service/README.md | 35 ++ .../conditional-naming-service.yaml | 8 + .../conditional-naming-service/template.json | 29 ++ .../custom-service-java/README.md | 30 +- .../synthetic-monitor/README.md | 37 +-- .../conditional-naming-processgroup/README.md | 67 ++++ .../conditional-naming-processgroup.yaml | 8 + .../template.json | 29 ++ .../conditional-naming-service/README.md | 35 ++ .../conditional-naming-service.yaml | 8 + .../conditional-naming-service/template.json | 29 ++ .../custom-service-java/README.md | 30 +- .../synthetic-monitor/README.md | 37 +-- .../conditional-naming-processgroup/README.md | 67 ++++ .../conditional-naming-processgroup.yaml | 8 + .../template.json | 29 ++ .../conditional-naming-service/README.md | 35 ++ .../conditional-naming-service.yaml | 8 + .../conditional-naming-service/template.json | 29 ++ .../custom-service-java/README.md | 30 +- .../synthetic-monitor/README.md | 37 +-- .../conditional-naming-processgroup/README.md | 67 ++++ .../conditional-naming-processgroup.yaml | 8 + .../template.json | 29 ++ .../conditional-naming-service/README.md | 35 ++ .../conditional-naming-service.yaml | 8 + .../conditional-naming-service/template.json | 29 ++ .../custom-service-java/README.md | 30 +- .../synthetic-monitor/README.md | 37 +-- .../conditional-naming-processgroup/README.md | 67 ++++ .../conditional-naming-processgroup.yaml | 8 + .../template.json | 29 ++ .../conditional-naming-service/README.md | 35 ++ .../conditional-naming-service.yaml | 8 + .../conditional-naming-service/template.json | 29 ++ .../custom-service-java/README.md | 30 +- .../synthetic-monitor/README.md | 37 +-- .../conditional-naming-processgroup/README.md | 67 ++++ .../conditional-naming-processgroup.yaml | 8 + .../template.json | 29 ++ .../conditional-naming-service/README.md | 35 ++ .../conditional-naming-service.yaml | 8 + .../conditional-naming-service/template.json | 29 ++ .../custom-service-java/README.md | 30 +- .../synthetic-monitor/README.md | 37 +-- .../conditional-naming-processgroup/README.md | 67 ++++ .../conditional-naming-processgroup.yaml | 8 + .../template.json | 29 ++ .../conditional-naming-service/README.md | 35 ++ .../conditional-naming-service.yaml | 8 + .../conditional-naming-service/template.json | 29 ++ .../custom-service-java/README.md | 30 +- .../synthetic-monitor/README.md | 37 +-- .../conditional-naming-processgroup/README.md | 67 ++++ .../conditional-naming-processgroup.yaml | 8 + .../template.json | 29 ++ .../conditional-naming-service/README.md | 35 ++ .../conditional-naming-service.yaml | 8 + .../conditional-naming-service/template.json | 29 ++ .../custom-service-java/README.md | 30 +- .../synthetic-monitor/README.md | 37 +-- .../conditional-naming-processgroup/README.md | 67 ++++ .../conditional-naming-processgroup.yaml | 8 + .../template.json | 29 ++ .../conditional-naming-service/README.md | 35 ++ .../conditional-naming-service.yaml | 8 + .../conditional-naming-service/template.json | 29 ++ .../custom-service-java/README.md | 30 +- .../synthetic-monitor/README.md | 37 +-- .../conditional-naming-processgroup/README.md | 67 ++++ .../conditional-naming-processgroup.yaml | 8 + .../template.json | 29 ++ .../conditional-naming-service/README.md | 35 ++ .../conditional-naming-service.yaml | 8 + .../conditional-naming-service/template.json | 29 ++ .../CD_delivery/custom-service-java/README.md | 30 +- .../CD_delivery/synthetic-monitor/README.md | 37 +-- .../conditional-naming-processgroup/README.md | 67 ++++ .../conditional-naming-processgroup.yaml | 8 + .../template.json | 29 ++ .../conditional-naming-service/README.md | 35 ++ .../conditional-naming-service.yaml | 8 + .../conditional-naming-service/template.json | 29 ++ .../custom-service-java/README.md | 30 +- .../synthetic-monitor/README.md | 37 +-- .../conditional-naming-processgroup/README.md | 67 ++++ .../conditional-naming-processgroup.yaml | 8 + .../template.json | 29 ++ .../conditional-naming-service/README.md | 35 ++ .../conditional-naming-service.yaml | 8 + .../conditional-naming-service/template.json | 29 ++ .../custom-service-java/README.md | 30 +- .../synthetic-monitor/README.md | 37 +-- .../conditional-naming-processgroup/README.md | 67 ++++ .../conditional-naming-processgroup.yaml | 8 + .../template.json | 29 ++ .../conditional-naming-service/README.md | 35 ++ .../conditional-naming-service.yaml | 8 + .../conditional-naming-service/template.json | 29 ++ .../custom-service-java/README.md | 30 +- .../synthetic-monitor/README.md | 37 +-- .../conditional-naming-processgroup/README.md | 67 ++++ .../conditional-naming-processgroup.yaml | 8 + .../template.json | 29 ++ .../conditional-naming-service/README.md | 35 ++ .../conditional-naming-service.yaml | 8 + .../conditional-naming-service/template.json | 29 ++ .../CD_dsd/custom-service-java/README.md | 30 +- .../CD_dsd/synthetic-monitor/README.md | 37 +-- .../conditional-naming-processgroup/README.md | 67 ++++ .../conditional-naming-processgroup.yaml | 8 + .../template.json | 29 ++ .../conditional-naming-service/README.md | 35 ++ .../conditional-naming-service.yaml | 8 + .../conditional-naming-service/template.json | 29 ++ .../CD_eadb/custom-service-java/README.md | 30 +- .../CD_eadb/synthetic-monitor/README.md | 37 +-- .../conditional-naming-processgroup/README.md | 67 ++++ .../conditional-naming-processgroup.yaml | 8 + .../template.json | 29 ++ .../conditional-naming-service/README.md | 35 ++ .../conditional-naming-service.yaml | 8 + .../conditional-naming-service/template.json | 29 ++ .../CD_ercaf/custom-service-java/README.md | 30 +- .../CD_ercaf/synthetic-monitor/README.md | 37 +-- .../conditional-naming-processgroup/README.md | 67 ++++ .../conditional-naming-processgroup.yaml | 8 + .../template.json | 29 ++ .../conditional-naming-service/README.md | 35 ++ .../conditional-naming-service.yaml | 8 + .../conditional-naming-service/template.json | 29 ++ .../CD_ercr/custom-service-java/README.md | 30 +- .../CD_ercr/synthetic-monitor/README.md | 37 +-- .../conditional-naming-processgroup/README.md | 67 ++++ .../conditional-naming-processgroup.yaml | 8 + .../template.json | 29 ++ .../conditional-naming-service/README.md | 35 ++ .../conditional-naming-service.yaml | 8 + .../conditional-naming-service/template.json | 29 ++ .../CD_erd/custom-service-java/README.md | 30 +- .../CD_erd/synthetic-monitor/README.md | 37 +-- .../conditional-naming-processgroup/README.md | 67 ++++ .../conditional-naming-processgroup.yaml | 8 + .../template.json | 29 ++ .../conditional-naming-service/README.md | 35 ++ .../conditional-naming-service.yaml | 8 + .../conditional-naming-service/template.json | 29 ++ .../CD_esh/custom-service-java/README.md | 30 +- .../CD_esh/synthetic-monitor/README.md | 37 +-- .../conditional-naming-processgroup/README.md | 67 ++++ .../conditional-naming-processgroup.yaml | 8 + .../template.json | 29 ++ .../conditional-naming-service/README.md | 35 ++ .../conditional-naming-service.yaml | 8 + .../conditional-naming-service/template.json | 29 ++ .../custom-service-java/README.md | 30 +- .../synthetic-monitor/README.md | 37 +-- .../conditional-naming-processgroup/README.md | 67 ++++ .../conditional-naming-processgroup.yaml | 8 + .../template.json | 29 ++ .../conditional-naming-service/README.md | 35 ++ .../conditional-naming-service.yaml | 8 + .../conditional-naming-service/template.json | 29 ++ .../custom-service-java/README.md | 30 +- .../synthetic-monitor/README.md | 37 +-- .../conditional-naming-processgroup/README.md | 67 ++++ .../conditional-naming-processgroup.yaml | 8 + .../template.json | 29 ++ .../conditional-naming-service/README.md | 35 ++ .../conditional-naming-service.yaml | 8 + .../conditional-naming-service/template.json | 29 ++ .../custom-service-java/README.md | 30 +- .../synthetic-monitor/README.md | 37 +-- .../conditional-naming-processgroup/README.md | 67 ++++ .../conditional-naming-processgroup.yaml | 8 + .../template.json | 29 ++ .../conditional-naming-service/README.md | 35 ++ .../conditional-naming-service.yaml | 8 + .../conditional-naming-service/template.json | 29 ++ .../CD_fmc/custom-service-java/README.md | 30 +- .../CD_fmc/synthetic-monitor/README.md | 37 +-- .../conditional-naming-processgroup/README.md | 67 ++++ .../conditional-naming-processgroup.yaml | 8 + .../template.json | 29 ++ .../conditional-naming-service/README.md | 35 ++ .../conditional-naming-service.yaml | 8 + .../conditional-naming-service/template.json | 29 ++ .../custom-service-java/README.md | 30 +- .../synthetic-monitor/README.md | 37 +-- .../conditional-naming-processgroup/README.md | 67 ++++ .../conditional-naming-processgroup.yaml | 8 + .../template.json | 29 ++ .../conditional-naming-service/README.md | 35 ++ .../conditional-naming-service.yaml | 8 + .../conditional-naming-service/template.json | 29 ++ .../CD_hpauth/custom-service-java/README.md | 30 +- .../CD_hpauth/synthetic-monitor/README.md | 37 +-- .../conditional-naming-processgroup/README.md | 67 ++++ .../conditional-naming-processgroup.yaml | 8 + .../template.json | 29 ++ .../conditional-naming-service/README.md | 35 ++ .../conditional-naming-service.yaml | 8 + .../conditional-naming-service/template.json | 29 ++ .../custom-service-java/README.md | 30 +- .../synthetic-monitor/README.md | 37 +-- .../conditional-naming-processgroup/README.md | 67 ++++ .../conditional-naming-processgroup.yaml | 8 + .../template.json | 29 ++ .../conditional-naming-service/README.md | 35 ++ .../conditional-naming-service.yaml | 8 + .../conditional-naming-service/template.json | 29 ++ .../custom-service-java/README.md | 30 +- .../synthetic-monitor/README.md | 37 +-- .../conditional-naming-processgroup/README.md | 67 ++++ .../conditional-naming-processgroup.yaml | 8 + .../template.json | 29 ++ .../conditional-naming-service/README.md | 35 ++ .../conditional-naming-service.yaml | 8 + .../conditional-naming-service/template.json | 29 ++ .../custom-service-java/README.md | 30 +- .../CD_ids-admin/synthetic-monitor/README.md | 37 +-- .../conditional-naming-processgroup/README.md | 67 ++++ .../conditional-naming-processgroup.yaml | 8 + .../template.json | 29 ++ .../conditional-naming-service/README.md | 35 ++ .../conditional-naming-service.yaml | 8 + .../conditional-naming-service/template.json | 29 ++ .../CD_ids-svds/custom-service-java/README.md | 30 +- .../CD_ids-svds/synthetic-monitor/README.md | 37 +-- .../conditional-naming-processgroup/README.md | 67 ++++ .../conditional-naming-processgroup.yaml | 8 + .../template.json | 29 ++ .../conditional-naming-service/README.md | 35 ++ .../conditional-naming-service.yaml | 8 + .../conditional-naming-service/template.json | 29 ++ .../CD_ids-sync/custom-service-java/README.md | 30 +- .../CD_ids-sync/synthetic-monitor/README.md | 37 +-- .../conditional-naming-processgroup/README.md | 67 ++++ .../conditional-naming-processgroup.yaml | 8 + .../template.json | 29 ++ .../conditional-naming-service/README.md | 35 ++ .../conditional-naming-service.yaml | 8 + .../conditional-naming-service/template.json | 29 ++ .../CD_ids-ws/custom-service-java/README.md | 30 +- .../CD_ids-ws/synthetic-monitor/README.md | 37 +-- .../calculated-metrics-service/README.md | 10 + .../conditional-naming-processgroup/README.md | 67 ++++ .../conditional-naming-processgroup.yaml | 8 + .../template.json | 29 ++ .../conditional-naming-service/README.md | 35 ++ .../conditional-naming-service.yaml | 8 + .../conditional-naming-service/template.json | 29 ++ .../custom-service-java/README.md | 4 + .../custom-service-java.yaml | 9 + .../custom-service-java/template-1-1.json | 23 ++ .../notification/README.md | 60 ++++ .../notification/email.json | 13 + .../notification/msTeams.json | 11 + .../notification/notification.yaml | 51 +++ .../synthetic-monitor/README.md | 37 +-- .../conditional-naming-processgroup/README.md | 67 ++++ .../conditional-naming-processgroup.yaml | 8 + .../template.json | 29 ++ .../conditional-naming-service/README.md | 35 ++ .../conditional-naming-service.yaml | 8 + .../conditional-naming-service/template.json | 29 ++ .../custom-service-java/README.md | 30 +- .../synthetic-monitor/README.md | 37 +-- .../conditional-naming-processgroup/README.md | 67 ++++ .../conditional-naming-processgroup.yaml | 8 + .../template.json | 29 ++ .../conditional-naming-service/README.md | 35 ++ .../conditional-naming-service.yaml | 8 + .../conditional-naming-service/template.json | 29 ++ .../custom-service-java/README.md | 30 +- .../synthetic-monitor/README.md | 37 +-- .../conditional-naming-processgroup/README.md | 67 ++++ .../conditional-naming-processgroup.yaml | 8 + .../template.json | 29 ++ .../conditional-naming-service/README.md | 35 ++ .../conditional-naming-service.yaml | 8 + .../conditional-naming-service/template.json | 29 ++ .../CD_jdssp21/custom-service-java/README.md | 30 +- .../CD_jdssp21/synthetic-monitor/README.md | 37 +-- .../conditional-naming-processgroup/README.md | 67 ++++ .../conditional-naming-processgroup.yaml | 8 + .../template.json | 29 ++ .../conditional-naming-service/README.md | 35 ++ .../conditional-naming-service.yaml | 8 + .../conditional-naming-service/template.json | 29 ++ .../custom-service-java/README.md | 30 +- .../synthetic-monitor/README.md | 37 +-- .../conditional-naming-processgroup/README.md | 67 ++++ .../conditional-naming-processgroup.yaml | 8 + .../template.json | 29 ++ .../conditional-naming-service/README.md | 35 ++ .../conditional-naming-service.yaml | 8 + .../conditional-naming-service/template.json | 29 ++ .../custom-service-java/README.md | 30 +- .../synthetic-monitor/README.md | 37 +-- .../conditional-naming-processgroup/README.md | 67 ++++ .../conditional-naming-processgroup.yaml | 8 + .../template.json | 29 ++ .../conditional-naming-service/README.md | 35 ++ .../conditional-naming-service.yaml | 8 + .../conditional-naming-service/template.json | 29 ++ .../custom-service-java/README.md | 30 +- .../synthetic-monitor/README.md | 37 +-- .../conditional-naming-processgroup/README.md | 67 ++++ .../conditional-naming-processgroup.yaml | 8 + .../template.json | 29 ++ .../conditional-naming-service/README.md | 35 ++ .../conditional-naming-service.yaml | 8 + .../conditional-naming-service/template.json | 29 ++ .../custom-service-java/README.md | 30 +- .../synthetic-monitor/README.md | 37 +-- .../conditional-naming-processgroup/README.md | 67 ++++ .../conditional-naming-processgroup.yaml | 8 + .../template.json | 29 ++ .../conditional-naming-service/README.md | 35 ++ .../conditional-naming-service.yaml | 8 + .../conditional-naming-service/template.json | 29 ++ .../CD_lsc-kc/custom-service-java/README.md | 30 +- .../CD_lsc-kc/synthetic-monitor/README.md | 37 +-- .../conditional-naming-processgroup/README.md | 67 ++++ .../conditional-naming-processgroup.yaml | 8 + .../template.json | 29 ++ .../conditional-naming-service/README.md | 35 ++ .../conditional-naming-service.yaml | 8 + .../conditional-naming-service/template.json | 29 ++ .../CD_lsc-mm/custom-service-java/README.md | 30 +- .../CD_lsc-mm/synthetic-monitor/README.md | 37 +-- .../conditional-naming-processgroup/README.md | 67 ++++ .../conditional-naming-processgroup.yaml | 8 + .../template.json | 29 ++ .../conditional-naming-service/README.md | 35 ++ .../conditional-naming-service.yaml | 8 + .../conditional-naming-service/template.json | 29 ++ .../CD_lsc-oc/custom-service-java/README.md | 30 +- .../CD_lsc-oc/synthetic-monitor/README.md | 37 +-- .../conditional-naming-processgroup/README.md | 67 ++++ .../conditional-naming-processgroup.yaml | 8 + .../template.json | 29 ++ .../conditional-naming-service/README.md | 35 ++ .../conditional-naming-service.yaml | 8 + .../conditional-naming-service/template.json | 29 ++ .../CD_lsc-og/custom-service-java/README.md | 30 +- .../CD_lsc-og/synthetic-monitor/README.md | 37 +-- .../conditional-naming-processgroup/README.md | 67 ++++ .../conditional-naming-processgroup.yaml | 8 + .../template.json | 29 ++ .../conditional-naming-service/README.md | 35 ++ .../conditional-naming-service.yaml | 8 + .../conditional-naming-service/template.json | 29 ++ .../CD_mds/custom-service-java/README.md | 30 +- .../CD_mds/synthetic-monitor/README.md | 37 +-- .../conditional-naming-processgroup/README.md | 67 ++++ .../conditional-naming-processgroup.yaml | 8 + .../template.json | 29 ++ .../conditional-naming-service/README.md | 35 ++ .../conditional-naming-service.yaml | 8 + .../conditional-naming-service/template.json | 29 ++ .../custom-service-java/README.md | 30 +- .../synthetic-monitor/README.md | 37 +-- .../conditional-naming-processgroup/README.md | 67 ++++ .../conditional-naming-processgroup.yaml | 8 + .../template.json | 29 ++ .../conditional-naming-service/README.md | 35 ++ .../conditional-naming-service.yaml | 8 + .../conditional-naming-service/template.json | 29 ++ .../CD_mlc/custom-service-java/README.md | 30 +- .../CD_mlc/synthetic-monitor/README.md | 37 +-- .../conditional-naming-processgroup/README.md | 67 ++++ .../conditional-naming-processgroup.yaml | 8 + .../template.json | 29 ++ .../conditional-naming-service/README.md | 35 ++ .../conditional-naming-service.yaml | 8 + .../conditional-naming-service/template.json | 29 ++ .../CD_mrp/custom-service-java/README.md | 30 +- .../CD_mrp/synthetic-monitor/README.md | 37 +-- .../conditional-naming-processgroup/README.md | 67 ++++ .../conditional-naming-processgroup.yaml | 8 + .../template.json | 29 ++ .../conditional-naming-service/README.md | 35 ++ .../conditional-naming-service.yaml | 8 + .../conditional-naming-service/template.json | 29 ++ .../custom-service-java/README.md | 30 +- .../synthetic-monitor/README.md | 37 +-- .../conditional-naming-processgroup/README.md | 67 ++++ .../conditional-naming-processgroup.yaml | 8 + .../template.json | 29 ++ .../conditional-naming-service/README.md | 35 ++ .../conditional-naming-service.yaml | 8 + .../conditional-naming-service/template.json | 29 ++ .../custom-service-java/README.md | 30 +- .../CD_nop-admin/synthetic-monitor/README.md | 37 +-- .../conditional-naming-processgroup/README.md | 67 ++++ .../conditional-naming-processgroup.yaml | 8 + .../template.json | 29 ++ .../conditional-naming-service/README.md | 35 ++ .../conditional-naming-service.yaml | 8 + .../conditional-naming-service/template.json | 29 ++ .../custom-service-java/README.md | 30 +- .../synthetic-monitor/README.md | 37 +-- .../conditional-naming-processgroup/README.md | 67 ++++ .../conditional-naming-processgroup.yaml | 8 + .../template.json | 29 ++ .../conditional-naming-service/README.md | 35 ++ .../conditional-naming-service.yaml | 8 + .../conditional-naming-service/template.json | 29 ++ .../custom-service-java/README.md | 30 +- .../synthetic-monitor/README.md | 37 +-- .../conditional-naming-processgroup/README.md | 67 ++++ .../conditional-naming-processgroup.yaml | 8 + .../template.json | 29 ++ .../conditional-naming-service/README.md | 35 ++ .../conditional-naming-service.yaml | 8 + .../conditional-naming-service/template.json | 29 ++ .../custom-service-java/README.md | 30 +- .../synthetic-monitor/README.md | 37 +-- .../conditional-naming-processgroup/README.md | 67 ++++ .../conditional-naming-processgroup.yaml | 8 + .../template.json | 29 ++ .../conditional-naming-service/README.md | 35 ++ .../conditional-naming-service.yaml | 8 + .../conditional-naming-service/template.json | 29 ++ .../custom-service-java/README.md | 30 +- .../synthetic-monitor/README.md | 37 +-- .../conditional-naming-processgroup/README.md | 67 ++++ .../conditional-naming-processgroup.yaml | 8 + .../template.json | 29 ++ .../conditional-naming-service/README.md | 35 ++ .../conditional-naming-service.yaml | 8 + .../conditional-naming-service/template.json | 29 ++ .../custom-service-java/README.md | 30 +- .../synthetic-monitor/README.md | 37 +-- .../conditional-naming-processgroup/README.md | 67 ++++ .../conditional-naming-processgroup.yaml | 8 + .../template.json | 29 ++ .../conditional-naming-service/README.md | 35 ++ .../conditional-naming-service.yaml | 8 + .../conditional-naming-service/template.json | 29 ++ .../custom-service-java/README.md | 30 +- .../synthetic-monitor/README.md | 37 +-- .../conditional-naming-processgroup/README.md | 67 ++++ .../conditional-naming-processgroup.yaml | 8 + .../template.json | 29 ++ .../conditional-naming-service/README.md | 35 ++ .../conditional-naming-service.yaml | 8 + .../conditional-naming-service/template.json | 29 ++ .../CD_oclisc2v/custom-service-java/README.md | 30 +- .../CD_oclisc2v/synthetic-monitor/README.md | 37 +-- .../conditional-naming-processgroup/README.md | 67 ++++ .../conditional-naming-processgroup.yaml | 8 + .../template.json | 29 ++ .../conditional-naming-service/README.md | 35 ++ .../conditional-naming-service.yaml | 8 + .../conditional-naming-service/template.json | 29 ++ .../custom-service-java/README.md | 30 +- .../CD_oclisocsp/synthetic-monitor/README.md | 37 +-- .../conditional-naming-processgroup/README.md | 67 ++++ .../conditional-naming-processgroup.yaml | 8 + .../template.json | 29 ++ .../conditional-naming-service/README.md | 35 ++ .../conditional-naming-service.yaml | 8 + .../conditional-naming-service/template.json | 29 ++ .../custom-service-java/README.md | 30 +- .../synthetic-monitor/README.md | 37 +-- .../conditional-naming-processgroup/README.md | 67 ++++ .../conditional-naming-processgroup.yaml | 8 + .../template.json | 29 ++ .../conditional-naming-service/README.md | 35 ++ .../conditional-naming-service.yaml | 8 + .../conditional-naming-service/template.json | 29 ++ .../CD_omg/custom-service-java/README.md | 30 +- .../CD_omg/synthetic-monitor/README.md | 37 +-- .../conditional-naming-processgroup/README.md | 67 ++++ .../conditional-naming-processgroup.yaml | 8 + .../template.json | 29 ++ .../conditional-naming-service/README.md | 35 ++ .../conditional-naming-service.yaml | 8 + .../conditional-naming-service/template.json | 29 ++ .../custom-service-java/README.md | 30 +- .../synthetic-monitor/README.md | 37 +-- .../conditional-naming-processgroup/README.md | 67 ++++ .../conditional-naming-processgroup.yaml | 8 + .../template.json | 29 ++ .../conditional-naming-service/README.md | 35 ++ .../conditional-naming-service.yaml | 8 + .../conditional-naming-service/template.json | 29 ++ .../custom-service-java/README.md | 30 +- .../synthetic-monitor/README.md | 37 +-- .../conditional-naming-processgroup/README.md | 67 ++++ .../conditional-naming-processgroup.yaml | 8 + .../template.json | 29 ++ .../conditional-naming-service/README.md | 35 ++ .../conditional-naming-service.yaml | 8 + .../conditional-naming-service/template.json | 29 ++ .../custom-service-java/README.md | 30 +- .../synthetic-monitor/README.md | 37 +-- .../conditional-naming-processgroup/README.md | 67 ++++ .../conditional-naming-processgroup.yaml | 8 + .../template.json | 29 ++ .../conditional-naming-service/README.md | 35 ++ .../conditional-naming-service.yaml | 8 + .../conditional-naming-service/template.json | 29 ++ .../custom-service-java/README.md | 30 +- .../CD_pdmmanager/synthetic-monitor/README.md | 37 +-- .../conditional-naming-processgroup/README.md | 67 ++++ .../conditional-naming-processgroup.yaml | 8 + .../template.json | 29 ++ .../conditional-naming-service/README.md | 35 ++ .../conditional-naming-service.yaml | 8 + .../conditional-naming-service/template.json | 29 ++ .../custom-service-java/README.md | 30 +- .../synthetic-monitor/README.md | 37 +-- .../conditional-naming-processgroup/README.md | 67 ++++ .../conditional-naming-processgroup.yaml | 8 + .../template.json | 29 ++ .../conditional-naming-service/README.md | 35 ++ .../conditional-naming-service.yaml | 8 + .../conditional-naming-service/template.json | 29 ++ .../custom-service-java/README.md | 30 +- .../synthetic-monitor/README.md | 37 +-- .../conditional-naming-processgroup/README.md | 67 ++++ .../conditional-naming-processgroup.yaml | 8 + .../template.json | 29 ++ .../conditional-naming-service/README.md | 35 ++ .../conditional-naming-service.yaml | 8 + .../conditional-naming-service/template.json | 29 ++ .../custom-service-java/README.md | 30 +- .../synthetic-monitor/README.md | 37 +-- .../conditional-naming-processgroup/README.md | 67 ++++ .../conditional-naming-processgroup.yaml | 8 + .../template.json | 29 ++ .../conditional-naming-service/README.md | 35 ++ .../conditional-naming-service.yaml | 8 + .../conditional-naming-service/template.json | 29 ++ .../custom-service-java/README.md | 30 +- .../synthetic-monitor/README.md | 37 +-- .../conditional-naming-processgroup/README.md | 67 ++++ .../conditional-naming-processgroup.yaml | 8 + .../template.json | 29 ++ .../conditional-naming-service/README.md | 35 ++ .../conditional-naming-service.yaml | 8 + .../conditional-naming-service/template.json | 29 ++ .../custom-service-java/README.md | 30 +- .../synthetic-monitor/README.md | 37 +-- .../conditional-naming-processgroup/README.md | 67 ++++ .../conditional-naming-processgroup.yaml | 8 + .../template.json | 29 ++ .../conditional-naming-service/README.md | 35 ++ .../conditional-naming-service.yaml | 8 + .../conditional-naming-service/template.json | 29 ++ .../custom-service-java/README.md | 30 +- .../synthetic-monitor/README.md | 37 +-- .../conditional-naming-processgroup/README.md | 67 ++++ .../conditional-naming-processgroup.yaml | 8 + .../template.json | 29 ++ .../conditional-naming-service/README.md | 35 ++ .../conditional-naming-service.yaml | 8 + .../conditional-naming-service/template.json | 29 ++ .../custom-service-java/README.md | 30 +- .../synthetic-monitor/README.md | 37 +-- .../conditional-naming-processgroup/README.md | 67 ++++ .../conditional-naming-processgroup.yaml | 8 + .../template.json | 29 ++ .../conditional-naming-service/README.md | 35 ++ .../conditional-naming-service.yaml | 8 + .../conditional-naming-service/template.json | 29 ++ .../custom-service-java/README.md | 30 +- .../synthetic-monitor/README.md | 37 +-- .../conditional-naming-processgroup/README.md | 67 ++++ .../conditional-naming-processgroup.yaml | 8 + .../template.json | 29 ++ .../conditional-naming-service/README.md | 35 ++ .../conditional-naming-service.yaml | 8 + .../conditional-naming-service/template.json | 29 ++ .../custom-service-java/README.md | 30 +- .../synthetic-monitor/README.md | 37 +-- .../conditional-naming-processgroup/README.md | 67 ++++ .../conditional-naming-processgroup.yaml | 8 + .../template.json | 29 ++ .../conditional-naming-service/README.md | 35 ++ .../conditional-naming-service.yaml | 8 + .../conditional-naming-service/template.json | 29 ++ .../custom-service-java/README.md | 30 +- .../synthetic-monitor/README.md | 37 +-- .../conditional-naming-processgroup/README.md | 67 ++++ .../conditional-naming-processgroup.yaml | 8 + .../template.json | 29 ++ .../conditional-naming-service/README.md | 35 ++ .../conditional-naming-service.yaml | 8 + .../conditional-naming-service/template.json | 29 ++ .../custom-service-java/README.md | 30 +- .../synthetic-monitor/README.md | 37 +-- .../conditional-naming-processgroup/README.md | 67 ++++ .../conditional-naming-processgroup.yaml | 8 + .../template.json | 29 ++ .../conditional-naming-service/README.md | 35 ++ .../conditional-naming-service.yaml | 8 + .../conditional-naming-service/template.json | 29 ++ .../custom-service-java/README.md | 30 +- .../synthetic-monitor/README.md | 37 +-- .../conditional-naming-processgroup/README.md | 67 ++++ .../conditional-naming-processgroup.yaml | 8 + .../template.json | 29 ++ .../conditional-naming-service/README.md | 35 ++ .../conditional-naming-service.yaml | 8 + .../conditional-naming-service/template.json | 29 ++ .../custom-service-java/README.md | 30 +- .../synthetic-monitor/README.md | 37 +-- .../conditional-naming-processgroup/README.md | 67 ++++ .../conditional-naming-processgroup.yaml | 8 + .../template.json | 29 ++ .../conditional-naming-service/README.md | 35 ++ .../conditional-naming-service.yaml | 8 + .../conditional-naming-service/template.json | 29 ++ .../custom-service-java/README.md | 30 +- .../synthetic-monitor/README.md | 37 +-- .../conditional-naming-processgroup/README.md | 67 ++++ .../conditional-naming-processgroup.yaml | 8 + .../template.json | 29 ++ .../conditional-naming-service/README.md | 35 ++ .../conditional-naming-service.yaml | 8 + .../conditional-naming-service/template.json | 29 ++ .../custom-service-java/README.md | 30 +- .../synthetic-monitor/README.md | 37 +-- .../conditional-naming-processgroup/README.md | 67 ++++ .../conditional-naming-processgroup.yaml | 8 + .../template.json | 29 ++ .../conditional-naming-service/README.md | 35 ++ .../conditional-naming-service.yaml | 8 + .../conditional-naming-service/template.json | 29 ++ .../custom-service-java/README.md | 30 +- .../synthetic-monitor/README.md | 37 +-- .../conditional-naming-processgroup/README.md | 67 ++++ .../conditional-naming-processgroup.yaml | 8 + .../template.json | 29 ++ .../conditional-naming-service/README.md | 35 ++ .../conditional-naming-service.yaml | 8 + .../conditional-naming-service/template.json | 29 ++ .../custom-service-java/README.md | 30 +- .../synthetic-monitor/README.md | 37 +-- .../conditional-naming-processgroup/README.md | 67 ++++ .../conditional-naming-processgroup.yaml | 8 + .../template.json | 29 ++ .../conditional-naming-service/README.md | 35 ++ .../conditional-naming-service.yaml | 8 + .../conditional-naming-service/template.json | 29 ++ .../custom-service-java/README.md | 30 +- .../synthetic-monitor/README.md | 37 +-- .../conditional-naming-processgroup/README.md | 67 ++++ .../conditional-naming-processgroup.yaml | 8 + .../template.json | 29 ++ .../conditional-naming-service/README.md | 35 ++ .../conditional-naming-service.yaml | 8 + .../conditional-naming-service/template.json | 29 ++ .../custom-service-java/README.md | 30 +- .../synthetic-monitor/README.md | 37 +-- .../conditional-naming-processgroup/README.md | 67 ++++ .../conditional-naming-processgroup.yaml | 8 + .../template.json | 29 ++ .../conditional-naming-service/README.md | 35 ++ .../conditional-naming-service.yaml | 8 + .../conditional-naming-service/template.json | 29 ++ .../CD_rsu/custom-service-java/README.md | 30 +- .../CD_rsu/synthetic-monitor/README.md | 37 +-- .../conditional-naming-processgroup/README.md | 67 ++++ .../conditional-naming-processgroup.yaml | 8 + .../template.json | 29 ++ .../conditional-naming-service/README.md | 35 ++ .../conditional-naming-service.yaml | 8 + .../conditional-naming-service/template.json | 29 ++ .../CD_sbr/custom-service-java/README.md | 30 +- .../CD_sbr/synthetic-monitor/README.md | 37 +-- .../conditional-naming-processgroup/README.md | 67 ++++ .../conditional-naming-processgroup.yaml | 8 + .../template.json | 29 ++ .../conditional-naming-service/README.md | 35 ++ .../conditional-naming-service.yaml | 8 + .../conditional-naming-service/template.json | 29 ++ .../CD_scb/custom-service-java/README.md | 30 +- .../CD_scb/synthetic-monitor/README.md | 37 +-- .../conditional-naming-processgroup/README.md | 67 ++++ .../conditional-naming-processgroup.yaml | 8 + .../template.json | 29 ++ .../conditional-naming-service/README.md | 35 ++ .../conditional-naming-service.yaml | 8 + .../conditional-naming-service/template.json | 29 ++ .../CD_scc/custom-service-java/README.md | 30 +- .../CD_scc/synthetic-monitor/README.md | 37 +-- .../conditional-naming-processgroup/README.md | 67 ++++ .../conditional-naming-processgroup.yaml | 8 + .../template.json | 29 ++ .../conditional-naming-service/README.md | 35 ++ .../conditional-naming-service.yaml | 8 + .../conditional-naming-service/template.json | 29 ++ .../custom-service-java/README.md | 30 +- .../synthetic-monitor/README.md | 37 +-- .../conditional-naming-processgroup/README.md | 67 ++++ .../conditional-naming-processgroup.yaml | 8 + .../template.json | 29 ++ .../conditional-naming-service/README.md | 35 ++ .../conditional-naming-service.yaml | 8 + .../conditional-naming-service/template.json | 29 ++ .../CD_scm-scm/custom-service-java/README.md | 30 +- .../CD_scm-scm/synthetic-monitor/README.md | 37 +-- .../conditional-naming-processgroup/README.md | 67 ++++ .../conditional-naming-processgroup.yaml | 8 + .../template.json | 29 ++ .../conditional-naming-service/README.md | 35 ++ .../conditional-naming-service.yaml | 8 + .../conditional-naming-service/template.json | 29 ++ .../custom-service-java/README.md | 30 +- .../synthetic-monitor/README.md | 37 +-- .../conditional-naming-processgroup/README.md | 67 ++++ .../conditional-naming-processgroup.yaml | 8 + .../template.json | 29 ++ .../conditional-naming-service/README.md | 35 ++ .../conditional-naming-service.yaml | 8 + .../conditional-naming-service/template.json | 29 ++ .../custom-service-java/README.md | 30 +- .../synthetic-monitor/README.md | 37 +-- .../conditional-naming-processgroup/README.md | 67 ++++ .../conditional-naming-processgroup.yaml | 8 + .../template.json | 29 ++ .../conditional-naming-service/README.md | 35 ++ .../conditional-naming-service.yaml | 8 + .../conditional-naming-service/template.json | 29 ++ .../custom-service-java/README.md | 30 +- .../synthetic-monitor/README.md | 37 +-- .../conditional-naming-processgroup/README.md | 67 ++++ .../conditional-naming-processgroup.yaml | 8 + .../template.json | 29 ++ .../conditional-naming-service/README.md | 35 ++ .../conditional-naming-service.yaml | 8 + .../conditional-naming-service/template.json | 29 ++ .../custom-service-java/README.md | 30 +- .../synthetic-monitor/README.md | 37 +-- .../conditional-naming-processgroup/README.md | 67 ++++ .../conditional-naming-processgroup.yaml | 8 + .../template.json | 29 ++ .../conditional-naming-service/README.md | 35 ++ .../conditional-naming-service.yaml | 8 + .../conditional-naming-service/template.json | 29 ++ .../custom-service-java/README.md | 30 +- .../synthetic-monitor/README.md | 37 +-- .../conditional-naming-processgroup/README.md | 67 ++++ .../conditional-naming-processgroup.yaml | 8 + .../template.json | 29 ++ .../conditional-naming-service/README.md | 35 ++ .../conditional-naming-service.yaml | 8 + .../conditional-naming-service/template.json | 29 ++ .../custom-service-java/README.md | 30 +- .../synthetic-monitor/README.md | 37 +-- .../conditional-naming-processgroup/README.md | 67 ++++ .../conditional-naming-processgroup.yaml | 8 + .../template.json | 29 ++ .../conditional-naming-service/README.md | 35 ++ .../conditional-naming-service.yaml | 8 + .../conditional-naming-service/template.json | 29 ++ .../custom-service-java/README.md | 30 +- .../synthetic-monitor/README.md | 37 +-- .../conditional-naming-processgroup/README.md | 67 ++++ .../conditional-naming-processgroup.yaml | 8 + .../template.json | 29 ++ .../conditional-naming-service/README.md | 35 ++ .../conditional-naming-service.yaml | 8 + .../conditional-naming-service/template.json | 29 ++ .../CD_sfa-fre/custom-service-java/README.md | 30 +- .../CD_sfa-fre/synthetic-monitor/README.md | 37 +-- .../conditional-naming-processgroup/README.md | 67 ++++ .../conditional-naming-processgroup.yaml | 8 + .../template.json | 29 ++ .../conditional-naming-service/README.md | 35 ++ .../conditional-naming-service.yaml | 8 + .../conditional-naming-service/template.json | 29 ++ .../CD_sfa-ota/custom-service-java/README.md | 30 +- .../CD_sfa-ota/synthetic-monitor/README.md | 37 +-- .../conditional-naming-processgroup/README.md | 67 ++++ .../conditional-naming-processgroup.yaml | 8 + .../template.json | 29 ++ .../conditional-naming-service/README.md | 35 ++ .../conditional-naming-service.yaml | 8 + .../conditional-naming-service/template.json | 29 ++ .../CD_sfa-vs/custom-service-java/README.md | 30 +- .../CD_sfa-vs/synthetic-monitor/README.md | 37 +-- .../conditional-naming-processgroup/README.md | 67 ++++ .../conditional-naming-processgroup.yaml | 8 + .../template.json | 29 ++ .../conditional-naming-service/README.md | 35 ++ .../conditional-naming-service.yaml | 8 + .../conditional-naming-service/template.json | 29 ++ .../CD_sfa/custom-service-java/README.md | 30 +- .../CD_sfa/synthetic-monitor/README.md | 37 +-- .../conditional-naming-processgroup/README.md | 67 ++++ .../conditional-naming-processgroup.yaml | 8 + .../template.json | 29 ++ .../conditional-naming-service/README.md | 35 ++ .../conditional-naming-service.yaml | 8 + .../conditional-naming-service/template.json | 29 ++ .../custom-service-java/README.md | 30 +- .../synthetic-monitor/README.md | 37 +-- .../conditional-naming-processgroup/README.md | 67 ++++ .../conditional-naming-processgroup.yaml | 8 + .../template.json | 29 ++ .../conditional-naming-service/README.md | 35 ++ .../conditional-naming-service.yaml | 8 + .../conditional-naming-service/template.json | 29 ++ .../custom-service-java/README.md | 30 +- .../synthetic-monitor/README.md | 37 +-- .../conditional-naming-processgroup/README.md | 67 ++++ .../conditional-naming-processgroup.yaml | 8 + .../template.json | 29 ++ .../conditional-naming-service/README.md | 35 ++ .../conditional-naming-service.yaml | 8 + .../conditional-naming-service/template.json | 29 ++ .../custom-service-java/README.md | 30 +- .../CD_srmanager/synthetic-monitor/README.md | 37 +-- .../conditional-naming-processgroup/README.md | 67 ++++ .../conditional-naming-processgroup.yaml | 8 + .../template.json | 29 ++ .../conditional-naming-service/README.md | 35 ++ .../conditional-naming-service.yaml | 8 + .../conditional-naming-service/template.json | 29 ++ .../CD_stm/custom-service-java/README.md | 30 +- .../CD_stm/synthetic-monitor/README.md | 37 +-- .../conditional-naming-processgroup/README.md | 67 ++++ .../conditional-naming-processgroup.yaml | 8 + .../template.json | 29 ++ .../conditional-naming-service/README.md | 35 ++ .../conditional-naming-service.yaml | 8 + .../conditional-naming-service/template.json | 29 ++ .../CD_svcinfo/custom-service-java/README.md | 30 +- .../CD_svcinfo/synthetic-monitor/README.md | 37 +-- .../conditional-naming-processgroup/README.md | 67 ++++ .../conditional-naming-processgroup.yaml | 8 + .../template.json | 29 ++ .../conditional-naming-service/README.md | 35 ++ .../conditional-naming-service.yaml | 8 + .../conditional-naming-service/template.json | 29 ++ .../custom-service-java/README.md | 30 +- .../synthetic-monitor/README.md | 37 +-- .../conditional-naming-processgroup/README.md | 67 ++++ .../conditional-naming-processgroup.yaml | 8 + .../template.json | 29 ++ .../conditional-naming-service/README.md | 35 ++ .../conditional-naming-service.yaml | 8 + .../conditional-naming-service/template.json | 29 ++ .../custom-service-java/README.md | 30 +- .../synthetic-monitor/README.md | 37 +-- .../conditional-naming-processgroup/README.md | 67 ++++ .../conditional-naming-processgroup.yaml | 8 + .../template.json | 29 ++ .../conditional-naming-service/README.md | 35 ++ .../conditional-naming-service.yaml | 8 + .../conditional-naming-service/template.json | 29 ++ .../custom-service-java/README.md | 30 +- .../synthetic-monitor/README.md | 37 +-- .../conditional-naming-processgroup/README.md | 67 ++++ .../conditional-naming-processgroup.yaml | 8 + .../template.json | 29 ++ .../conditional-naming-service/README.md | 35 ++ .../conditional-naming-service.yaml | 8 + .../conditional-naming-service/template.json | 29 ++ .../CD_tol-mgu/custom-service-java/README.md | 30 +- .../CD_tol-mgu/synthetic-monitor/README.md | 37 +-- .../conditional-naming-processgroup/README.md | 67 ++++ .../conditional-naming-processgroup.yaml | 8 + .../template.json | 29 ++ .../conditional-naming-service/README.md | 35 ++ .../conditional-naming-service.yaml | 8 + .../conditional-naming-service/template.json | 29 ++ .../CD_tol-tssb/custom-service-java/README.md | 30 +- .../CD_tol-tssb/synthetic-monitor/README.md | 37 +-- .../conditional-naming-processgroup/README.md | 67 ++++ .../conditional-naming-processgroup.yaml | 8 + .../template.json | 29 ++ .../conditional-naming-service/README.md | 35 ++ .../conditional-naming-service.yaml | 8 + .../conditional-naming-service/template.json | 29 ++ .../CD_tol/custom-service-java/README.md | 30 +- .../CD_tol/synthetic-monitor/README.md | 37 +-- .../conditional-naming-processgroup/README.md | 67 ++++ .../conditional-naming-processgroup.yaml | 8 + .../template.json | 29 ++ .../conditional-naming-service/README.md | 35 ++ .../conditional-naming-service.yaml | 8 + .../conditional-naming-service/template.json | 29 ++ .../custom-service-java/README.md | 30 +- .../synthetic-monitor/README.md | 37 +-- .../conditional-naming-processgroup/README.md | 67 ++++ .../conditional-naming-processgroup.yaml | 8 + .../template.json | 29 ++ .../conditional-naming-service/README.md | 35 ++ .../conditional-naming-service.yaml | 8 + .../conditional-naming-service/template.json | 29 ++ .../custom-service-java/README.md | 30 +- .../synthetic-monitor/README.md | 37 +-- .../conditional-naming-processgroup/README.md | 67 ++++ .../conditional-naming-processgroup.yaml | 8 + .../template.json | 29 ++ .../conditional-naming-service/README.md | 35 ++ .../conditional-naming-service.yaml | 8 + .../conditional-naming-service/template.json | 29 ++ .../custom-service-java/README.md | 30 +- .../synthetic-monitor/README.md | 37 +-- .../conditional-naming-processgroup/README.md | 67 ++++ .../conditional-naming-processgroup.yaml | 8 + .../template.json | 29 ++ .../conditional-naming-service/README.md | 35 ++ .../conditional-naming-service.yaml | 8 + .../conditional-naming-service/template.json | 29 ++ .../custom-service-java/README.md | 30 +- .../synthetic-monitor/README.md | 37 +-- .../conditional-naming-processgroup/README.md | 67 ++++ .../conditional-naming-processgroup.yaml | 8 + .../template.json | 29 ++ .../conditional-naming-service/README.md | 35 ++ .../conditional-naming-service.yaml | 8 + .../conditional-naming-service/template.json | 29 ++ .../custom-service-java/README.md | 30 +- .../synthetic-monitor/README.md | 37 +-- .../conditional-naming-processgroup/README.md | 67 ++++ .../conditional-naming-processgroup.yaml | 8 + .../template.json | 29 ++ .../conditional-naming-service/README.md | 35 ++ .../conditional-naming-service.yaml | 8 + .../conditional-naming-service/template.json | 29 ++ .../custom-service-java/README.md | 30 +- .../synthetic-monitor/README.md | 37 +-- .../conditional-naming-processgroup/README.md | 67 ++++ .../conditional-naming-processgroup.yaml | 8 + .../template.json | 29 ++ .../conditional-naming-service/README.md | 35 ++ .../conditional-naming-service.yaml | 8 + .../conditional-naming-service/template.json | 29 ++ .../custom-service-java/README.md | 30 +- .../synthetic-monitor/README.md | 37 +-- .../conditional-naming-processgroup/README.md | 67 ++++ .../conditional-naming-processgroup.yaml | 8 + .../template.json | 29 ++ .../conditional-naming-service/README.md | 35 ++ .../conditional-naming-service.yaml | 8 + .../conditional-naming-service/template.json | 29 ++ .../CD_ts-bt/custom-service-java/README.md | 30 +- .../CD_ts-bt/synthetic-monitor/README.md | 37 +-- .../conditional-naming-processgroup/README.md | 67 ++++ .../conditional-naming-processgroup.yaml | 8 + .../template.json | 29 ++ .../conditional-naming-service/README.md | 35 ++ .../conditional-naming-service.yaml | 8 + .../conditional-naming-service/template.json | 29 ++ .../CD_ts-bti/custom-service-java/README.md | 30 +- .../CD_ts-bti/synthetic-monitor/README.md | 37 +-- .../conditional-naming-processgroup/README.md | 67 ++++ .../conditional-naming-processgroup.yaml | 8 + .../template.json | 29 ++ .../conditional-naming-service/README.md | 35 ++ .../conditional-naming-service.yaml | 8 + .../conditional-naming-service/template.json | 29 ++ .../custom-service-java/README.md | 30 +- .../CD_ts-cas-spm/synthetic-monitor/README.md | 37 +-- .../conditional-naming-processgroup/README.md | 67 ++++ .../conditional-naming-processgroup.yaml | 8 + .../template.json | 29 ++ .../conditional-naming-service/README.md | 35 ++ .../conditional-naming-service.yaml | 8 + .../conditional-naming-service/template.json | 29 ++ .../custom-service-java/README.md | 30 +- .../CD_ts-cas-stm/synthetic-monitor/README.md | 37 +-- .../conditional-naming-processgroup/README.md | 67 ++++ .../conditional-naming-processgroup.yaml | 8 + .../template.json | 29 ++ .../conditional-naming-service/README.md | 35 ++ .../conditional-naming-service.yaml | 8 + .../conditional-naming-service/template.json | 29 ++ .../custom-service-java/README.md | 30 +- .../synthetic-monitor/README.md | 37 +-- .../conditional-naming-processgroup/README.md | 67 ++++ .../conditional-naming-processgroup.yaml | 8 + .../template.json | 29 ++ .../conditional-naming-service/README.md | 35 ++ .../conditional-naming-service.yaml | 8 + .../conditional-naming-service/template.json | 29 ++ .../custom-service-java/README.md | 30 +- .../synthetic-monitor/README.md | 37 +-- .../conditional-naming-processgroup/README.md | 67 ++++ .../conditional-naming-processgroup.yaml | 8 + .../template.json | 29 ++ .../conditional-naming-service/README.md | 35 ++ .../conditional-naming-service.yaml | 8 + .../conditional-naming-service/template.json | 29 ++ .../CD_ts-eshad/custom-service-java/README.md | 30 +- .../CD_ts-eshad/synthetic-monitor/README.md | 37 +-- .../conditional-naming-processgroup/README.md | 67 ++++ .../conditional-naming-processgroup.yaml | 8 + .../template.json | 29 ++ .../conditional-naming-service/README.md | 35 ++ .../conditional-naming-service.yaml | 8 + .../conditional-naming-service/template.json | 29 ++ .../custom-service-java/README.md | 30 +- .../synthetic-monitor/README.md | 37 +-- .../conditional-naming-processgroup/README.md | 67 ++++ .../conditional-naming-processgroup.yaml | 8 + .../template.json | 29 ++ .../conditional-naming-service/README.md | 35 ++ .../conditional-naming-service.yaml | 8 + .../conditional-naming-service/template.json | 29 ++ .../custom-service-java/README.md | 30 +- .../synthetic-monitor/README.md | 37 +-- .../conditional-naming-processgroup/README.md | 67 ++++ .../conditional-naming-processgroup.yaml | 8 + .../template.json | 29 ++ .../conditional-naming-service/README.md | 35 ++ .../conditional-naming-service.yaml | 8 + .../conditional-naming-service/template.json | 29 ++ .../custom-service-java/README.md | 30 +- .../synthetic-monitor/README.md | 37 +-- .../conditional-naming-processgroup/README.md | 67 ++++ .../conditional-naming-processgroup.yaml | 8 + .../template.json | 29 ++ .../conditional-naming-service/README.md | 35 ++ .../conditional-naming-service.yaml | 8 + .../conditional-naming-service/template.json | 29 ++ .../custom-service-java/README.md | 30 +- .../synthetic-monitor/README.md | 37 +-- .../conditional-naming-processgroup/README.md | 67 ++++ .../conditional-naming-processgroup.yaml | 8 + .../template.json | 29 ++ .../conditional-naming-service/README.md | 35 ++ .../conditional-naming-service.yaml | 8 + .../conditional-naming-service/template.json | 29 ++ .../custom-service-java/README.md | 30 +- .../synthetic-monitor/README.md | 37 +-- .../conditional-naming-processgroup/README.md | 67 ++++ .../conditional-naming-processgroup.yaml | 8 + .../template.json | 29 ++ .../conditional-naming-service/README.md | 35 ++ .../conditional-naming-service.yaml | 8 + .../conditional-naming-service/template.json | 29 ++ .../custom-service-java/README.md | 30 +- .../synthetic-monitor/README.md | 37 +-- .../conditional-naming-processgroup/README.md | 67 ++++ .../conditional-naming-processgroup.yaml | 8 + .../template.json | 29 ++ .../conditional-naming-service/README.md | 35 ++ .../conditional-naming-service.yaml | 8 + .../conditional-naming-service/template.json | 29 ++ .../custom-service-java/README.md | 30 +- .../synthetic-monitor/README.md | 37 +-- .../conditional-naming-processgroup/README.md | 67 ++++ .../conditional-naming-processgroup.yaml | 8 + .../template.json | 29 ++ .../conditional-naming-service/README.md | 35 ++ .../conditional-naming-service.yaml | 8 + .../conditional-naming-service/template.json | 29 ++ .../custom-service-java/README.md | 30 +- .../synthetic-monitor/README.md | 37 +-- .../conditional-naming-processgroup/README.md | 67 ++++ .../conditional-naming-processgroup.yaml | 8 + .../template.json | 29 ++ .../conditional-naming-service/README.md | 35 ++ .../conditional-naming-service.yaml | 8 + .../conditional-naming-service/template.json | 29 ++ .../custom-service-java/README.md | 30 +- .../synthetic-monitor/README.md | 37 +-- .../conditional-naming-processgroup/README.md | 67 ++++ .../conditional-naming-processgroup.yaml | 8 + .../template.json | 29 ++ .../conditional-naming-service/README.md | 35 ++ .../conditional-naming-service.yaml | 8 + .../conditional-naming-service/template.json | 29 ++ .../custom-service-java/README.md | 30 +- .../CD_ts-tsbgam/synthetic-monitor/README.md | 37 +-- .../conditional-naming-processgroup/README.md | 67 ++++ .../conditional-naming-processgroup.yaml | 8 + .../template.json | 29 ++ .../conditional-naming-service/README.md | 35 ++ .../conditional-naming-service.yaml | 8 + .../conditional-naming-service/template.json | 29 ++ .../custom-service-java/README.md | 30 +- .../synthetic-monitor/README.md | 37 +-- .../conditional-naming-processgroup/README.md | 67 ++++ .../conditional-naming-processgroup.yaml | 8 + .../template.json | 29 ++ .../conditional-naming-service/README.md | 35 ++ .../conditional-naming-service.yaml | 8 + .../conditional-naming-service/template.json | 29 ++ .../CD_ts-tsp/custom-service-java/README.md | 30 +- .../CD_ts-tsp/synthetic-monitor/README.md | 37 +-- .../conditional-naming-processgroup/README.md | 67 ++++ .../conditional-naming-processgroup.yaml | 8 + .../template.json | 29 ++ .../conditional-naming-service/README.md | 35 ++ .../conditional-naming-service.yaml | 8 + .../conditional-naming-service/template.json | 29 ++ .../custom-service-java/README.md | 30 +- .../synthetic-monitor/README.md | 37 +-- .../conditional-naming-processgroup/README.md | 67 ++++ .../conditional-naming-processgroup.yaml | 8 + .../template.json | 29 ++ .../conditional-naming-service/README.md | 35 ++ .../conditional-naming-service.yaml | 8 + .../conditional-naming-service/template.json | 29 ++ .../CD_tscs/custom-service-java/README.md | 30 +- .../CD_tscs/synthetic-monitor/README.md | 37 +-- .../conditional-naming-processgroup/README.md | 67 ++++ .../conditional-naming-processgroup.yaml | 8 + .../template.json | 29 ++ .../conditional-naming-service/README.md | 35 ++ .../conditional-naming-service.yaml | 8 + .../conditional-naming-service/template.json | 29 ++ .../CD_tsmb/custom-service-java/README.md | 30 +- .../CD_tsmb/synthetic-monitor/README.md | 37 +-- .../conditional-naming-processgroup/README.md | 67 ++++ .../conditional-naming-processgroup.yaml | 8 + .../template.json | 29 ++ .../conditional-naming-service/README.md | 35 ++ .../conditional-naming-service.yaml | 8 + .../conditional-naming-service/template.json | 29 ++ .../CD_tsr-cmr/custom-service-java/README.md | 30 +- .../CD_tsr-cmr/synthetic-monitor/README.md | 37 +-- .../conditional-naming-processgroup/README.md | 67 ++++ .../conditional-naming-processgroup.yaml | 8 + .../template.json | 29 ++ .../conditional-naming-service/README.md | 35 ++ .../conditional-naming-service.yaml | 8 + .../conditional-naming-service/template.json | 29 ++ .../CD_tsr-dd/custom-service-java/README.md | 30 +- .../CD_tsr-dd/synthetic-monitor/README.md | 37 +-- .../conditional-naming-processgroup/README.md | 67 ++++ .../conditional-naming-processgroup.yaml | 8 + .../template.json | 29 ++ .../conditional-naming-service/README.md | 35 ++ .../conditional-naming-service.yaml | 8 + .../conditional-naming-service/template.json | 29 ++ .../CD_tsr-vu/custom-service-java/README.md | 30 +- .../CD_tsr-vu/synthetic-monitor/README.md | 37 +-- .../conditional-naming-processgroup/README.md | 67 ++++ .../conditional-naming-processgroup.yaml | 8 + .../template.json | 29 ++ .../conditional-naming-service/README.md | 35 ++ .../conditional-naming-service.yaml | 8 + .../conditional-naming-service/template.json | 29 ++ .../custom-service-java/README.md | 30 +- .../CD_tsrservice/synthetic-monitor/README.md | 37 +-- .../conditional-naming-processgroup/README.md | 67 ++++ .../conditional-naming-processgroup.yaml | 8 + .../template.json | 29 ++ .../conditional-naming-service/README.md | 35 ++ .../conditional-naming-service.yaml | 8 + .../conditional-naming-service/template.json | 29 ++ .../custom-service-java/README.md | 30 +- .../synthetic-monitor/README.md | 37 +-- .../conditional-naming-processgroup/README.md | 67 ++++ .../conditional-naming-processgroup.yaml | 8 + .../template.json | 29 ++ .../conditional-naming-service/README.md | 35 ++ .../conditional-naming-service.yaml | 8 + .../conditional-naming-service/template.json | 29 ++ .../custom-service-java/README.md | 30 +- .../synthetic-monitor/README.md | 37 +-- .../conditional-naming-processgroup/README.md | 67 ++++ .../conditional-naming-processgroup.yaml | 8 + .../template.json | 29 ++ .../conditional-naming-service/README.md | 35 ++ .../conditional-naming-service.yaml | 8 + .../conditional-naming-service/template.json | 29 ++ .../custom-service-java/README.md | 30 +- .../synthetic-monitor/README.md | 37 +-- .../conditional-naming-processgroup/README.md | 67 ++++ .../conditional-naming-processgroup.yaml | 8 + .../template.json | 29 ++ .../conditional-naming-service/README.md | 35 ++ .../conditional-naming-service.yaml | 8 + .../conditional-naming-service/template.json | 29 ++ .../custom-service-java/README.md | 30 +- .../synthetic-monitor/README.md | 37 +-- .../conditional-naming-processgroup/README.md | 67 ++++ .../conditional-naming-processgroup.yaml | 8 + .../template.json | 29 ++ .../conditional-naming-service/README.md | 35 ++ .../conditional-naming-service.yaml | 8 + .../conditional-naming-service/template.json | 29 ++ .../custom-service-java/README.md | 30 +- .../synthetic-monitor/README.md | 37 +-- .../conditional-naming-processgroup/README.md | 67 ++++ .../conditional-naming-processgroup.yaml | 8 + .../template.json | 29 ++ .../conditional-naming-service/README.md | 35 ++ .../conditional-naming-service.yaml | 8 + .../conditional-naming-service/template.json | 29 ++ .../custom-service-java/README.md | 30 +- .../synthetic-monitor/README.md | 37 +-- .../conditional-naming-processgroup/README.md | 67 ++++ .../conditional-naming-processgroup.yaml | 8 + .../template.json | 29 ++ .../conditional-naming-service/README.md | 35 ++ .../conditional-naming-service.yaml | 8 + .../conditional-naming-service/template.json | 29 ++ .../custom-service-java/README.md | 30 +- .../synthetic-monitor/README.md | 37 +-- .../conditional-naming-processgroup/README.md | 67 ++++ .../conditional-naming-processgroup.yaml | 8 + .../template.json | 29 ++ .../conditional-naming-service/README.md | 35 ++ .../conditional-naming-service.yaml | 8 + .../conditional-naming-service/template.json | 29 ++ .../custom-service-java/README.md | 30 +- .../synthetic-monitor/README.md | 37 +-- .../conditional-naming-processgroup/README.md | 67 ++++ .../conditional-naming-processgroup.yaml | 8 + .../template.json | 29 ++ .../conditional-naming-service/README.md | 35 ++ .../conditional-naming-service.yaml | 8 + .../conditional-naming-service/template.json | 29 ++ .../custom-service-java/README.md | 30 +- .../synthetic-monitor/README.md | 37 +-- .../conditional-naming-processgroup/README.md | 67 ++++ .../conditional-naming-processgroup.yaml | 8 + .../template.json | 29 ++ .../conditional-naming-service/README.md | 35 ++ .../conditional-naming-service.yaml | 8 + .../conditional-naming-service/template.json | 29 ++ .../custom-service-java/README.md | 30 +- .../synthetic-monitor/README.md | 37 +-- .../conditional-naming-processgroup/README.md | 67 ++++ .../conditional-naming-processgroup.yaml | 8 + .../template.json | 29 ++ .../conditional-naming-service/README.md | 35 ++ .../conditional-naming-service.yaml | 8 + .../conditional-naming-service/template.json | 29 ++ .../custom-service-java/README.md | 30 +- .../synthetic-monitor/README.md | 37 +-- .../conditional-naming-processgroup/README.md | 67 ++++ .../conditional-naming-processgroup.yaml | 8 + .../template.json | 29 ++ .../conditional-naming-service/README.md | 35 ++ .../conditional-naming-service.yaml | 8 + .../conditional-naming-service/template.json | 29 ++ .../custom-service-java/README.md | 30 +- .../synthetic-monitor/README.md | 37 +-- .../conditional-naming-processgroup/README.md | 67 ++++ .../conditional-naming-processgroup.yaml | 8 + .../template.json | 29 ++ .../conditional-naming-service/README.md | 35 ++ .../conditional-naming-service.yaml | 8 + .../conditional-naming-service/template.json | 29 ++ .../custom-service-java/README.md | 30 +- .../synthetic-monitor/README.md | 37 +-- .../conditional-naming-processgroup/README.md | 67 ++++ .../conditional-naming-processgroup.yaml | 8 + .../template.json | 29 ++ .../conditional-naming-service/README.md | 35 ++ .../conditional-naming-service.yaml | 8 + .../conditional-naming-service/template.json | 29 ++ .../custom-service-java/README.md | 30 +- .../synthetic-monitor/README.md | 37 +-- .../conditional-naming-processgroup/README.md | 67 ++++ .../conditional-naming-processgroup.yaml | 8 + .../template.json | 29 ++ .../conditional-naming-service/README.md | 35 ++ .../conditional-naming-service.yaml | 8 + .../conditional-naming-service/template.json | 29 ++ .../custom-service-java/README.md | 30 +- .../synthetic-monitor/README.md | 37 +-- .../conditional-naming-processgroup/README.md | 67 ++++ .../conditional-naming-processgroup.yaml | 8 + .../template.json | 29 ++ .../conditional-naming-service/README.md | 35 ++ .../conditional-naming-service.yaml | 8 + .../conditional-naming-service/template.json | 29 ++ .../custom-service-java/README.md | 30 +- .../synthetic-monitor/README.md | 37 +-- .../custom-service-java/README.md | 30 +- .../synthetic-monitor/README.md | 37 +-- .../conditional-naming-processgroup/README.md | 67 ++++ .../conditional-naming-processgroup.yaml | 8 + .../template.json | 29 ++ .../conditional-naming-service/README.md | 35 ++ .../conditional-naming-service.yaml | 8 + .../conditional-naming-service/template.json | 29 ++ .../custom-service-java/README.md | 30 +- .../synthetic-monitor/README.md | 37 +-- .../conditional-naming-processgroup/README.md | 67 ++++ .../conditional-naming-processgroup.yaml | 8 + .../template.json | 29 ++ .../conditional-naming-service/README.md | 35 ++ .../conditional-naming-service.yaml | 8 + .../conditional-naming-service/template.json | 29 ++ .../custom-service-java/README.md | 30 +- .../synthetic-monitor/README.md | 37 +-- .../conditional-naming-processgroup/README.md | 67 ++++ .../conditional-naming-processgroup.yaml | 8 + .../template.json | 29 ++ .../conditional-naming-service/README.md | 35 ++ .../conditional-naming-service.yaml | 8 + .../conditional-naming-service/template.json | 29 ++ .../custom-service-java/README.md | 30 +- .../synthetic-monitor/README.md | 37 +-- .../conditional-naming-processgroup/README.md | 67 ++++ .../conditional-naming-processgroup.yaml | 8 + .../template.json | 29 ++ .../conditional-naming-service/README.md | 35 ++ .../conditional-naming-service.yaml | 8 + .../conditional-naming-service/template.json | 29 ++ .../custom-service-java/README.md | 30 +- .../synthetic-monitor/README.md | 37 +-- .../conditional-naming-processgroup/README.md | 67 ++++ .../conditional-naming-processgroup.yaml | 8 + .../template.json | 29 ++ .../conditional-naming-service/README.md | 35 ++ .../conditional-naming-service.yaml | 8 + .../conditional-naming-service/template.json | 29 ++ .../custom-service-java/README.md | 30 +- .../CD_vps-admin/synthetic-monitor/README.md | 37 +-- .../conditional-naming-processgroup/README.md | 67 ++++ .../conditional-naming-processgroup.yaml | 8 + .../template.json | 29 ++ .../conditional-naming-service/README.md | 35 ++ .../conditional-naming-service.yaml | 8 + .../conditional-naming-service/template.json | 29 ++ .../custom-service-java/README.md | 30 +- .../synthetic-monitor/README.md | 37 +-- .../conditional-naming-processgroup/README.md | 67 ++++ .../conditional-naming-processgroup.yaml | 8 + .../template.json | 29 ++ .../conditional-naming-service/README.md | 35 ++ .../conditional-naming-service.yaml | 8 + .../conditional-naming-service/template.json | 29 ++ .../custom-service-java/README.md | 30 +- .../synthetic-monitor/README.md | 37 +-- .../conditional-naming-processgroup/README.md | 67 ++++ .../conditional-naming-processgroup.yaml | 8 + .../template.json | 29 ++ .../conditional-naming-service/README.md | 35 ++ .../conditional-naming-service.yaml | 8 + .../conditional-naming-service/template.json | 29 ++ .../CD_vps-prov/custom-service-java/README.md | 30 +- .../CD_vps-prov/synthetic-monitor/README.md | 37 +-- .../conditional-naming-processgroup/README.md | 67 ++++ .../conditional-naming-processgroup.yaml | 8 + .../template.json | 29 ++ .../conditional-naming-service/README.md | 35 ++ .../conditional-naming-service.yaml | 8 + .../conditional-naming-service/template.json | 29 ++ .../custom-service-java/README.md | 30 +- .../synthetic-monitor/README.md | 37 +-- .../conditional-naming-processgroup/README.md | 67 ++++ .../conditional-naming-processgroup.yaml | 8 + .../template.json | 29 ++ .../conditional-naming-service/README.md | 35 ++ .../conditional-naming-service.yaml | 8 + .../conditional-naming-service/template.json | 29 ++ .../CD_vs-api/custom-service-java/README.md | 30 +- .../CD_vs-api/synthetic-monitor/README.md | 37 +-- .../conditional-naming-processgroup/README.md | 67 ++++ .../conditional-naming-processgroup.yaml | 8 + .../template.json | 29 ++ .../conditional-naming-service/README.md | 35 ++ .../conditional-naming-service.yaml | 8 + .../conditional-naming-service/template.json | 29 ++ .../CD_webapi/custom-service-java/README.md | 30 +- .../CD_webapi/synthetic-monitor/README.md | 37 +-- .../conditional-naming-processgroup/README.md | 67 ++++ .../conditional-naming-processgroup.yaml | 8 + .../template.json | 29 ++ .../conditional-naming-service/README.md | 35 ++ .../conditional-naming-service.yaml | 8 + .../conditional-naming-service/template.json | 29 ++ .../custom-service-java/README.md | 30 +- .../CD_wlmanager/synthetic-monitor/README.md | 37 +-- .../conditional-naming-processgroup/README.md | 67 ++++ .../conditional-naming-processgroup.yaml | 8 + .../template.json | 29 ++ .../conditional-naming-service/README.md | 35 ++ .../conditional-naming-service.yaml | 8 + .../conditional-naming-service/template.json | 29 ++ .../CD_xfcd/custom-service-java/README.md | 30 +- .../CD_xfcd/synthetic-monitor/README.md | 37 +-- 2459 files changed, 69170 insertions(+), 17603 deletions(-) create mode 100644 BMW-Dynatrace-config/CD_APIGW/alerting-profile/alerting-profile.yaml rename BMW-Dynatrace-config/{CD_Perseus/alerting-profile/Perseus.json => CD_APIGW/alerting-profile/default.json} (83%) create mode 100644 BMW-Dynatrace-config/CD_APIGW/calculated-metrics-service/README.md create mode 100644 BMW-Dynatrace-config/CD_APIGW/conditional-naming-processgroup/README.md create mode 100644 BMW-Dynatrace-config/CD_APIGW/conditional-naming-processgroup/conditional-naming-processgroup.yaml create mode 100644 BMW-Dynatrace-config/CD_APIGW/conditional-naming-processgroup/template.json create mode 100644 BMW-Dynatrace-config/CD_APIGW/conditional-naming-service/README.md create mode 100644 BMW-Dynatrace-config/CD_APIGW/conditional-naming-service/conditional-naming-service.yaml create mode 100644 BMW-Dynatrace-config/CD_APIGW/conditional-naming-service/template.json create mode 100644 BMW-Dynatrace-config/CD_APIGW/custom-service-java/README.md create mode 100644 BMW-Dynatrace-config/CD_APIGW/custom-service-java/custom-service-java.yaml create mode 100644 BMW-Dynatrace-config/CD_APIGW/custom-service-java/template-1-1.json create mode 100644 BMW-Dynatrace-config/CD_APIGW/dashboard/README.md create mode 100644 BMW-Dynatrace-config/CD_APIGW/dashboard/dashboard.yaml create mode 100644 BMW-Dynatrace-config/CD_APIGW/dashboard/default.json create mode 100644 BMW-Dynatrace-config/CD_APIGW/notification/README.md rename BMW-Dynatrace-config/{CD_Perseus/notification/CDPerseus-Email.json => CD_APIGW/notification/email.json} (100%) rename BMW-Dynatrace-config/{CD_DPP_DPM/notification/CDDPP-MSTeams.json => CD_APIGW/notification/msTeams.json} (100%) create mode 100644 BMW-Dynatrace-config/CD_APIGW/notification/notification.yaml create mode 100644 BMW-Dynatrace-config/CD_APIGW/synthetic-monitor/README.md create mode 100644 BMW-Dynatrace-config/CD_APIGW/synthetic-monitor/default.json create mode 100644 BMW-Dynatrace-config/CD_APIGW/synthetic-monitor/synthetic-monitor.yaml create mode 100644 BMW-Dynatrace-config/CD_APIM/alerting-profile/alerting-profile.yaml rename BMW-Dynatrace-config/{CD_ASBC-SMACC/alerting-profile/CDASBC-SMACC.json => CD_APIM/alerting-profile/default.json} (66%) create mode 100644 BMW-Dynatrace-config/CD_APIM/calculated-metrics-service/README.md create mode 100644 BMW-Dynatrace-config/CD_APIM/conditional-naming-processgroup/README.md create mode 100644 BMW-Dynatrace-config/CD_APIM/conditional-naming-processgroup/conditional-naming-processgroup.yaml create mode 100644 BMW-Dynatrace-config/CD_APIM/conditional-naming-processgroup/template.json create mode 100644 BMW-Dynatrace-config/CD_APIM/conditional-naming-service/README.md create mode 100644 BMW-Dynatrace-config/CD_APIM/conditional-naming-service/conditional-naming-service.yaml create mode 100644 BMW-Dynatrace-config/CD_APIM/conditional-naming-service/template.json create mode 100644 BMW-Dynatrace-config/CD_APIM/custom-service-java/README.md create mode 100644 BMW-Dynatrace-config/CD_APIM/custom-service-java/custom-service-java.yaml create mode 100644 BMW-Dynatrace-config/CD_APIM/custom-service-java/template-1-1.json create mode 100644 BMW-Dynatrace-config/CD_APIM/dashboard/README.md create mode 100644 BMW-Dynatrace-config/CD_APIM/dashboard/dashboard.yaml create mode 100644 BMW-Dynatrace-config/CD_APIM/dashboard/default.json create mode 100644 BMW-Dynatrace-config/CD_APIM/notification/README.md create mode 100644 BMW-Dynatrace-config/CD_APIM/notification/email.json rename BMW-Dynatrace-config/{CD_Call-Handling-Backends/notification/NGTP-MSTeams.json => CD_APIM/notification/msTeams.json} (86%) create mode 100644 BMW-Dynatrace-config/CD_APIM/notification/notification.yaml create mode 100644 BMW-Dynatrace-config/CD_APIM/synthetic-monitor/README.md create mode 100644 BMW-Dynatrace-config/CD_APIM/synthetic-monitor/default.json create mode 100644 BMW-Dynatrace-config/CD_APIM/synthetic-monitor/synthetic-monitor.yaml delete mode 100644 BMW-Dynatrace-config/CD_ASBC-HAL/alerting-profile/ASBC-HAL.json rename BMW-Dynatrace-config/{CD_Call-Handling-Backends/alerting-profile/Call-Handling-Backends.json => CD_ASBC-HAL/alerting-profile/default.json} (66%) create mode 100644 BMW-Dynatrace-config/CD_ASBC-HAL/calculated-metrics-service/README.md create mode 100644 BMW-Dynatrace-config/CD_ASBC-HAL/conditional-naming-processgroup/README.md create mode 100644 BMW-Dynatrace-config/CD_ASBC-HAL/conditional-naming-processgroup/conditional-naming-processgroup.yaml create mode 100644 BMW-Dynatrace-config/CD_ASBC-HAL/conditional-naming-processgroup/template.json create mode 100644 BMW-Dynatrace-config/CD_ASBC-HAL/conditional-naming-service/README.md create mode 100644 BMW-Dynatrace-config/CD_ASBC-HAL/conditional-naming-service/conditional-naming-service.yaml create mode 100644 BMW-Dynatrace-config/CD_ASBC-HAL/conditional-naming-service/template.json create mode 100644 BMW-Dynatrace-config/CD_ASBC-HAL/custom-service-java/README.md create mode 100644 BMW-Dynatrace-config/CD_ASBC-HAL/custom-service-java/custom-service-java.yaml create mode 100644 BMW-Dynatrace-config/CD_ASBC-HAL/custom-service-java/template-1-1.json create mode 100644 BMW-Dynatrace-config/CD_ASBC-HAL/dashboard/README.md create mode 100644 BMW-Dynatrace-config/CD_ASBC-HAL/dashboard/dashboard.yaml create mode 100644 BMW-Dynatrace-config/CD_ASBC-HAL/dashboard/default.json create mode 100644 BMW-Dynatrace-config/CD_ASBC-HAL/notification/README.md create mode 100644 BMW-Dynatrace-config/CD_ASBC-HAL/notification/email.json rename BMW-Dynatrace-config/{CD_Messaging-Services/notification/CDMessaging-Services.json => CD_ASBC-HAL/notification/msTeams.json} (72%) create mode 100644 BMW-Dynatrace-config/CD_ASBC-HAL/notification/notification.yaml create mode 100644 BMW-Dynatrace-config/CD_ASBC-HAL/synthetic-monitor/README.md create mode 100644 BMW-Dynatrace-config/CD_ASBC-HAL/synthetic-monitor/default.json create mode 100644 BMW-Dynatrace-config/CD_ASBC-HAL/synthetic-monitor/synthetic-monitor.yaml create mode 100644 BMW-Dynatrace-config/CD_ASBC-RSU/calculated-metrics-service/README.md create mode 100644 BMW-Dynatrace-config/CD_ASBC-RSU/conditional-naming-processgroup/README.md create mode 100644 BMW-Dynatrace-config/CD_ASBC-RSU/conditional-naming-processgroup/conditional-naming-processgroup.yaml create mode 100644 BMW-Dynatrace-config/CD_ASBC-RSU/conditional-naming-processgroup/template.json create mode 100644 BMW-Dynatrace-config/CD_ASBC-RSU/conditional-naming-service/README.md create mode 100644 BMW-Dynatrace-config/CD_ASBC-RSU/conditional-naming-service/conditional-naming-service.yaml create mode 100644 BMW-Dynatrace-config/CD_ASBC-RSU/conditional-naming-service/template.json create mode 100644 BMW-Dynatrace-config/CD_ASBC-RSU/custom-service-java/README.md create mode 100644 BMW-Dynatrace-config/CD_ASBC-RSU/custom-service-java/custom-service-java.yaml create mode 100644 BMW-Dynatrace-config/CD_ASBC-RSU/custom-service-java/template-1-1.json create mode 100644 BMW-Dynatrace-config/CD_ASBC-RSU/dashboard/README.md create mode 100644 BMW-Dynatrace-config/CD_ASBC-RSU/dashboard/dashboard.yaml create mode 100644 BMW-Dynatrace-config/CD_ASBC-RSU/dashboard/default.json create mode 100644 BMW-Dynatrace-config/CD_ASBC-RSU/synthetic-monitor/README.md create mode 100644 BMW-Dynatrace-config/CD_ASBC-RSU/synthetic-monitor/default.json create mode 100644 BMW-Dynatrace-config/CD_ASBC-RSU/synthetic-monitor/synthetic-monitor.yaml rename BMW-Dynatrace-config/{CD_LSC/alerting-profile/LSC-FSU.json => CD_ASBC-SMACC/alerting-profile/default.json} (66%) create mode 100644 BMW-Dynatrace-config/CD_ASBC-SMACC/calculated-metrics-service/README.md create mode 100644 BMW-Dynatrace-config/CD_ASBC-SMACC/conditional-naming-processgroup/README.md create mode 100644 BMW-Dynatrace-config/CD_ASBC-SMACC/conditional-naming-processgroup/conditional-naming-processgroup.yaml create mode 100644 BMW-Dynatrace-config/CD_ASBC-SMACC/conditional-naming-processgroup/template.json create mode 100644 BMW-Dynatrace-config/CD_ASBC-SMACC/conditional-naming-service/README.md create mode 100644 BMW-Dynatrace-config/CD_ASBC-SMACC/conditional-naming-service/conditional-naming-service.yaml create mode 100644 BMW-Dynatrace-config/CD_ASBC-SMACC/conditional-naming-service/template.json create mode 100644 BMW-Dynatrace-config/CD_ASBC-SMACC/custom-service-java/README.md create mode 100644 BMW-Dynatrace-config/CD_ASBC-SMACC/custom-service-java/custom-service-java.yaml create mode 100644 BMW-Dynatrace-config/CD_ASBC-SMACC/custom-service-java/template-1-1.json create mode 100644 BMW-Dynatrace-config/CD_ASBC-SMACC/dashboard/README.md create mode 100644 BMW-Dynatrace-config/CD_ASBC-SMACC/dashboard/dashboard.yaml create mode 100644 BMW-Dynatrace-config/CD_ASBC-SMACC/dashboard/default.json create mode 100644 BMW-Dynatrace-config/CD_ASBC-SMACC/synthetic-monitor/README.md create mode 100644 BMW-Dynatrace-config/CD_ASBC-SMACC/synthetic-monitor/default.json create mode 100644 BMW-Dynatrace-config/CD_ASBC-SMACC/synthetic-monitor/synthetic-monitor.yaml delete mode 100644 BMW-Dynatrace-config/CD_App-Repository/alerting-profile/CDApp-Repository.json create mode 100644 BMW-Dynatrace-config/CD_App-Repository/alerting-profile/default.json create mode 100644 BMW-Dynatrace-config/CD_App-Repository/calculated-metrics-service/README.md create mode 100644 BMW-Dynatrace-config/CD_App-Repository/conditional-naming-processgroup/README.md create mode 100644 BMW-Dynatrace-config/CD_App-Repository/conditional-naming-processgroup/conditional-naming-processgroup.yaml create mode 100644 BMW-Dynatrace-config/CD_App-Repository/conditional-naming-processgroup/template.json create mode 100644 BMW-Dynatrace-config/CD_App-Repository/conditional-naming-service/README.md create mode 100644 BMW-Dynatrace-config/CD_App-Repository/conditional-naming-service/conditional-naming-service.yaml create mode 100644 BMW-Dynatrace-config/CD_App-Repository/conditional-naming-service/template.json create mode 100644 BMW-Dynatrace-config/CD_App-Repository/custom-service-java/README.md create mode 100644 BMW-Dynatrace-config/CD_App-Repository/custom-service-java/custom-service-java.yaml create mode 100644 BMW-Dynatrace-config/CD_App-Repository/custom-service-java/template-1-1.json create mode 100644 BMW-Dynatrace-config/CD_App-Repository/dashboard/README.md create mode 100644 BMW-Dynatrace-config/CD_App-Repository/dashboard/dashboard.yaml create mode 100644 BMW-Dynatrace-config/CD_App-Repository/dashboard/default.json create mode 100644 BMW-Dynatrace-config/CD_App-Repository/notification/README.md create mode 100644 BMW-Dynatrace-config/CD_App-Repository/notification/email.json rename BMW-Dynatrace-config/{CD_PISA/notification/CDPISA-MSTeams.json => CD_App-Repository/notification/msTeams.json} (52%) create mode 100644 BMW-Dynatrace-config/CD_App-Repository/notification/notification.yaml create mode 100644 BMW-Dynatrace-config/CD_App-Repository/synthetic-monitor/README.md create mode 100644 BMW-Dynatrace-config/CD_App-Repository/synthetic-monitor/default.json create mode 100644 BMW-Dynatrace-config/CD_App-Repository/synthetic-monitor/synthetic-monitor.yaml create mode 100644 BMW-Dynatrace-config/CD_BMWPoints/alerting-profile/alerting-profile.yaml create mode 100644 BMW-Dynatrace-config/CD_BMWPoints/alerting-profile/default.json create mode 100644 BMW-Dynatrace-config/CD_BMWPoints/calculated-metrics-service/README.md create mode 100644 BMW-Dynatrace-config/CD_BMWPoints/conditional-naming-processgroup/README.md create mode 100644 BMW-Dynatrace-config/CD_BMWPoints/conditional-naming-processgroup/conditional-naming-processgroup.yaml create mode 100644 BMW-Dynatrace-config/CD_BMWPoints/conditional-naming-processgroup/template.json create mode 100644 BMW-Dynatrace-config/CD_BMWPoints/conditional-naming-service/README.md create mode 100644 BMW-Dynatrace-config/CD_BMWPoints/conditional-naming-service/conditional-naming-service.yaml create mode 100644 BMW-Dynatrace-config/CD_BMWPoints/conditional-naming-service/template.json create mode 100644 BMW-Dynatrace-config/CD_BMWPoints/custom-service-java/README.md create mode 100644 BMW-Dynatrace-config/CD_BMWPoints/custom-service-java/custom-service-java.yaml create mode 100644 BMW-Dynatrace-config/CD_BMWPoints/custom-service-java/template-1-1.json create mode 100644 BMW-Dynatrace-config/CD_BMWPoints/dashboard/README.md create mode 100644 BMW-Dynatrace-config/CD_BMWPoints/dashboard/dashboard.yaml create mode 100644 BMW-Dynatrace-config/CD_BMWPoints/dashboard/default.json delete mode 100644 BMW-Dynatrace-config/CD_BMWPoints/management-zone/CDBMWPoints.json create mode 100644 BMW-Dynatrace-config/CD_BMWPoints/management-zone/README.md rename BMW-Dynatrace-config/{CD_LSC/management-zone/CDLSC-FSU.json => CD_BMWPoints/management-zone/default.json} (63%) create mode 100644 BMW-Dynatrace-config/CD_BMWPoints/notification/README.md create mode 100644 BMW-Dynatrace-config/CD_BMWPoints/notification/email.json rename BMW-Dynatrace-config/{CD_Speech/notification/CDSpeech-MSTeams.json => CD_BMWPoints/notification/msTeams.json} (50%) create mode 100644 BMW-Dynatrace-config/CD_BMWPoints/notification/notification.yaml create mode 100644 BMW-Dynatrace-config/CD_BMWPoints/synthetic-monitor/README.md create mode 100644 BMW-Dynatrace-config/CD_BMWPoints/synthetic-monitor/default.json create mode 100644 BMW-Dynatrace-config/CD_BMWPoints/synthetic-monitor/synthetic-monitor.yaml delete mode 100644 BMW-Dynatrace-config/CD_Billing_Buffet/alerting-profile/Buffet.json create mode 100644 BMW-Dynatrace-config/CD_Billing_Buffet/alerting-profile/default.json create mode 100644 BMW-Dynatrace-config/CD_Billing_Buffet/calculated-metrics-service/README.md create mode 100644 BMW-Dynatrace-config/CD_Billing_Buffet/conditional-naming-processgroup/README.md create mode 100644 BMW-Dynatrace-config/CD_Billing_Buffet/conditional-naming-processgroup/conditional-naming-processgroup.yaml create mode 100644 BMW-Dynatrace-config/CD_Billing_Buffet/conditional-naming-processgroup/template.json create mode 100644 BMW-Dynatrace-config/CD_Billing_Buffet/conditional-naming-service/README.md create mode 100644 BMW-Dynatrace-config/CD_Billing_Buffet/conditional-naming-service/conditional-naming-service.yaml create mode 100644 BMW-Dynatrace-config/CD_Billing_Buffet/conditional-naming-service/template.json create mode 100644 BMW-Dynatrace-config/CD_Billing_Buffet/custom-service-java/README.md create mode 100644 BMW-Dynatrace-config/CD_Billing_Buffet/custom-service-java/custom-service-java.yaml create mode 100644 BMW-Dynatrace-config/CD_Billing_Buffet/custom-service-java/template-1-1.json create mode 100644 BMW-Dynatrace-config/CD_Billing_Buffet/dashboard/README.md create mode 100644 BMW-Dynatrace-config/CD_Billing_Buffet/dashboard/dashboard.yaml create mode 100644 BMW-Dynatrace-config/CD_Billing_Buffet/dashboard/default.json create mode 100644 BMW-Dynatrace-config/CD_Billing_Buffet/management-zone/README.md rename BMW-Dynatrace-config/{CD_Perseus/management-zone/CDPerseus.json => CD_Billing_Buffet/management-zone/default.json} (63%) create mode 100644 BMW-Dynatrace-config/CD_Billing_Buffet/notification/README.md create mode 100644 BMW-Dynatrace-config/CD_Billing_Buffet/notification/email.json create mode 100644 BMW-Dynatrace-config/CD_Billing_Buffet/notification/msTeams.json create mode 100644 BMW-Dynatrace-config/CD_Billing_Buffet/notification/notification.yaml create mode 100644 BMW-Dynatrace-config/CD_Billing_Buffet/synthetic-monitor/README.md create mode 100644 BMW-Dynatrace-config/CD_Billing_Buffet/synthetic-monitor/default.json create mode 100644 BMW-Dynatrace-config/CD_Billing_Buffet/synthetic-monitor/synthetic-monitor.yaml delete mode 100644 BMW-Dynatrace-config/CD_CCG/alerting-profile/CDCCG.json create mode 100644 BMW-Dynatrace-config/CD_CCG/alerting-profile/default.json create mode 100644 BMW-Dynatrace-config/CD_CCG/calculated-metrics-service/README.md create mode 100644 BMW-Dynatrace-config/CD_CCG/conditional-naming-processgroup/README.md create mode 100644 BMW-Dynatrace-config/CD_CCG/conditional-naming-processgroup/conditional-naming-processgroup.yaml create mode 100644 BMW-Dynatrace-config/CD_CCG/conditional-naming-processgroup/template.json create mode 100644 BMW-Dynatrace-config/CD_CCG/conditional-naming-service/README.md create mode 100644 BMW-Dynatrace-config/CD_CCG/conditional-naming-service/conditional-naming-service.yaml create mode 100644 BMW-Dynatrace-config/CD_CCG/conditional-naming-service/template.json create mode 100644 BMW-Dynatrace-config/CD_CCG/custom-service-java/README.md create mode 100644 BMW-Dynatrace-config/CD_CCG/custom-service-java/custom-service-java.yaml create mode 100644 BMW-Dynatrace-config/CD_CCG/custom-service-java/template-1-1.json create mode 100644 BMW-Dynatrace-config/CD_CCG/dashboard/README.md create mode 100644 BMW-Dynatrace-config/CD_CCG/dashboard/dashboard.yaml create mode 100644 BMW-Dynatrace-config/CD_CCG/dashboard/default.json delete mode 100644 BMW-Dynatrace-config/CD_CCG/management-zone/CDCCG.json create mode 100644 BMW-Dynatrace-config/CD_CCG/management-zone/README.md rename BMW-Dynatrace-config/{CD_Billing_Buffet/management-zone/CDBuffet.json => CD_CCG/management-zone/default.json} (63%) create mode 100644 BMW-Dynatrace-config/CD_CCG/notification/README.md create mode 100644 BMW-Dynatrace-config/CD_CCG/notification/email.json create mode 100644 BMW-Dynatrace-config/CD_CCG/notification/msTeams.json create mode 100644 BMW-Dynatrace-config/CD_CCG/notification/notification.yaml create mode 100644 BMW-Dynatrace-config/CD_CCG/synthetic-monitor/README.md create mode 100644 BMW-Dynatrace-config/CD_CCG/synthetic-monitor/default.json create mode 100644 BMW-Dynatrace-config/CD_CCG/synthetic-monitor/synthetic-monitor.yaml delete mode 100644 BMW-Dynatrace-config/CD_CSI/alerting-profile/CDCSI.json create mode 100644 BMW-Dynatrace-config/CD_CSI/alerting-profile/default.json create mode 100644 BMW-Dynatrace-config/CD_CSI/calculated-metrics-service/README.md create mode 100644 BMW-Dynatrace-config/CD_CSI/conditional-naming-processgroup/README.md create mode 100644 BMW-Dynatrace-config/CD_CSI/conditional-naming-processgroup/conditional-naming-processgroup.yaml create mode 100644 BMW-Dynatrace-config/CD_CSI/conditional-naming-processgroup/template.json create mode 100644 BMW-Dynatrace-config/CD_CSI/conditional-naming-service/README.md create mode 100644 BMW-Dynatrace-config/CD_CSI/conditional-naming-service/conditional-naming-service.yaml create mode 100644 BMW-Dynatrace-config/CD_CSI/conditional-naming-service/template.json create mode 100644 BMW-Dynatrace-config/CD_CSI/custom-service-java/README.md create mode 100644 BMW-Dynatrace-config/CD_CSI/custom-service-java/custom-service-java.yaml create mode 100644 BMW-Dynatrace-config/CD_CSI/custom-service-java/template-1-1.json create mode 100644 BMW-Dynatrace-config/CD_CSI/dashboard/README.md create mode 100644 BMW-Dynatrace-config/CD_CSI/dashboard/dashboard.yaml create mode 100644 BMW-Dynatrace-config/CD_CSI/dashboard/default.json delete mode 100644 BMW-Dynatrace-config/CD_CSI/management-zone/CDCSI.json create mode 100644 BMW-Dynatrace-config/CD_CSI/management-zone/README.md rename BMW-Dynatrace-config/{CD_PISA/management-zone/CDTemplate.json => CD_CSI/management-zone/default.json} (63%) create mode 100644 BMW-Dynatrace-config/CD_CSI/notification/README.md create mode 100644 BMW-Dynatrace-config/CD_CSI/notification/email.json create mode 100644 BMW-Dynatrace-config/CD_CSI/notification/msTeams.json create mode 100644 BMW-Dynatrace-config/CD_CSI/notification/notification.yaml create mode 100644 BMW-Dynatrace-config/CD_CSI/synthetic-monitor/README.md create mode 100644 BMW-Dynatrace-config/CD_CSI/synthetic-monitor/default.json create mode 100644 BMW-Dynatrace-config/CD_CSI/synthetic-monitor/synthetic-monitor.yaml delete mode 100644 BMW-Dynatrace-config/CD_Call-Handling-Backends/alerting-profile/NGTP.json create mode 100644 BMW-Dynatrace-config/CD_Call-Handling-Backends/alerting-profile/default.json create mode 100644 BMW-Dynatrace-config/CD_Call-Handling-Backends/calculated-metrics-service/README.md create mode 100644 BMW-Dynatrace-config/CD_Call-Handling-Backends/conditional-naming-processgroup/README.md create mode 100644 BMW-Dynatrace-config/CD_Call-Handling-Backends/conditional-naming-processgroup/conditional-naming-processgroup.yaml create mode 100644 BMW-Dynatrace-config/CD_Call-Handling-Backends/conditional-naming-processgroup/template.json create mode 100644 BMW-Dynatrace-config/CD_Call-Handling-Backends/conditional-naming-service/README.md create mode 100644 BMW-Dynatrace-config/CD_Call-Handling-Backends/conditional-naming-service/conditional-naming-service.yaml create mode 100644 BMW-Dynatrace-config/CD_Call-Handling-Backends/conditional-naming-service/template.json create mode 100644 BMW-Dynatrace-config/CD_Call-Handling-Backends/custom-service-java/README.md create mode 100644 BMW-Dynatrace-config/CD_Call-Handling-Backends/custom-service-java/custom-service-java.yaml create mode 100644 BMW-Dynatrace-config/CD_Call-Handling-Backends/custom-service-java/template-1-1.json create mode 100644 BMW-Dynatrace-config/CD_Call-Handling-Backends/dashboard/README.md create mode 100644 BMW-Dynatrace-config/CD_Call-Handling-Backends/dashboard/dashboard.yaml create mode 100644 BMW-Dynatrace-config/CD_Call-Handling-Backends/dashboard/default.json delete mode 100644 BMW-Dynatrace-config/CD_Call-Handling-Backends/management-zone/CDCall-Handling-Backends.json create mode 100644 BMW-Dynatrace-config/CD_Call-Handling-Backends/management-zone/README.md create mode 100644 BMW-Dynatrace-config/CD_Call-Handling-Backends/management-zone/default.json create mode 100644 BMW-Dynatrace-config/CD_Call-Handling-Backends/notification/README.md create mode 100644 BMW-Dynatrace-config/CD_Call-Handling-Backends/notification/email.json create mode 100644 BMW-Dynatrace-config/CD_Call-Handling-Backends/notification/msTeams.json create mode 100644 BMW-Dynatrace-config/CD_Call-Handling-Backends/synthetic-monitor/README.md create mode 100644 BMW-Dynatrace-config/CD_Call-Handling-Backends/synthetic-monitor/default.json create mode 100644 BMW-Dynatrace-config/CD_Call-Handling-Backends/synthetic-monitor/synthetic-monitor.yaml create mode 100644 BMW-Dynatrace-config/CD_CallCenterClient/alerting-profile/alerting-profile.yaml create mode 100644 BMW-Dynatrace-config/CD_CallCenterClient/alerting-profile/default.json create mode 100644 BMW-Dynatrace-config/CD_CallCenterClient/calculated-metrics-service/README.md create mode 100644 BMW-Dynatrace-config/CD_CallCenterClient/conditional-naming-processgroup/README.md create mode 100644 BMW-Dynatrace-config/CD_CallCenterClient/conditional-naming-processgroup/conditional-naming-processgroup.yaml create mode 100644 BMW-Dynatrace-config/CD_CallCenterClient/conditional-naming-processgroup/template.json create mode 100644 BMW-Dynatrace-config/CD_CallCenterClient/conditional-naming-service/README.md create mode 100644 BMW-Dynatrace-config/CD_CallCenterClient/conditional-naming-service/conditional-naming-service.yaml create mode 100644 BMW-Dynatrace-config/CD_CallCenterClient/conditional-naming-service/template.json create mode 100644 BMW-Dynatrace-config/CD_CallCenterClient/custom-service-java/README.md create mode 100644 BMW-Dynatrace-config/CD_CallCenterClient/custom-service-java/custom-service-java.yaml create mode 100644 BMW-Dynatrace-config/CD_CallCenterClient/custom-service-java/template-1-1.json create mode 100644 BMW-Dynatrace-config/CD_CallCenterClient/dashboard/README.md create mode 100644 BMW-Dynatrace-config/CD_CallCenterClient/dashboard/dashboard.yaml create mode 100644 BMW-Dynatrace-config/CD_CallCenterClient/dashboard/default.json delete mode 100644 BMW-Dynatrace-config/CD_CallCenterClient/management-zone/CDCallCenterClient.json create mode 100644 BMW-Dynatrace-config/CD_CallCenterClient/management-zone/README.md create mode 100644 BMW-Dynatrace-config/CD_CallCenterClient/management-zone/default.json create mode 100644 BMW-Dynatrace-config/CD_CallCenterClient/notification/README.md create mode 100644 BMW-Dynatrace-config/CD_CallCenterClient/notification/email.json create mode 100644 BMW-Dynatrace-config/CD_CallCenterClient/notification/msTeams.json create mode 100644 BMW-Dynatrace-config/CD_CallCenterClient/notification/notification.yaml create mode 100644 BMW-Dynatrace-config/CD_CallCenterClient/synthetic-monitor/README.md create mode 100644 BMW-Dynatrace-config/CD_CallCenterClient/synthetic-monitor/default.json create mode 100644 BMW-Dynatrace-config/CD_CallCenterClient/synthetic-monitor/synthetic-monitor.yaml create mode 100644 BMW-Dynatrace-config/CD_Connected-Backend-Services/alerting-profile/alerting-profile.yaml create mode 100644 BMW-Dynatrace-config/CD_Connected-Backend-Services/alerting-profile/default.json create mode 100644 BMW-Dynatrace-config/CD_Connected-Backend-Services/calculated-metrics-service/README.md create mode 100644 BMW-Dynatrace-config/CD_Connected-Backend-Services/conditional-naming-processgroup/README.md create mode 100644 BMW-Dynatrace-config/CD_Connected-Backend-Services/conditional-naming-processgroup/conditional-naming-processgroup.yaml create mode 100644 BMW-Dynatrace-config/CD_Connected-Backend-Services/conditional-naming-processgroup/template.json create mode 100644 BMW-Dynatrace-config/CD_Connected-Backend-Services/conditional-naming-service/README.md create mode 100644 BMW-Dynatrace-config/CD_Connected-Backend-Services/conditional-naming-service/conditional-naming-service.yaml create mode 100644 BMW-Dynatrace-config/CD_Connected-Backend-Services/conditional-naming-service/template.json create mode 100644 BMW-Dynatrace-config/CD_Connected-Backend-Services/custom-service-java/README.md create mode 100644 BMW-Dynatrace-config/CD_Connected-Backend-Services/custom-service-java/custom-service-java.yaml create mode 100644 BMW-Dynatrace-config/CD_Connected-Backend-Services/custom-service-java/template-1-1.json create mode 100644 BMW-Dynatrace-config/CD_Connected-Backend-Services/dashboard/README.md create mode 100644 BMW-Dynatrace-config/CD_Connected-Backend-Services/dashboard/dashboard.yaml create mode 100644 BMW-Dynatrace-config/CD_Connected-Backend-Services/dashboard/default.json delete mode 100644 BMW-Dynatrace-config/CD_Connected-Backend-Services/management-zone/CDConnected-Backend-Services.json create mode 100644 BMW-Dynatrace-config/CD_Connected-Backend-Services/management-zone/README.md create mode 100644 BMW-Dynatrace-config/CD_Connected-Backend-Services/management-zone/default.json create mode 100644 BMW-Dynatrace-config/CD_Connected-Backend-Services/notification/README.md create mode 100644 BMW-Dynatrace-config/CD_Connected-Backend-Services/notification/email.json create mode 100644 BMW-Dynatrace-config/CD_Connected-Backend-Services/notification/msTeams.json create mode 100644 BMW-Dynatrace-config/CD_Connected-Backend-Services/notification/notification.yaml create mode 100644 BMW-Dynatrace-config/CD_Connected-Backend-Services/synthetic-monitor/README.md create mode 100644 BMW-Dynatrace-config/CD_Connected-Backend-Services/synthetic-monitor/default.json create mode 100644 BMW-Dynatrace-config/CD_Connected-Backend-Services/synthetic-monitor/synthetic-monitor.yaml create mode 100644 BMW-Dynatrace-config/CD_Connected-User-Behaviour/alerting-profile/alerting-profile.yaml create mode 100644 BMW-Dynatrace-config/CD_Connected-User-Behaviour/alerting-profile/default.json create mode 100644 BMW-Dynatrace-config/CD_Connected-User-Behaviour/calculated-metrics-service/README.md create mode 100644 BMW-Dynatrace-config/CD_Connected-User-Behaviour/conditional-naming-processgroup/README.md create mode 100644 BMW-Dynatrace-config/CD_Connected-User-Behaviour/conditional-naming-processgroup/conditional-naming-processgroup.yaml create mode 100644 BMW-Dynatrace-config/CD_Connected-User-Behaviour/conditional-naming-processgroup/template.json create mode 100644 BMW-Dynatrace-config/CD_Connected-User-Behaviour/conditional-naming-service/README.md create mode 100644 BMW-Dynatrace-config/CD_Connected-User-Behaviour/conditional-naming-service/conditional-naming-service.yaml create mode 100644 BMW-Dynatrace-config/CD_Connected-User-Behaviour/conditional-naming-service/template.json create mode 100644 BMW-Dynatrace-config/CD_Connected-User-Behaviour/custom-service-java/README.md create mode 100644 BMW-Dynatrace-config/CD_Connected-User-Behaviour/custom-service-java/custom-service-java.yaml create mode 100644 BMW-Dynatrace-config/CD_Connected-User-Behaviour/custom-service-java/template-1-1.json create mode 100644 BMW-Dynatrace-config/CD_Connected-User-Behaviour/dashboard/README.md create mode 100644 BMW-Dynatrace-config/CD_Connected-User-Behaviour/dashboard/dashboard.yaml create mode 100644 BMW-Dynatrace-config/CD_Connected-User-Behaviour/dashboard/default.json delete mode 100644 BMW-Dynatrace-config/CD_Connected-User-Behaviour/management-zone/CDConnected-User-Behaviour.json create mode 100644 BMW-Dynatrace-config/CD_Connected-User-Behaviour/management-zone/README.md create mode 100644 BMW-Dynatrace-config/CD_Connected-User-Behaviour/management-zone/default.json create mode 100644 BMW-Dynatrace-config/CD_Connected-User-Behaviour/notification/README.md create mode 100644 BMW-Dynatrace-config/CD_Connected-User-Behaviour/notification/email.json create mode 100644 BMW-Dynatrace-config/CD_Connected-User-Behaviour/notification/msTeams.json create mode 100644 BMW-Dynatrace-config/CD_Connected-User-Behaviour/notification/notification.yaml create mode 100644 BMW-Dynatrace-config/CD_Connected-User-Behaviour/synthetic-monitor/README.md create mode 100644 BMW-Dynatrace-config/CD_Connected-User-Behaviour/synthetic-monitor/default.json create mode 100644 BMW-Dynatrace-config/CD_Connected-User-Behaviour/synthetic-monitor/synthetic-monitor.yaml delete mode 100644 BMW-Dynatrace-config/CD_ConnectedDrive-Internet-Portal/alerting-profile/CDCDIP.json create mode 100644 BMW-Dynatrace-config/CD_ConnectedDrive-Internet-Portal/alerting-profile/default.json create mode 100644 BMW-Dynatrace-config/CD_ConnectedDrive-Internet-Portal/calculated-metrics-service/README.md create mode 100644 BMW-Dynatrace-config/CD_ConnectedDrive-Internet-Portal/conditional-naming-processgroup/README.md create mode 100644 BMW-Dynatrace-config/CD_ConnectedDrive-Internet-Portal/conditional-naming-processgroup/conditional-naming-processgroup.yaml create mode 100644 BMW-Dynatrace-config/CD_ConnectedDrive-Internet-Portal/conditional-naming-processgroup/template.json create mode 100644 BMW-Dynatrace-config/CD_ConnectedDrive-Internet-Portal/conditional-naming-service/README.md create mode 100644 BMW-Dynatrace-config/CD_ConnectedDrive-Internet-Portal/conditional-naming-service/conditional-naming-service.yaml create mode 100644 BMW-Dynatrace-config/CD_ConnectedDrive-Internet-Portal/conditional-naming-service/template.json create mode 100644 BMW-Dynatrace-config/CD_ConnectedDrive-Internet-Portal/custom-service-java/README.md create mode 100644 BMW-Dynatrace-config/CD_ConnectedDrive-Internet-Portal/custom-service-java/custom-service-java.yaml create mode 100644 BMW-Dynatrace-config/CD_ConnectedDrive-Internet-Portal/custom-service-java/template-1-1.json create mode 100644 BMW-Dynatrace-config/CD_ConnectedDrive-Internet-Portal/dashboard/README.md create mode 100644 BMW-Dynatrace-config/CD_ConnectedDrive-Internet-Portal/dashboard/dashboard.yaml create mode 100644 BMW-Dynatrace-config/CD_ConnectedDrive-Internet-Portal/dashboard/default.json delete mode 100644 BMW-Dynatrace-config/CD_ConnectedDrive-Internet-Portal/management-zone/CDConnectedDrive-Internet-Portal.json create mode 100644 BMW-Dynatrace-config/CD_ConnectedDrive-Internet-Portal/management-zone/README.md create mode 100644 BMW-Dynatrace-config/CD_ConnectedDrive-Internet-Portal/management-zone/default.json create mode 100644 BMW-Dynatrace-config/CD_ConnectedDrive-Internet-Portal/notification/README.md create mode 100644 BMW-Dynatrace-config/CD_ConnectedDrive-Internet-Portal/notification/email.json create mode 100644 BMW-Dynatrace-config/CD_ConnectedDrive-Internet-Portal/notification/msTeams.json create mode 100644 BMW-Dynatrace-config/CD_ConnectedDrive-Internet-Portal/notification/notification.yaml create mode 100644 BMW-Dynatrace-config/CD_ConnectedDrive-Internet-Portal/synthetic-monitor/README.md create mode 100644 BMW-Dynatrace-config/CD_ConnectedDrive-Internet-Portal/synthetic-monitor/default.json create mode 100644 BMW-Dynatrace-config/CD_ConnectedDrive-Internet-Portal/synthetic-monitor/synthetic-monitor.yaml create mode 100644 BMW-Dynatrace-config/CD_ContentProvider/alerting-profile/alerting-profile.yaml create mode 100644 BMW-Dynatrace-config/CD_ContentProvider/alerting-profile/default.json create mode 100644 BMW-Dynatrace-config/CD_ContentProvider/calculated-metrics-service/README.md create mode 100644 BMW-Dynatrace-config/CD_ContentProvider/conditional-naming-processgroup/README.md create mode 100644 BMW-Dynatrace-config/CD_ContentProvider/conditional-naming-processgroup/conditional-naming-processgroup.yaml create mode 100644 BMW-Dynatrace-config/CD_ContentProvider/conditional-naming-processgroup/template.json create mode 100644 BMW-Dynatrace-config/CD_ContentProvider/conditional-naming-service/README.md create mode 100644 BMW-Dynatrace-config/CD_ContentProvider/conditional-naming-service/conditional-naming-service.yaml create mode 100644 BMW-Dynatrace-config/CD_ContentProvider/conditional-naming-service/template.json create mode 100644 BMW-Dynatrace-config/CD_ContentProvider/custom-service-java/README.md create mode 100644 BMW-Dynatrace-config/CD_ContentProvider/custom-service-java/custom-service-java.yaml create mode 100644 BMW-Dynatrace-config/CD_ContentProvider/custom-service-java/template-1-1.json create mode 100644 BMW-Dynatrace-config/CD_ContentProvider/dashboard/README.md create mode 100644 BMW-Dynatrace-config/CD_ContentProvider/dashboard/dashboard.yaml create mode 100644 BMW-Dynatrace-config/CD_ContentProvider/dashboard/default.json delete mode 100644 BMW-Dynatrace-config/CD_ContentProvider/management-zone/CDContentProvider.json create mode 100644 BMW-Dynatrace-config/CD_ContentProvider/management-zone/README.md create mode 100644 BMW-Dynatrace-config/CD_ContentProvider/management-zone/default.json create mode 100644 BMW-Dynatrace-config/CD_ContentProvider/notification/README.md create mode 100644 BMW-Dynatrace-config/CD_ContentProvider/notification/email.json create mode 100644 BMW-Dynatrace-config/CD_ContentProvider/notification/msTeams.json create mode 100644 BMW-Dynatrace-config/CD_ContentProvider/notification/notification.yaml create mode 100644 BMW-Dynatrace-config/CD_ContentProvider/synthetic-monitor/README.md create mode 100644 BMW-Dynatrace-config/CD_ContentProvider/synthetic-monitor/default.json create mode 100644 BMW-Dynatrace-config/CD_ContentProvider/synthetic-monitor/synthetic-monitor.yaml delete mode 100644 BMW-Dynatrace-config/CD_DPP_DPM/alerting-profile/NewComponent.json create mode 100644 BMW-Dynatrace-config/CD_DPP_DPM/alerting-profile/default.json create mode 100644 BMW-Dynatrace-config/CD_DPP_DPM/calculated-metrics-service/README.md create mode 100644 BMW-Dynatrace-config/CD_DPP_DPM/conditional-naming-processgroup/README.md create mode 100644 BMW-Dynatrace-config/CD_DPP_DPM/conditional-naming-processgroup/conditional-naming-processgroup.yaml create mode 100644 BMW-Dynatrace-config/CD_DPP_DPM/conditional-naming-processgroup/template.json create mode 100644 BMW-Dynatrace-config/CD_DPP_DPM/conditional-naming-service/README.md create mode 100644 BMW-Dynatrace-config/CD_DPP_DPM/conditional-naming-service/conditional-naming-service.yaml create mode 100644 BMW-Dynatrace-config/CD_DPP_DPM/conditional-naming-service/template.json create mode 100644 BMW-Dynatrace-config/CD_DPP_DPM/custom-service-java/README.md create mode 100644 BMW-Dynatrace-config/CD_DPP_DPM/custom-service-java/custom-service-java.yaml create mode 100644 BMW-Dynatrace-config/CD_DPP_DPM/custom-service-java/template-1-1.json create mode 100644 BMW-Dynatrace-config/CD_DPP_DPM/dashboard/README.md create mode 100644 BMW-Dynatrace-config/CD_DPP_DPM/dashboard/dashboard.yaml create mode 100644 BMW-Dynatrace-config/CD_DPP_DPM/dashboard/default.json create mode 100644 BMW-Dynatrace-config/CD_DPP_DPM/management-zone/README.md rename BMW-Dynatrace-config/{CD_Speech/management-zone/CDTemplate.json => CD_DPP_DPM/management-zone/default.json} (63%) create mode 100644 BMW-Dynatrace-config/CD_DPP_DPM/notification/README.md create mode 100644 BMW-Dynatrace-config/CD_DPP_DPM/notification/email.json create mode 100644 BMW-Dynatrace-config/CD_DPP_DPM/notification/msTeams.json create mode 100644 BMW-Dynatrace-config/CD_DPP_DPM/synthetic-monitor/README.md create mode 100644 BMW-Dynatrace-config/CD_DPP_DPM/synthetic-monitor/default.json create mode 100644 BMW-Dynatrace-config/CD_DPP_DPM/synthetic-monitor/synthetic-monitor.yaml create mode 100644 BMW-Dynatrace-config/CD_LSC/alerting-profile/default.json create mode 100644 BMW-Dynatrace-config/CD_LSC/calculated-metrics-service/README.md create mode 100644 BMW-Dynatrace-config/CD_LSC/conditional-naming-processgroup/README.md create mode 100644 BMW-Dynatrace-config/CD_LSC/conditional-naming-processgroup/conditional-naming-processgroup.yaml create mode 100644 BMW-Dynatrace-config/CD_LSC/conditional-naming-processgroup/template.json create mode 100644 BMW-Dynatrace-config/CD_LSC/conditional-naming-service/README.md create mode 100644 BMW-Dynatrace-config/CD_LSC/conditional-naming-service/conditional-naming-service.yaml create mode 100644 BMW-Dynatrace-config/CD_LSC/conditional-naming-service/template.json create mode 100644 BMW-Dynatrace-config/CD_LSC/custom-service-java/README.md create mode 100644 BMW-Dynatrace-config/CD_LSC/custom-service-java/custom-service-java.yaml create mode 100644 BMW-Dynatrace-config/CD_LSC/custom-service-java/template-1-1.json delete mode 100644 BMW-Dynatrace-config/CD_LSC/dashboard/LSC-FSU.json create mode 100644 BMW-Dynatrace-config/CD_LSC/dashboard/README.md create mode 100644 BMW-Dynatrace-config/CD_LSC/dashboard/default.json create mode 100644 BMW-Dynatrace-config/CD_LSC/management-zone/README.md create mode 100644 BMW-Dynatrace-config/CD_LSC/management-zone/default.json create mode 100644 BMW-Dynatrace-config/CD_LSC/notification/README.md create mode 100644 BMW-Dynatrace-config/CD_LSC/notification/email.json create mode 100644 BMW-Dynatrace-config/CD_LSC/notification/msTeams.json create mode 100644 BMW-Dynatrace-config/CD_LSC/notification/notification.yaml create mode 100644 BMW-Dynatrace-config/CD_LSC/synthetic-monitor/README.md create mode 100644 BMW-Dynatrace-config/CD_LSC/synthetic-monitor/default.json create mode 100644 BMW-Dynatrace-config/CD_LSC/synthetic-monitor/synthetic-monitor.yaml delete mode 100644 BMW-Dynatrace-config/CD_Messaging-Services/alerting-profile/MessagingS.json create mode 100644 BMW-Dynatrace-config/CD_Messaging-Services/alerting-profile/default.json create mode 100644 BMW-Dynatrace-config/CD_Messaging-Services/calculated-metrics-service/README.md create mode 100644 BMW-Dynatrace-config/CD_Messaging-Services/conditional-naming-processgroup/README.md create mode 100644 BMW-Dynatrace-config/CD_Messaging-Services/conditional-naming-processgroup/conditional-naming-processgroup.yaml create mode 100644 BMW-Dynatrace-config/CD_Messaging-Services/conditional-naming-processgroup/template.json create mode 100644 BMW-Dynatrace-config/CD_Messaging-Services/conditional-naming-service/README.md create mode 100644 BMW-Dynatrace-config/CD_Messaging-Services/conditional-naming-service/conditional-naming-service.yaml create mode 100644 BMW-Dynatrace-config/CD_Messaging-Services/conditional-naming-service/template.json create mode 100644 BMW-Dynatrace-config/CD_Messaging-Services/custom-service-java/README.md create mode 100644 BMW-Dynatrace-config/CD_Messaging-Services/custom-service-java/custom-service-java.yaml create mode 100644 BMW-Dynatrace-config/CD_Messaging-Services/custom-service-java/template-1-1.json create mode 100644 BMW-Dynatrace-config/CD_Messaging-Services/dashboard/README.md create mode 100644 BMW-Dynatrace-config/CD_Messaging-Services/dashboard/dashboard.yaml create mode 100644 BMW-Dynatrace-config/CD_Messaging-Services/dashboard/default.json delete mode 100644 BMW-Dynatrace-config/CD_Messaging-Services/management-zone/CDMessaging-Services.json create mode 100644 BMW-Dynatrace-config/CD_Messaging-Services/management-zone/README.md rename BMW-Dynatrace-config/{CD_DPP_DPM/management-zone/CDTemplate.json => CD_Messaging-Services/management-zone/default.json} (61%) create mode 100644 BMW-Dynatrace-config/CD_Messaging-Services/notification/README.md create mode 100644 BMW-Dynatrace-config/CD_Messaging-Services/notification/email.json create mode 100644 BMW-Dynatrace-config/CD_Messaging-Services/notification/msTeams.json create mode 100644 BMW-Dynatrace-config/CD_Messaging-Services/synthetic-monitor/README.md create mode 100644 BMW-Dynatrace-config/CD_Messaging-Services/synthetic-monitor/default.json create mode 100644 BMW-Dynatrace-config/CD_Messaging-Services/synthetic-monitor/synthetic-monitor.yaml delete mode 100644 BMW-Dynatrace-config/CD_PISA/alerting-profile/NewComponent.json create mode 100644 BMW-Dynatrace-config/CD_PISA/alerting-profile/default.json create mode 100644 BMW-Dynatrace-config/CD_PISA/calculated-metrics-service/README.md create mode 100644 BMW-Dynatrace-config/CD_PISA/conditional-naming-processgroup/README.md create mode 100644 BMW-Dynatrace-config/CD_PISA/conditional-naming-processgroup/conditional-naming-processgroup.yaml create mode 100644 BMW-Dynatrace-config/CD_PISA/conditional-naming-processgroup/template.json create mode 100644 BMW-Dynatrace-config/CD_PISA/conditional-naming-service/README.md create mode 100644 BMW-Dynatrace-config/CD_PISA/conditional-naming-service/conditional-naming-service.yaml create mode 100644 BMW-Dynatrace-config/CD_PISA/conditional-naming-service/template.json create mode 100644 BMW-Dynatrace-config/CD_PISA/custom-service-java/README.md create mode 100644 BMW-Dynatrace-config/CD_PISA/custom-service-java/custom-service-java.yaml create mode 100644 BMW-Dynatrace-config/CD_PISA/custom-service-java/template-1-1.json create mode 100644 BMW-Dynatrace-config/CD_PISA/dashboard/README.md create mode 100644 BMW-Dynatrace-config/CD_PISA/dashboard/dashboard.yaml create mode 100644 BMW-Dynatrace-config/CD_PISA/dashboard/default.json create mode 100644 BMW-Dynatrace-config/CD_PISA/management-zone/README.md create mode 100644 BMW-Dynatrace-config/CD_PISA/management-zone/default.json create mode 100644 BMW-Dynatrace-config/CD_PISA/notification/README.md create mode 100644 BMW-Dynatrace-config/CD_PISA/notification/email.json create mode 100644 BMW-Dynatrace-config/CD_PISA/notification/msTeams.json create mode 100644 BMW-Dynatrace-config/CD_PISA/synthetic-monitor/README.md create mode 100644 BMW-Dynatrace-config/CD_PISA/synthetic-monitor/default.json create mode 100644 BMW-Dynatrace-config/CD_PISA/synthetic-monitor/synthetic-monitor.yaml create mode 100644 BMW-Dynatrace-config/CD_Perseus/alerting-profile/default.json create mode 100644 BMW-Dynatrace-config/CD_Perseus/calculated-metrics-service/README.md create mode 100644 BMW-Dynatrace-config/CD_Perseus/conditional-naming-processgroup/README.md create mode 100644 BMW-Dynatrace-config/CD_Perseus/conditional-naming-processgroup/conditional-naming-processgroup.yaml create mode 100644 BMW-Dynatrace-config/CD_Perseus/conditional-naming-processgroup/template.json create mode 100644 BMW-Dynatrace-config/CD_Perseus/conditional-naming-service/README.md create mode 100644 BMW-Dynatrace-config/CD_Perseus/conditional-naming-service/conditional-naming-service.yaml create mode 100644 BMW-Dynatrace-config/CD_Perseus/conditional-naming-service/template.json create mode 100644 BMW-Dynatrace-config/CD_Perseus/custom-service-java/README.md create mode 100644 BMW-Dynatrace-config/CD_Perseus/custom-service-java/custom-service-java.yaml create mode 100644 BMW-Dynatrace-config/CD_Perseus/custom-service-java/template-1-1.json create mode 100644 BMW-Dynatrace-config/CD_Perseus/dashboard/README.md create mode 100644 BMW-Dynatrace-config/CD_Perseus/dashboard/dashboard.yaml create mode 100644 BMW-Dynatrace-config/CD_Perseus/dashboard/default.json create mode 100644 BMW-Dynatrace-config/CD_Perseus/management-zone/README.md create mode 100644 BMW-Dynatrace-config/CD_Perseus/management-zone/default.json create mode 100644 BMW-Dynatrace-config/CD_Perseus/notification/README.md create mode 100644 BMW-Dynatrace-config/CD_Perseus/notification/email.json create mode 100644 BMW-Dynatrace-config/CD_Perseus/notification/msTeams.json create mode 100644 BMW-Dynatrace-config/CD_Perseus/synthetic-monitor/README.md create mode 100644 BMW-Dynatrace-config/CD_Perseus/synthetic-monitor/default.json create mode 100644 BMW-Dynatrace-config/CD_Perseus/synthetic-monitor/synthetic-monitor.yaml create mode 100644 BMW-Dynatrace-config/CD_RemoteServices/alerting-profile/alerting-profile.yaml create mode 100644 BMW-Dynatrace-config/CD_RemoteServices/alerting-profile/default.json create mode 100644 BMW-Dynatrace-config/CD_RemoteServices/calculated-metrics-service/README.md create mode 100644 BMW-Dynatrace-config/CD_RemoteServices/conditional-naming-processgroup/README.md create mode 100644 BMW-Dynatrace-config/CD_RemoteServices/conditional-naming-processgroup/conditional-naming-processgroup.yaml create mode 100644 BMW-Dynatrace-config/CD_RemoteServices/conditional-naming-processgroup/template.json create mode 100644 BMW-Dynatrace-config/CD_RemoteServices/conditional-naming-service/README.md create mode 100644 BMW-Dynatrace-config/CD_RemoteServices/conditional-naming-service/conditional-naming-service.yaml create mode 100644 BMW-Dynatrace-config/CD_RemoteServices/conditional-naming-service/template.json create mode 100644 BMW-Dynatrace-config/CD_RemoteServices/custom-service-java/README.md create mode 100644 BMW-Dynatrace-config/CD_RemoteServices/custom-service-java/custom-service-java.yaml create mode 100644 BMW-Dynatrace-config/CD_RemoteServices/custom-service-java/template-1-1.json create mode 100644 BMW-Dynatrace-config/CD_RemoteServices/dashboard/README.md create mode 100644 BMW-Dynatrace-config/CD_RemoteServices/dashboard/dashboard.yaml create mode 100644 BMW-Dynatrace-config/CD_RemoteServices/dashboard/default.json delete mode 100644 BMW-Dynatrace-config/CD_RemoteServices/management-zone/CDRemoteServices.json create mode 100644 BMW-Dynatrace-config/CD_RemoteServices/management-zone/README.md create mode 100644 BMW-Dynatrace-config/CD_RemoteServices/management-zone/default.json create mode 100644 BMW-Dynatrace-config/CD_RemoteServices/notification/README.md create mode 100644 BMW-Dynatrace-config/CD_RemoteServices/notification/email.json create mode 100644 BMW-Dynatrace-config/CD_RemoteServices/notification/msTeams.json create mode 100644 BMW-Dynatrace-config/CD_RemoteServices/notification/notification.yaml create mode 100644 BMW-Dynatrace-config/CD_RemoteServices/synthetic-monitor/README.md create mode 100644 BMW-Dynatrace-config/CD_RemoteServices/synthetic-monitor/default.json create mode 100644 BMW-Dynatrace-config/CD_RemoteServices/synthetic-monitor/synthetic-monitor.yaml delete mode 100644 BMW-Dynatrace-config/CD_Speech/alerting-profile/NewComponent.json create mode 100644 BMW-Dynatrace-config/CD_Speech/alerting-profile/default.json create mode 100644 BMW-Dynatrace-config/CD_Speech/calculated-metrics-service/README.md create mode 100644 BMW-Dynatrace-config/CD_Speech/conditional-naming-processgroup/README.md create mode 100644 BMW-Dynatrace-config/CD_Speech/conditional-naming-processgroup/conditional-naming-processgroup.yaml create mode 100644 BMW-Dynatrace-config/CD_Speech/conditional-naming-processgroup/template.json create mode 100644 BMW-Dynatrace-config/CD_Speech/conditional-naming-service/README.md create mode 100644 BMW-Dynatrace-config/CD_Speech/conditional-naming-service/conditional-naming-service.yaml create mode 100644 BMW-Dynatrace-config/CD_Speech/conditional-naming-service/template.json create mode 100644 BMW-Dynatrace-config/CD_Speech/custom-service-java/README.md create mode 100644 BMW-Dynatrace-config/CD_Speech/custom-service-java/custom-service-java.yaml create mode 100644 BMW-Dynatrace-config/CD_Speech/custom-service-java/template-1-1.json create mode 100644 BMW-Dynatrace-config/CD_Speech/dashboard/README.md create mode 100644 BMW-Dynatrace-config/CD_Speech/dashboard/dashboard.yaml create mode 100644 BMW-Dynatrace-config/CD_Speech/dashboard/default.json create mode 100644 BMW-Dynatrace-config/CD_Speech/management-zone/README.md create mode 100644 BMW-Dynatrace-config/CD_Speech/management-zone/default.json create mode 100644 BMW-Dynatrace-config/CD_Speech/notification/README.md create mode 100644 BMW-Dynatrace-config/CD_Speech/notification/email.json create mode 100644 BMW-Dynatrace-config/CD_Speech/notification/msTeams.json create mode 100644 BMW-Dynatrace-config/CD_Speech/synthetic-monitor/README.md create mode 100644 BMW-Dynatrace-config/CD_Speech/synthetic-monitor/default.json create mode 100644 BMW-Dynatrace-config/CD_Speech/synthetic-monitor/synthetic-monitor.yaml create mode 100644 BMW-Dynatrace-config/CD_agent-service/conditional-naming-processgroup/README.md create mode 100644 BMW-Dynatrace-config/CD_agent-service/conditional-naming-processgroup/conditional-naming-processgroup.yaml create mode 100644 BMW-Dynatrace-config/CD_agent-service/conditional-naming-processgroup/template.json create mode 100644 BMW-Dynatrace-config/CD_agent-service/conditional-naming-service/README.md create mode 100644 BMW-Dynatrace-config/CD_agent-service/conditional-naming-service/conditional-naming-service.yaml create mode 100644 BMW-Dynatrace-config/CD_agent-service/conditional-naming-service/template.json create mode 100644 BMW-Dynatrace-config/CD_aluis/conditional-naming-processgroup/README.md create mode 100644 BMW-Dynatrace-config/CD_aluis/conditional-naming-processgroup/conditional-naming-processgroup.yaml create mode 100644 BMW-Dynatrace-config/CD_aluis/conditional-naming-processgroup/template.json create mode 100644 BMW-Dynatrace-config/CD_aluis/conditional-naming-service/README.md create mode 100644 BMW-Dynatrace-config/CD_aluis/conditional-naming-service/conditional-naming-service.yaml create mode 100644 BMW-Dynatrace-config/CD_aluis/conditional-naming-service/template.json create mode 100644 BMW-Dynatrace-config/CD_am-casa/conditional-naming-processgroup/README.md create mode 100644 BMW-Dynatrace-config/CD_am-casa/conditional-naming-processgroup/conditional-naming-processgroup.yaml create mode 100644 BMW-Dynatrace-config/CD_am-casa/conditional-naming-processgroup/template.json create mode 100644 BMW-Dynatrace-config/CD_am-casa/conditional-naming-service/README.md create mode 100644 BMW-Dynatrace-config/CD_am-casa/conditional-naming-service/conditional-naming-service.yaml create mode 100644 BMW-Dynatrace-config/CD_am-casa/conditional-naming-service/template.json create mode 100644 BMW-Dynatrace-config/CD_am-cesim/conditional-naming-processgroup/README.md create mode 100644 BMW-Dynatrace-config/CD_am-cesim/conditional-naming-processgroup/conditional-naming-processgroup.yaml create mode 100644 BMW-Dynatrace-config/CD_am-cesim/conditional-naming-processgroup/template.json create mode 100644 BMW-Dynatrace-config/CD_am-cesim/conditional-naming-service/README.md create mode 100644 BMW-Dynatrace-config/CD_am-cesim/conditional-naming-service/conditional-naming-service.yaml create mode 100644 BMW-Dynatrace-config/CD_am-cesim/conditional-naming-service/template.json create mode 100644 BMW-Dynatrace-config/CD_am-cns/conditional-naming-processgroup/README.md create mode 100644 BMW-Dynatrace-config/CD_am-cns/conditional-naming-processgroup/conditional-naming-processgroup.yaml create mode 100644 BMW-Dynatrace-config/CD_am-cns/conditional-naming-processgroup/template.json create mode 100644 BMW-Dynatrace-config/CD_am-cns/conditional-naming-service/README.md create mode 100644 BMW-Dynatrace-config/CD_am-cns/conditional-naming-service/conditional-naming-service.yaml create mode 100644 BMW-Dynatrace-config/CD_am-cns/conditional-naming-service/template.json create mode 100644 BMW-Dynatrace-config/CD_am-device/conditional-naming-processgroup/README.md create mode 100644 BMW-Dynatrace-config/CD_am-device/conditional-naming-processgroup/conditional-naming-processgroup.yaml create mode 100644 BMW-Dynatrace-config/CD_am-device/conditional-naming-processgroup/template.json create mode 100644 BMW-Dynatrace-config/CD_am-device/conditional-naming-service/README.md create mode 100644 BMW-Dynatrace-config/CD_am-device/conditional-naming-service/conditional-naming-service.yaml create mode 100644 BMW-Dynatrace-config/CD_am-device/conditional-naming-service/template.json create mode 100644 BMW-Dynatrace-config/CD_am-ecs/conditional-naming-processgroup/README.md create mode 100644 BMW-Dynatrace-config/CD_am-ecs/conditional-naming-processgroup/conditional-naming-processgroup.yaml create mode 100644 BMW-Dynatrace-config/CD_am-ecs/conditional-naming-processgroup/template.json create mode 100644 BMW-Dynatrace-config/CD_am-ecs/conditional-naming-service/README.md create mode 100644 BMW-Dynatrace-config/CD_am-ecs/conditional-naming-service/conditional-naming-service.yaml create mode 100644 BMW-Dynatrace-config/CD_am-ecs/conditional-naming-service/template.json create mode 100644 BMW-Dynatrace-config/CD_am-egim/conditional-naming-processgroup/README.md create mode 100644 BMW-Dynatrace-config/CD_am-egim/conditional-naming-processgroup/conditional-naming-processgroup.yaml create mode 100644 BMW-Dynatrace-config/CD_am-egim/conditional-naming-processgroup/template.json create mode 100644 BMW-Dynatrace-config/CD_am-egim/conditional-naming-service/README.md create mode 100644 BMW-Dynatrace-config/CD_am-egim/conditional-naming-service/conditional-naming-service.yaml create mode 100644 BMW-Dynatrace-config/CD_am-egim/conditional-naming-service/template.json create mode 100644 BMW-Dynatrace-config/CD_am-esim-ui/conditional-naming-processgroup/README.md create mode 100644 BMW-Dynatrace-config/CD_am-esim-ui/conditional-naming-processgroup/conditional-naming-processgroup.yaml create mode 100644 BMW-Dynatrace-config/CD_am-esim-ui/conditional-naming-processgroup/template.json create mode 100644 BMW-Dynatrace-config/CD_am-esim-ui/conditional-naming-service/README.md create mode 100644 BMW-Dynatrace-config/CD_am-esim-ui/conditional-naming-service/conditional-naming-service.yaml create mode 100644 BMW-Dynatrace-config/CD_am-esim-ui/conditional-naming-service/template.json create mode 100644 BMW-Dynatrace-config/CD_am-lmcs/conditional-naming-processgroup/README.md create mode 100644 BMW-Dynatrace-config/CD_am-lmcs/conditional-naming-processgroup/conditional-naming-processgroup.yaml create mode 100644 BMW-Dynatrace-config/CD_am-lmcs/conditional-naming-processgroup/template.json create mode 100644 BMW-Dynatrace-config/CD_am-lmcs/conditional-naming-service/README.md create mode 100644 BMW-Dynatrace-config/CD_am-lmcs/conditional-naming-service/conditional-naming-service.yaml create mode 100644 BMW-Dynatrace-config/CD_am-lmcs/conditional-naming-service/template.json create mode 100644 BMW-Dynatrace-config/CD_am-mno-manager/conditional-naming-processgroup/README.md create mode 100644 BMW-Dynatrace-config/CD_am-mno-manager/conditional-naming-processgroup/conditional-naming-processgroup.yaml create mode 100644 BMW-Dynatrace-config/CD_am-mno-manager/conditional-naming-processgroup/template.json create mode 100644 BMW-Dynatrace-config/CD_am-mno-manager/conditional-naming-service/README.md create mode 100644 BMW-Dynatrace-config/CD_am-mno-manager/conditional-naming-service/conditional-naming-service.yaml create mode 100644 BMW-Dynatrace-config/CD_am-mno-manager/conditional-naming-service/template.json create mode 100644 BMW-Dynatrace-config/CD_am-proxy/conditional-naming-processgroup/README.md create mode 100644 BMW-Dynatrace-config/CD_am-proxy/conditional-naming-processgroup/conditional-naming-processgroup.yaml create mode 100644 BMW-Dynatrace-config/CD_am-proxy/conditional-naming-processgroup/template.json create mode 100644 BMW-Dynatrace-config/CD_am-proxy/conditional-naming-service/README.md create mode 100644 BMW-Dynatrace-config/CD_am-proxy/conditional-naming-service/conditional-naming-service.yaml create mode 100644 BMW-Dynatrace-config/CD_am-proxy/conditional-naming-service/template.json create mode 100644 BMW-Dynatrace-config/CD_am-store/conditional-naming-processgroup/README.md create mode 100644 BMW-Dynatrace-config/CD_am-store/conditional-naming-processgroup/conditional-naming-processgroup.yaml create mode 100644 BMW-Dynatrace-config/CD_am-store/conditional-naming-processgroup/template.json create mode 100644 BMW-Dynatrace-config/CD_am-store/conditional-naming-service/README.md create mode 100644 BMW-Dynatrace-config/CD_am-store/conditional-naming-service/conditional-naming-service.yaml create mode 100644 BMW-Dynatrace-config/CD_am-store/conditional-naming-service/template.json create mode 100644 BMW-Dynatrace-config/CD_am-svms/conditional-naming-processgroup/README.md create mode 100644 BMW-Dynatrace-config/CD_am-svms/conditional-naming-processgroup/conditional-naming-processgroup.yaml create mode 100644 BMW-Dynatrace-config/CD_am-svms/conditional-naming-processgroup/template.json create mode 100644 BMW-Dynatrace-config/CD_am-svms/conditional-naming-service/README.md create mode 100644 BMW-Dynatrace-config/CD_am-svms/conditional-naming-service/conditional-naming-service.yaml create mode 100644 BMW-Dynatrace-config/CD_am-svms/conditional-naming-service/template.json create mode 100644 BMW-Dynatrace-config/CD_am-ui/conditional-naming-processgroup/README.md create mode 100644 BMW-Dynatrace-config/CD_am-ui/conditional-naming-processgroup/conditional-naming-processgroup.yaml create mode 100644 BMW-Dynatrace-config/CD_am-ui/conditional-naming-processgroup/template.json create mode 100644 BMW-Dynatrace-config/CD_am-ui/conditional-naming-service/README.md create mode 100644 BMW-Dynatrace-config/CD_am-ui/conditional-naming-service/conditional-naming-service.yaml create mode 100644 BMW-Dynatrace-config/CD_am-ui/conditional-naming-service/template.json create mode 100644 BMW-Dynatrace-config/CD_am-usage/conditional-naming-processgroup/README.md create mode 100644 BMW-Dynatrace-config/CD_am-usage/conditional-naming-processgroup/conditional-naming-processgroup.yaml create mode 100644 BMW-Dynatrace-config/CD_am-usage/conditional-naming-processgroup/template.json create mode 100644 BMW-Dynatrace-config/CD_am-usage/conditional-naming-service/README.md create mode 100644 BMW-Dynatrace-config/CD_am-usage/conditional-naming-service/conditional-naming-service.yaml create mode 100644 BMW-Dynatrace-config/CD_am-usage/conditional-naming-service/template.json create mode 100644 BMW-Dynatrace-config/CD_am-vehicle-activation/conditional-naming-processgroup/README.md create mode 100644 BMW-Dynatrace-config/CD_am-vehicle-activation/conditional-naming-processgroup/conditional-naming-processgroup.yaml create mode 100644 BMW-Dynatrace-config/CD_am-vehicle-activation/conditional-naming-processgroup/template.json create mode 100644 BMW-Dynatrace-config/CD_am-vehicle-activation/conditional-naming-service/README.md create mode 100644 BMW-Dynatrace-config/CD_am-vehicle-activation/conditional-naming-service/conditional-naming-service.yaml create mode 100644 BMW-Dynatrace-config/CD_am-vehicle-activation/conditional-naming-service/template.json create mode 100644 BMW-Dynatrace-config/CD_am-vms/conditional-naming-processgroup/README.md create mode 100644 BMW-Dynatrace-config/CD_am-vms/conditional-naming-processgroup/conditional-naming-processgroup.yaml create mode 100644 BMW-Dynatrace-config/CD_am-vms/conditional-naming-processgroup/template.json create mode 100644 BMW-Dynatrace-config/CD_am-vms/conditional-naming-service/README.md create mode 100644 BMW-Dynatrace-config/CD_am-vms/conditional-naming-service/conditional-naming-service.yaml create mode 100644 BMW-Dynatrace-config/CD_am-vms/conditional-naming-service/template.json create mode 100644 BMW-Dynatrace-config/CD_analytics-user-data-service/conditional-naming-processgroup/README.md create mode 100644 BMW-Dynatrace-config/CD_analytics-user-data-service/conditional-naming-processgroup/conditional-naming-processgroup.yaml create mode 100644 BMW-Dynatrace-config/CD_analytics-user-data-service/conditional-naming-processgroup/template.json create mode 100644 BMW-Dynatrace-config/CD_analytics-user-data-service/conditional-naming-service/README.md create mode 100644 BMW-Dynatrace-config/CD_analytics-user-data-service/conditional-naming-service/conditional-naming-service.yaml create mode 100644 BMW-Dynatrace-config/CD_analytics-user-data-service/conditional-naming-service/template.json create mode 100644 BMW-Dynatrace-config/CD_asbc-pki-oclisc2v/conditional-naming-processgroup/README.md create mode 100644 BMW-Dynatrace-config/CD_asbc-pki-oclisc2v/conditional-naming-processgroup/conditional-naming-processgroup.yaml create mode 100644 BMW-Dynatrace-config/CD_asbc-pki-oclisc2v/conditional-naming-processgroup/template.json create mode 100644 BMW-Dynatrace-config/CD_asbc-pki-oclisc2v/conditional-naming-service/README.md create mode 100644 BMW-Dynatrace-config/CD_asbc-pki-oclisc2v/conditional-naming-service/conditional-naming-service.yaml create mode 100644 BMW-Dynatrace-config/CD_asbc-pki-oclisc2v/conditional-naming-service/template.json create mode 100644 BMW-Dynatrace-config/CD_asbc-pki-oclisocsp/conditional-naming-processgroup/README.md create mode 100644 BMW-Dynatrace-config/CD_asbc-pki-oclisocsp/conditional-naming-processgroup/conditional-naming-processgroup.yaml create mode 100644 BMW-Dynatrace-config/CD_asbc-pki-oclisocsp/conditional-naming-processgroup/template.json create mode 100644 BMW-Dynatrace-config/CD_asbc-pki-oclisocsp/conditional-naming-service/README.md create mode 100644 BMW-Dynatrace-config/CD_asbc-pki-oclisocsp/conditional-naming-service/conditional-naming-service.yaml create mode 100644 BMW-Dynatrace-config/CD_asbc-pki-oclisocsp/conditional-naming-service/template.json create mode 100644 BMW-Dynatrace-config/CD_asbc-sfa-oh/conditional-naming-processgroup/README.md create mode 100644 BMW-Dynatrace-config/CD_asbc-sfa-oh/conditional-naming-processgroup/conditional-naming-processgroup.yaml create mode 100644 BMW-Dynatrace-config/CD_asbc-sfa-oh/conditional-naming-processgroup/template.json create mode 100644 BMW-Dynatrace-config/CD_asbc-sfa-oh/conditional-naming-service/README.md create mode 100644 BMW-Dynatrace-config/CD_asbc-sfa-oh/conditional-naming-service/conditional-naming-service.yaml create mode 100644 BMW-Dynatrace-config/CD_asbc-sfa-oh/conditional-naming-service/template.json create mode 100644 BMW-Dynatrace-config/CD_asbc-sts/conditional-naming-processgroup/README.md create mode 100644 BMW-Dynatrace-config/CD_asbc-sts/conditional-naming-processgroup/conditional-naming-processgroup.yaml create mode 100644 BMW-Dynatrace-config/CD_asbc-sts/conditional-naming-processgroup/template.json create mode 100644 BMW-Dynatrace-config/CD_asbc-sts/conditional-naming-service/README.md create mode 100644 BMW-Dynatrace-config/CD_asbc-sts/conditional-naming-service/conditional-naming-service.yaml create mode 100644 BMW-Dynatrace-config/CD_asbc-sts/conditional-naming-service/template.json create mode 100644 BMW-Dynatrace-config/CD_asbctvp/conditional-naming-processgroup/README.md create mode 100644 BMW-Dynatrace-config/CD_asbctvp/conditional-naming-processgroup/conditional-naming-processgroup.yaml create mode 100644 BMW-Dynatrace-config/CD_asbctvp/conditional-naming-processgroup/template.json create mode 100644 BMW-Dynatrace-config/CD_asbctvp/conditional-naming-service/README.md create mode 100644 BMW-Dynatrace-config/CD_asbctvp/conditional-naming-service/conditional-naming-service.yaml create mode 100644 BMW-Dynatrace-config/CD_asbctvp/conditional-naming-service/template.json create mode 100644 BMW-Dynatrace-config/CD_avs-client-service/conditional-naming-processgroup/README.md create mode 100644 BMW-Dynatrace-config/CD_avs-client-service/conditional-naming-processgroup/conditional-naming-processgroup.yaml create mode 100644 BMW-Dynatrace-config/CD_avs-client-service/conditional-naming-processgroup/template.json create mode 100644 BMW-Dynatrace-config/CD_avs-client-service/conditional-naming-service/README.md create mode 100644 BMW-Dynatrace-config/CD_avs-client-service/conditional-naming-service/conditional-naming-service.yaml create mode 100644 BMW-Dynatrace-config/CD_avs-client-service/conditional-naming-service/template.json create mode 100644 BMW-Dynatrace-config/CD_avs-proxy-composite-service/conditional-naming-processgroup/README.md create mode 100644 BMW-Dynatrace-config/CD_avs-proxy-composite-service/conditional-naming-processgroup/conditional-naming-processgroup.yaml create mode 100644 BMW-Dynatrace-config/CD_avs-proxy-composite-service/conditional-naming-processgroup/template.json create mode 100644 BMW-Dynatrace-config/CD_avs-proxy-composite-service/conditional-naming-service/README.md create mode 100644 BMW-Dynatrace-config/CD_avs-proxy-composite-service/conditional-naming-service/conditional-naming-service.yaml create mode 100644 BMW-Dynatrace-config/CD_avs-proxy-composite-service/conditional-naming-service/template.json create mode 100644 BMW-Dynatrace-config/CD_b2v-com-be/conditional-naming-processgroup/README.md create mode 100644 BMW-Dynatrace-config/CD_b2v-com-be/conditional-naming-processgroup/conditional-naming-processgroup.yaml create mode 100644 BMW-Dynatrace-config/CD_b2v-com-be/conditional-naming-processgroup/template.json create mode 100644 BMW-Dynatrace-config/CD_b2v-com-be/conditional-naming-service/README.md create mode 100644 BMW-Dynatrace-config/CD_b2v-com-be/conditional-naming-service/conditional-naming-service.yaml create mode 100644 BMW-Dynatrace-config/CD_b2v-com-be/conditional-naming-service/template.json create mode 100644 BMW-Dynatrace-config/CD_b2v-com-echo/conditional-naming-processgroup/README.md create mode 100644 BMW-Dynatrace-config/CD_b2v-com-echo/conditional-naming-processgroup/conditional-naming-processgroup.yaml create mode 100644 BMW-Dynatrace-config/CD_b2v-com-echo/conditional-naming-processgroup/template.json create mode 100644 BMW-Dynatrace-config/CD_b2v-com-echo/conditional-naming-service/README.md create mode 100644 BMW-Dynatrace-config/CD_b2v-com-echo/conditional-naming-service/conditional-naming-service.yaml create mode 100644 BMW-Dynatrace-config/CD_b2v-com-echo/conditional-naming-service/template.json create mode 100644 BMW-Dynatrace-config/CD_b2v-com-fe/conditional-naming-processgroup/README.md create mode 100644 BMW-Dynatrace-config/CD_b2v-com-fe/conditional-naming-processgroup/conditional-naming-processgroup.yaml create mode 100644 BMW-Dynatrace-config/CD_b2v-com-fe/conditional-naming-processgroup/template.json create mode 100644 BMW-Dynatrace-config/CD_b2v-com-fe/conditional-naming-service/README.md create mode 100644 BMW-Dynatrace-config/CD_b2v-com-fe/conditional-naming-service/conditional-naming-service.yaml create mode 100644 BMW-Dynatrace-config/CD_b2v-com-fe/conditional-naming-service/template.json create mode 100644 BMW-Dynatrace-config/CD_b2v-com-gcdm-client/conditional-naming-processgroup/README.md create mode 100644 BMW-Dynatrace-config/CD_b2v-com-gcdm-client/conditional-naming-processgroup/conditional-naming-processgroup.yaml create mode 100644 BMW-Dynatrace-config/CD_b2v-com-gcdm-client/conditional-naming-processgroup/template.json create mode 100644 BMW-Dynatrace-config/CD_b2v-com-gcdm-client/conditional-naming-service/README.md create mode 100644 BMW-Dynatrace-config/CD_b2v-com-gcdm-client/conditional-naming-service/conditional-naming-service.yaml create mode 100644 BMW-Dynatrace-config/CD_b2v-com-gcdm-client/conditional-naming-service/template.json create mode 100644 BMW-Dynatrace-config/CD_b2v-com-hello/conditional-naming-processgroup/README.md create mode 100644 BMW-Dynatrace-config/CD_b2v-com-hello/conditional-naming-processgroup/conditional-naming-processgroup.yaml create mode 100644 BMW-Dynatrace-config/CD_b2v-com-hello/conditional-naming-processgroup/template.json create mode 100644 BMW-Dynatrace-config/CD_b2v-com-hello/conditional-naming-service/README.md create mode 100644 BMW-Dynatrace-config/CD_b2v-com-hello/conditional-naming-service/conditional-naming-service.yaml create mode 100644 BMW-Dynatrace-config/CD_b2v-com-hello/conditional-naming-service/template.json create mode 100644 BMW-Dynatrace-config/CD_b2v-nots/conditional-naming-processgroup/README.md create mode 100644 BMW-Dynatrace-config/CD_b2v-nots/conditional-naming-processgroup/conditional-naming-processgroup.yaml create mode 100644 BMW-Dynatrace-config/CD_b2v-nots/conditional-naming-processgroup/template.json create mode 100644 BMW-Dynatrace-config/CD_b2v-nots/conditional-naming-service/README.md create mode 100644 BMW-Dynatrace-config/CD_b2v-nots/conditional-naming-service/conditional-naming-service.yaml create mode 100644 BMW-Dynatrace-config/CD_b2v-nots/conditional-naming-service/template.json create mode 100644 BMW-Dynatrace-config/CD_b2v-sms-statistics/conditional-naming-processgroup/README.md create mode 100644 BMW-Dynatrace-config/CD_b2v-sms-statistics/conditional-naming-processgroup/conditional-naming-processgroup.yaml create mode 100644 BMW-Dynatrace-config/CD_b2v-sms-statistics/conditional-naming-processgroup/template.json create mode 100644 BMW-Dynatrace-config/CD_b2v-sms-statistics/conditional-naming-service/README.md create mode 100644 BMW-Dynatrace-config/CD_b2v-sms-statistics/conditional-naming-service/conditional-naming-service.yaml create mode 100644 BMW-Dynatrace-config/CD_b2v-sms-statistics/conditional-naming-service/template.json create mode 100644 BMW-Dynatrace-config/CD_bmw-points-push-notifications-service/conditional-naming-processgroup/README.md create mode 100644 BMW-Dynatrace-config/CD_bmw-points-push-notifications-service/conditional-naming-processgroup/conditional-naming-processgroup.yaml create mode 100644 BMW-Dynatrace-config/CD_bmw-points-push-notifications-service/conditional-naming-processgroup/template.json create mode 100644 BMW-Dynatrace-config/CD_bmw-points-push-notifications-service/conditional-naming-service/README.md create mode 100644 BMW-Dynatrace-config/CD_bmw-points-push-notifications-service/conditional-naming-service/conditional-naming-service.yaml create mode 100644 BMW-Dynatrace-config/CD_bmw-points-push-notifications-service/conditional-naming-service/template.json create mode 100644 BMW-Dynatrace-config/CD_bsi-service/conditional-naming-processgroup/README.md create mode 100644 BMW-Dynatrace-config/CD_bsi-service/conditional-naming-processgroup/conditional-naming-processgroup.yaml create mode 100644 BMW-Dynatrace-config/CD_bsi-service/conditional-naming-processgroup/template.json create mode 100644 BMW-Dynatrace-config/CD_bsi-service/conditional-naming-service/README.md create mode 100644 BMW-Dynatrace-config/CD_bsi-service/conditional-naming-service/conditional-naming-service.yaml create mode 100644 BMW-Dynatrace-config/CD_bsi-service/conditional-naming-service/template.json create mode 100644 BMW-Dynatrace-config/CD_cac/conditional-naming-processgroup/README.md create mode 100644 BMW-Dynatrace-config/CD_cac/conditional-naming-processgroup/conditional-naming-processgroup.yaml create mode 100644 BMW-Dynatrace-config/CD_cac/conditional-naming-processgroup/template.json create mode 100644 BMW-Dynatrace-config/CD_cac/conditional-naming-service/README.md create mode 100644 BMW-Dynatrace-config/CD_cac/conditional-naming-service/conditional-naming-service.yaml create mode 100644 BMW-Dynatrace-config/CD_cac/conditional-naming-service/template.json create mode 100644 BMW-Dynatrace-config/CD_casa-event-processor/conditional-naming-processgroup/README.md create mode 100644 BMW-Dynatrace-config/CD_casa-event-processor/conditional-naming-processgroup/conditional-naming-processgroup.yaml create mode 100644 BMW-Dynatrace-config/CD_casa-event-processor/conditional-naming-processgroup/template.json create mode 100644 BMW-Dynatrace-config/CD_casa-event-processor/conditional-naming-service/README.md create mode 100644 BMW-Dynatrace-config/CD_casa-event-processor/conditional-naming-service/conditional-naming-service.yaml create mode 100644 BMW-Dynatrace-config/CD_casa-event-processor/conditional-naming-service/template.json create mode 100644 BMW-Dynatrace-config/CD_cdc/conditional-naming-processgroup/README.md create mode 100644 BMW-Dynatrace-config/CD_cdc/conditional-naming-processgroup/conditional-naming-processgroup.yaml create mode 100644 BMW-Dynatrace-config/CD_cdc/conditional-naming-processgroup/template.json create mode 100644 BMW-Dynatrace-config/CD_cdc/conditional-naming-service/README.md create mode 100644 BMW-Dynatrace-config/CD_cdc/conditional-naming-service/conditional-naming-service.yaml create mode 100644 BMW-Dynatrace-config/CD_cdc/conditional-naming-service/template.json create mode 100644 BMW-Dynatrace-config/CD_cdcicd-jenkins/conditional-naming-processgroup/README.md create mode 100644 BMW-Dynatrace-config/CD_cdcicd-jenkins/conditional-naming-processgroup/conditional-naming-processgroup.yaml create mode 100644 BMW-Dynatrace-config/CD_cdcicd-jenkins/conditional-naming-processgroup/template.json create mode 100644 BMW-Dynatrace-config/CD_cdcicd-jenkins/conditional-naming-service/README.md create mode 100644 BMW-Dynatrace-config/CD_cdcicd-jenkins/conditional-naming-service/conditional-naming-service.yaml create mode 100644 BMW-Dynatrace-config/CD_cdcicd-jenkins/conditional-naming-service/template.json create mode 100644 BMW-Dynatrace-config/CD_chargenow-enabler-service/conditional-naming-processgroup/README.md create mode 100644 BMW-Dynatrace-config/CD_chargenow-enabler-service/conditional-naming-processgroup/conditional-naming-processgroup.yaml create mode 100644 BMW-Dynatrace-config/CD_chargenow-enabler-service/conditional-naming-processgroup/template.json create mode 100644 BMW-Dynatrace-config/CD_chargenow-enabler-service/conditional-naming-service/README.md create mode 100644 BMW-Dynatrace-config/CD_chargenow-enabler-service/conditional-naming-service/conditional-naming-service.yaml create mode 100644 BMW-Dynatrace-config/CD_chargenow-enabler-service/conditional-naming-service/template.json create mode 100644 BMW-Dynatrace-config/CD_charging-data-privacy-composite/conditional-naming-processgroup/README.md create mode 100644 BMW-Dynatrace-config/CD_charging-data-privacy-composite/conditional-naming-processgroup/conditional-naming-processgroup.yaml create mode 100644 BMW-Dynatrace-config/CD_charging-data-privacy-composite/conditional-naming-processgroup/template.json create mode 100644 BMW-Dynatrace-config/CD_charging-data-privacy-composite/conditional-naming-service/README.md create mode 100644 BMW-Dynatrace-config/CD_charging-data-privacy-composite/conditional-naming-service/conditional-naming-service.yaml create mode 100644 BMW-Dynatrace-config/CD_charging-data-privacy-composite/conditional-naming-service/template.json create mode 100644 BMW-Dynatrace-config/CD_charging-data-privacy/conditional-naming-processgroup/README.md create mode 100644 BMW-Dynatrace-config/CD_charging-data-privacy/conditional-naming-processgroup/conditional-naming-processgroup.yaml create mode 100644 BMW-Dynatrace-config/CD_charging-data-privacy/conditional-naming-processgroup/template.json create mode 100644 BMW-Dynatrace-config/CD_charging-data-privacy/conditional-naming-service/README.md create mode 100644 BMW-Dynatrace-config/CD_charging-data-privacy/conditional-naming-service/conditional-naming-service.yaml create mode 100644 BMW-Dynatrace-config/CD_charging-data-privacy/conditional-naming-service/template.json create mode 100644 BMW-Dynatrace-config/CD_charging-events-push-notification-service/conditional-naming-processgroup/README.md create mode 100644 BMW-Dynatrace-config/CD_charging-events-push-notification-service/conditional-naming-processgroup/conditional-naming-processgroup.yaml create mode 100644 BMW-Dynatrace-config/CD_charging-events-push-notification-service/conditional-naming-processgroup/template.json create mode 100644 BMW-Dynatrace-config/CD_charging-events-push-notification-service/conditional-naming-service/README.md create mode 100644 BMW-Dynatrace-config/CD_charging-events-push-notification-service/conditional-naming-service/conditional-naming-service.yaml create mode 100644 BMW-Dynatrace-config/CD_charging-events-push-notification-service/conditional-naming-service/template.json create mode 100644 BMW-Dynatrace-config/CD_charging-events-service/conditional-naming-processgroup/README.md create mode 100644 BMW-Dynatrace-config/CD_charging-events-service/conditional-naming-processgroup/conditional-naming-processgroup.yaml create mode 100644 BMW-Dynatrace-config/CD_charging-events-service/conditional-naming-processgroup/template.json create mode 100644 BMW-Dynatrace-config/CD_charging-events-service/conditional-naming-service/README.md create mode 100644 BMW-Dynatrace-config/CD_charging-events-service/conditional-naming-service/conditional-naming-service.yaml create mode 100644 BMW-Dynatrace-config/CD_charging-events-service/conditional-naming-service/template.json create mode 100644 BMW-Dynatrace-config/CD_charging-history-gdpr-proxy-service/conditional-naming-processgroup/README.md create mode 100644 BMW-Dynatrace-config/CD_charging-history-gdpr-proxy-service/conditional-naming-processgroup/conditional-naming-processgroup.yaml create mode 100644 BMW-Dynatrace-config/CD_charging-history-gdpr-proxy-service/conditional-naming-processgroup/template.json create mode 100644 BMW-Dynatrace-config/CD_charging-history-gdpr-proxy-service/conditional-naming-service/README.md create mode 100644 BMW-Dynatrace-config/CD_charging-history-gdpr-proxy-service/conditional-naming-service/conditional-naming-service.yaml create mode 100644 BMW-Dynatrace-config/CD_charging-history-gdpr-proxy-service/conditional-naming-service/template.json create mode 100644 BMW-Dynatrace-config/CD_charging-plan-composite-service/conditional-naming-processgroup/README.md create mode 100644 BMW-Dynatrace-config/CD_charging-plan-composite-service/conditional-naming-processgroup/conditional-naming-processgroup.yaml create mode 100644 BMW-Dynatrace-config/CD_charging-plan-composite-service/conditional-naming-processgroup/template.json create mode 100644 BMW-Dynatrace-config/CD_charging-plan-composite-service/conditional-naming-service/README.md create mode 100644 BMW-Dynatrace-config/CD_charging-plan-composite-service/conditional-naming-service/conditional-naming-service.yaml create mode 100644 BMW-Dynatrace-config/CD_charging-plan-composite-service/conditional-naming-service/template.json create mode 100644 BMW-Dynatrace-config/CD_charging-push-notifications-service/conditional-naming-processgroup/README.md create mode 100644 BMW-Dynatrace-config/CD_charging-push-notifications-service/conditional-naming-processgroup/conditional-naming-processgroup.yaml create mode 100644 BMW-Dynatrace-config/CD_charging-push-notifications-service/conditional-naming-processgroup/template.json create mode 100644 BMW-Dynatrace-config/CD_charging-push-notifications-service/conditional-naming-service/README.md create mode 100644 BMW-Dynatrace-config/CD_charging-push-notifications-service/conditional-naming-service/conditional-naming-service.yaml create mode 100644 BMW-Dynatrace-config/CD_charging-push-notifications-service/conditional-naming-service/template.json create mode 100644 BMW-Dynatrace-config/CD_charging-remote-commands-composite-service/conditional-naming-processgroup/README.md create mode 100644 BMW-Dynatrace-config/CD_charging-remote-commands-composite-service/conditional-naming-processgroup/conditional-naming-processgroup.yaml create mode 100644 BMW-Dynatrace-config/CD_charging-remote-commands-composite-service/conditional-naming-processgroup/template.json create mode 100644 BMW-Dynatrace-config/CD_charging-remote-commands-composite-service/conditional-naming-service/README.md create mode 100644 BMW-Dynatrace-config/CD_charging-remote-commands-composite-service/conditional-naming-service/conditional-naming-service.yaml create mode 100644 BMW-Dynatrace-config/CD_charging-remote-commands-composite-service/conditional-naming-service/template.json create mode 100644 BMW-Dynatrace-config/CD_charging-sessions-service/conditional-naming-processgroup/README.md create mode 100644 BMW-Dynatrace-config/CD_charging-sessions-service/conditional-naming-processgroup/conditional-naming-processgroup.yaml create mode 100644 BMW-Dynatrace-config/CD_charging-sessions-service/conditional-naming-processgroup/template.json create mode 100644 BMW-Dynatrace-config/CD_charging-sessions-service/conditional-naming-service/README.md create mode 100644 BMW-Dynatrace-config/CD_charging-sessions-service/conditional-naming-service/conditional-naming-service.yaml create mode 100644 BMW-Dynatrace-config/CD_charging-sessions-service/conditional-naming-service/template.json create mode 100644 BMW-Dynatrace-config/CD_charging-stations-service/conditional-naming-processgroup/README.md create mode 100644 BMW-Dynatrace-config/CD_charging-stations-service/conditional-naming-processgroup/conditional-naming-processgroup.yaml create mode 100644 BMW-Dynatrace-config/CD_charging-stations-service/conditional-naming-processgroup/template.json create mode 100644 BMW-Dynatrace-config/CD_charging-stations-service/conditional-naming-service/README.md create mode 100644 BMW-Dynatrace-config/CD_charging-stations-service/conditional-naming-service/conditional-naming-service.yaml create mode 100644 BMW-Dynatrace-config/CD_charging-stations-service/conditional-naming-service/template.json create mode 100644 BMW-Dynatrace-config/CD_client-agent-telemetry-processor/conditional-naming-processgroup/README.md create mode 100644 BMW-Dynatrace-config/CD_client-agent-telemetry-processor/conditional-naming-processgroup/conditional-naming-processgroup.yaml create mode 100644 BMW-Dynatrace-config/CD_client-agent-telemetry-processor/conditional-naming-processgroup/template.json create mode 100644 BMW-Dynatrace-config/CD_client-agent-telemetry-processor/conditional-naming-service/README.md create mode 100644 BMW-Dynatrace-config/CD_client-agent-telemetry-processor/conditional-naming-service/conditional-naming-service.yaml create mode 100644 BMW-Dynatrace-config/CD_client-agent-telemetry-processor/conditional-naming-service/template.json create mode 100644 BMW-Dynatrace-config/CD_client-vehicle-telemetry-processor/conditional-naming-processgroup/README.md create mode 100644 BMW-Dynatrace-config/CD_client-vehicle-telemetry-processor/conditional-naming-processgroup/conditional-naming-processgroup.yaml create mode 100644 BMW-Dynatrace-config/CD_client-vehicle-telemetry-processor/conditional-naming-processgroup/template.json create mode 100644 BMW-Dynatrace-config/CD_client-vehicle-telemetry-processor/conditional-naming-service/README.md create mode 100644 BMW-Dynatrace-config/CD_client-vehicle-telemetry-processor/conditional-naming-service/conditional-naming-service.yaml create mode 100644 BMW-Dynatrace-config/CD_client-vehicle-telemetry-processor/conditional-naming-service/template.json create mode 100644 BMW-Dynatrace-config/CD_cm/conditional-naming-processgroup/README.md create mode 100644 BMW-Dynatrace-config/CD_cm/conditional-naming-processgroup/conditional-naming-processgroup.yaml create mode 100644 BMW-Dynatrace-config/CD_cm/conditional-naming-processgroup/template.json create mode 100644 BMW-Dynatrace-config/CD_cm/conditional-naming-service/README.md create mode 100644 BMW-Dynatrace-config/CD_cm/conditional-naming-service/conditional-naming-service.yaml create mode 100644 BMW-Dynatrace-config/CD_cm/conditional-naming-service/template.json create mode 100644 BMW-Dynatrace-config/CD_commute-notification-service/conditional-naming-processgroup/README.md create mode 100644 BMW-Dynatrace-config/CD_commute-notification-service/conditional-naming-processgroup/conditional-naming-processgroup.yaml create mode 100644 BMW-Dynatrace-config/CD_commute-notification-service/conditional-naming-processgroup/template.json create mode 100644 BMW-Dynatrace-config/CD_commute-notification-service/conditional-naming-service/README.md create mode 100644 BMW-Dynatrace-config/CD_commute-notification-service/conditional-naming-service/conditional-naming-service.yaml create mode 100644 BMW-Dynatrace-config/CD_commute-notification-service/conditional-naming-service/template.json create mode 100644 BMW-Dynatrace-config/CD_commute-service/conditional-naming-processgroup/README.md create mode 100644 BMW-Dynatrace-config/CD_commute-service/conditional-naming-processgroup/conditional-naming-processgroup.yaml create mode 100644 BMW-Dynatrace-config/CD_commute-service/conditional-naming-processgroup/template.json create mode 100644 BMW-Dynatrace-config/CD_commute-service/conditional-naming-service/README.md create mode 100644 BMW-Dynatrace-config/CD_commute-service/conditional-naming-service/conditional-naming-service.yaml create mode 100644 BMW-Dynatrace-config/CD_commute-service/conditional-naming-service/template.json create mode 100644 BMW-Dynatrace-config/CD_connected-oauth-service-apim/conditional-naming-processgroup/README.md create mode 100644 BMW-Dynatrace-config/CD_connected-oauth-service-apim/conditional-naming-processgroup/conditional-naming-processgroup.yaml create mode 100644 BMW-Dynatrace-config/CD_connected-oauth-service-apim/conditional-naming-processgroup/template.json create mode 100644 BMW-Dynatrace-config/CD_connected-oauth-service-apim/conditional-naming-service/README.md create mode 100644 BMW-Dynatrace-config/CD_connected-oauth-service-apim/conditional-naming-service/conditional-naming-service.yaml create mode 100644 BMW-Dynatrace-config/CD_connected-oauth-service-apim/conditional-naming-service/template.json create mode 100644 BMW-Dynatrace-config/CD_connected-oauth-service/conditional-naming-processgroup/README.md create mode 100644 BMW-Dynatrace-config/CD_connected-oauth-service/conditional-naming-processgroup/conditional-naming-processgroup.yaml create mode 100644 BMW-Dynatrace-config/CD_connected-oauth-service/conditional-naming-processgroup/template.json create mode 100644 BMW-Dynatrace-config/CD_connected-oauth-service/conditional-naming-service/README.md create mode 100644 BMW-Dynatrace-config/CD_connected-oauth-service/conditional-naming-service/conditional-naming-service.yaml create mode 100644 BMW-Dynatrace-config/CD_connected-oauth-service/conditional-naming-service/template.json create mode 100644 BMW-Dynatrace-config/CD_connected-onboard-composite-service/conditional-naming-processgroup/README.md create mode 100644 BMW-Dynatrace-config/CD_connected-onboard-composite-service/conditional-naming-processgroup/conditional-naming-processgroup.yaml create mode 100644 BMW-Dynatrace-config/CD_connected-onboard-composite-service/conditional-naming-processgroup/template.json create mode 100644 BMW-Dynatrace-config/CD_connected-onboard-composite-service/conditional-naming-service/README.md create mode 100644 BMW-Dynatrace-config/CD_connected-onboard-composite-service/conditional-naming-service/conditional-naming-service.yaml create mode 100644 BMW-Dynatrace-config/CD_connected-onboard-composite-service/conditional-naming-service/template.json create mode 100644 BMW-Dynatrace-config/CD_csu/conditional-naming-processgroup/README.md create mode 100644 BMW-Dynatrace-config/CD_csu/conditional-naming-processgroup/conditional-naming-processgroup.yaml create mode 100644 BMW-Dynatrace-config/CD_csu/conditional-naming-processgroup/template.json create mode 100644 BMW-Dynatrace-config/CD_csu/conditional-naming-service/README.md create mode 100644 BMW-Dynatrace-config/CD_csu/conditional-naming-service/conditional-naming-service.yaml create mode 100644 BMW-Dynatrace-config/CD_csu/conditional-naming-service/template.json create mode 100644 BMW-Dynatrace-config/CD_ctns-event-origin/conditional-naming-processgroup/README.md create mode 100644 BMW-Dynatrace-config/CD_ctns-event-origin/conditional-naming-processgroup/conditional-naming-processgroup.yaml create mode 100644 BMW-Dynatrace-config/CD_ctns-event-origin/conditional-naming-processgroup/template.json create mode 100644 BMW-Dynatrace-config/CD_ctns-event-origin/conditional-naming-service/README.md create mode 100644 BMW-Dynatrace-config/CD_ctns-event-origin/conditional-naming-service/conditional-naming-service.yaml create mode 100644 BMW-Dynatrace-config/CD_ctns-event-origin/conditional-naming-service/template.json create mode 100644 BMW-Dynatrace-config/CD_ctns-marketing-api/conditional-naming-processgroup/README.md create mode 100644 BMW-Dynatrace-config/CD_ctns-marketing-api/conditional-naming-processgroup/conditional-naming-processgroup.yaml create mode 100644 BMW-Dynatrace-config/CD_ctns-marketing-api/conditional-naming-processgroup/template.json create mode 100644 BMW-Dynatrace-config/CD_ctns-marketing-api/conditional-naming-service/README.md create mode 100644 BMW-Dynatrace-config/CD_ctns-marketing-api/conditional-naming-service/conditional-naming-service.yaml create mode 100644 BMW-Dynatrace-config/CD_ctns-marketing-api/conditional-naming-service/template.json create mode 100644 BMW-Dynatrace-config/CD_ctns-vehicle-api/conditional-naming-processgroup/README.md create mode 100644 BMW-Dynatrace-config/CD_ctns-vehicle-api/conditional-naming-processgroup/conditional-naming-processgroup.yaml create mode 100644 BMW-Dynatrace-config/CD_ctns-vehicle-api/conditional-naming-processgroup/template.json create mode 100644 BMW-Dynatrace-config/CD_ctns-vehicle-api/conditional-naming-service/README.md create mode 100644 BMW-Dynatrace-config/CD_ctns-vehicle-api/conditional-naming-service/conditional-naming-service.yaml create mode 100644 BMW-Dynatrace-config/CD_ctns-vehicle-api/conditional-naming-service/template.json create mode 100644 BMW-Dynatrace-config/CD_current-driver-service/conditional-naming-processgroup/README.md create mode 100644 BMW-Dynatrace-config/CD_current-driver-service/conditional-naming-processgroup/conditional-naming-processgroup.yaml create mode 100644 BMW-Dynatrace-config/CD_current-driver-service/conditional-naming-processgroup/template.json create mode 100644 BMW-Dynatrace-config/CD_current-driver-service/conditional-naming-service/README.md create mode 100644 BMW-Dynatrace-config/CD_current-driver-service/conditional-naming-service/conditional-naming-service.yaml create mode 100644 BMW-Dynatrace-config/CD_current-driver-service/conditional-naming-service/template.json create mode 100644 BMW-Dynatrace-config/CD_data-deletion-processor/conditional-naming-processgroup/README.md create mode 100644 BMW-Dynatrace-config/CD_data-deletion-processor/conditional-naming-processgroup/conditional-naming-processgroup.yaml create mode 100644 BMW-Dynatrace-config/CD_data-deletion-processor/conditional-naming-processgroup/template.json create mode 100644 BMW-Dynatrace-config/CD_data-deletion-processor/conditional-naming-service/README.md create mode 100644 BMW-Dynatrace-config/CD_data-deletion-processor/conditional-naming-service/conditional-naming-service.yaml create mode 100644 BMW-Dynatrace-config/CD_data-deletion-processor/conditional-naming-service/template.json create mode 100644 BMW-Dynatrace-config/CD_dealer-comms-provider-service/conditional-naming-processgroup/README.md create mode 100644 BMW-Dynatrace-config/CD_dealer-comms-provider-service/conditional-naming-processgroup/conditional-naming-processgroup.yaml create mode 100644 BMW-Dynatrace-config/CD_dealer-comms-provider-service/conditional-naming-processgroup/template.json create mode 100644 BMW-Dynatrace-config/CD_dealer-comms-provider-service/conditional-naming-service/README.md create mode 100644 BMW-Dynatrace-config/CD_dealer-comms-provider-service/conditional-naming-service/conditional-naming-service.yaml create mode 100644 BMW-Dynatrace-config/CD_dealer-comms-provider-service/conditional-naming-service/template.json create mode 100644 BMW-Dynatrace-config/CD_dealer-data-service/conditional-naming-processgroup/README.md create mode 100644 BMW-Dynatrace-config/CD_dealer-data-service/conditional-naming-processgroup/conditional-naming-processgroup.yaml create mode 100644 BMW-Dynatrace-config/CD_dealer-data-service/conditional-naming-processgroup/template.json create mode 100644 BMW-Dynatrace-config/CD_dealer-data-service/conditional-naming-service/README.md create mode 100644 BMW-Dynatrace-config/CD_dealer-data-service/conditional-naming-service/conditional-naming-service.yaml create mode 100644 BMW-Dynatrace-config/CD_dealer-data-service/conditional-naming-service/template.json create mode 100644 BMW-Dynatrace-config/CD_dealer-payments-invoice-service/conditional-naming-processgroup/README.md create mode 100644 BMW-Dynatrace-config/CD_dealer-payments-invoice-service/conditional-naming-processgroup/conditional-naming-processgroup.yaml create mode 100644 BMW-Dynatrace-config/CD_dealer-payments-invoice-service/conditional-naming-processgroup/template.json create mode 100644 BMW-Dynatrace-config/CD_dealer-payments-invoice-service/conditional-naming-service/README.md create mode 100644 BMW-Dynatrace-config/CD_dealer-payments-invoice-service/conditional-naming-service/conditional-naming-service.yaml create mode 100644 BMW-Dynatrace-config/CD_dealer-payments-invoice-service/conditional-naming-service/template.json create mode 100644 BMW-Dynatrace-config/CD_dealer-payments-notification-service/conditional-naming-processgroup/README.md create mode 100644 BMW-Dynatrace-config/CD_dealer-payments-notification-service/conditional-naming-processgroup/conditional-naming-processgroup.yaml create mode 100644 BMW-Dynatrace-config/CD_dealer-payments-notification-service/conditional-naming-processgroup/template.json create mode 100644 BMW-Dynatrace-config/CD_dealer-payments-notification-service/conditional-naming-service/README.md create mode 100644 BMW-Dynatrace-config/CD_dealer-payments-notification-service/conditional-naming-service/conditional-naming-service.yaml create mode 100644 BMW-Dynatrace-config/CD_dealer-payments-notification-service/conditional-naming-service/template.json create mode 100644 BMW-Dynatrace-config/CD_dealer-payments-service/conditional-naming-processgroup/README.md create mode 100644 BMW-Dynatrace-config/CD_dealer-payments-service/conditional-naming-processgroup/conditional-naming-processgroup.yaml create mode 100644 BMW-Dynatrace-config/CD_dealer-payments-service/conditional-naming-processgroup/template.json create mode 100644 BMW-Dynatrace-config/CD_dealer-payments-service/conditional-naming-service/README.md create mode 100644 BMW-Dynatrace-config/CD_dealer-payments-service/conditional-naming-service/conditional-naming-service.yaml create mode 100644 BMW-Dynatrace-config/CD_dealer-payments-service/conditional-naming-service/template.json create mode 100644 BMW-Dynatrace-config/CD_dealer-search-service/conditional-naming-processgroup/README.md create mode 100644 BMW-Dynatrace-config/CD_dealer-search-service/conditional-naming-processgroup/conditional-naming-processgroup.yaml create mode 100644 BMW-Dynatrace-config/CD_dealer-search-service/conditional-naming-processgroup/template.json create mode 100644 BMW-Dynatrace-config/CD_dealer-search-service/conditional-naming-service/README.md create mode 100644 BMW-Dynatrace-config/CD_dealer-search-service/conditional-naming-service/conditional-naming-service.yaml create mode 100644 BMW-Dynatrace-config/CD_dealer-search-service/conditional-naming-service/template.json create mode 100644 BMW-Dynatrace-config/CD_dealer-services-composite-service/conditional-naming-processgroup/README.md create mode 100644 BMW-Dynatrace-config/CD_dealer-services-composite-service/conditional-naming-processgroup/conditional-naming-processgroup.yaml create mode 100644 BMW-Dynatrace-config/CD_dealer-services-composite-service/conditional-naming-processgroup/template.json create mode 100644 BMW-Dynatrace-config/CD_dealer-services-composite-service/conditional-naming-service/README.md create mode 100644 BMW-Dynatrace-config/CD_dealer-services-composite-service/conditional-naming-service/conditional-naming-service.yaml create mode 100644 BMW-Dynatrace-config/CD_dealer-services-composite-service/conditional-naming-service/template.json create mode 100644 BMW-Dynatrace-config/CD_dealercockpit/conditional-naming-processgroup/README.md create mode 100644 BMW-Dynatrace-config/CD_dealercockpit/conditional-naming-processgroup/conditional-naming-processgroup.yaml create mode 100644 BMW-Dynatrace-config/CD_dealercockpit/conditional-naming-processgroup/template.json create mode 100644 BMW-Dynatrace-config/CD_dealercockpit/conditional-naming-service/README.md create mode 100644 BMW-Dynatrace-config/CD_dealercockpit/conditional-naming-service/conditional-naming-service.yaml create mode 100644 BMW-Dynatrace-config/CD_dealercockpit/conditional-naming-service/template.json create mode 100644 BMW-Dynatrace-config/CD_delivery/conditional-naming-processgroup/README.md create mode 100644 BMW-Dynatrace-config/CD_delivery/conditional-naming-processgroup/conditional-naming-processgroup.yaml create mode 100644 BMW-Dynatrace-config/CD_delivery/conditional-naming-processgroup/template.json create mode 100644 BMW-Dynatrace-config/CD_delivery/conditional-naming-service/README.md create mode 100644 BMW-Dynatrace-config/CD_delivery/conditional-naming-service/conditional-naming-service.yaml create mode 100644 BMW-Dynatrace-config/CD_delivery/conditional-naming-service/template.json create mode 100644 BMW-Dynatrace-config/CD_destination-composite-service/conditional-naming-processgroup/README.md create mode 100644 BMW-Dynatrace-config/CD_destination-composite-service/conditional-naming-processgroup/conditional-naming-processgroup.yaml create mode 100644 BMW-Dynatrace-config/CD_destination-composite-service/conditional-naming-processgroup/template.json create mode 100644 BMW-Dynatrace-config/CD_destination-composite-service/conditional-naming-service/README.md create mode 100644 BMW-Dynatrace-config/CD_destination-composite-service/conditional-naming-service/conditional-naming-service.yaml create mode 100644 BMW-Dynatrace-config/CD_destination-composite-service/conditional-naming-service/template.json create mode 100644 BMW-Dynatrace-config/CD_digital-key-composite-service/conditional-naming-processgroup/README.md create mode 100644 BMW-Dynatrace-config/CD_digital-key-composite-service/conditional-naming-processgroup/conditional-naming-processgroup.yaml create mode 100644 BMW-Dynatrace-config/CD_digital-key-composite-service/conditional-naming-processgroup/template.json create mode 100644 BMW-Dynatrace-config/CD_digital-key-composite-service/conditional-naming-service/README.md create mode 100644 BMW-Dynatrace-config/CD_digital-key-composite-service/conditional-naming-service/conditional-naming-service.yaml create mode 100644 BMW-Dynatrace-config/CD_digital-key-composite-service/conditional-naming-service/template.json create mode 100644 BMW-Dynatrace-config/CD_discover-bmw-composite-service/conditional-naming-processgroup/README.md create mode 100644 BMW-Dynatrace-config/CD_discover-bmw-composite-service/conditional-naming-processgroup/conditional-naming-processgroup.yaml create mode 100644 BMW-Dynatrace-config/CD_discover-bmw-composite-service/conditional-naming-processgroup/template.json create mode 100644 BMW-Dynatrace-config/CD_discover-bmw-composite-service/conditional-naming-service/README.md create mode 100644 BMW-Dynatrace-config/CD_discover-bmw-composite-service/conditional-naming-service/conditional-naming-service.yaml create mode 100644 BMW-Dynatrace-config/CD_discover-bmw-composite-service/conditional-naming-service/template.json create mode 100644 BMW-Dynatrace-config/CD_dsd/conditional-naming-processgroup/README.md create mode 100644 BMW-Dynatrace-config/CD_dsd/conditional-naming-processgroup/conditional-naming-processgroup.yaml create mode 100644 BMW-Dynatrace-config/CD_dsd/conditional-naming-processgroup/template.json create mode 100644 BMW-Dynatrace-config/CD_dsd/conditional-naming-service/README.md create mode 100644 BMW-Dynatrace-config/CD_dsd/conditional-naming-service/conditional-naming-service.yaml create mode 100644 BMW-Dynatrace-config/CD_dsd/conditional-naming-service/template.json create mode 100644 BMW-Dynatrace-config/CD_eadb/conditional-naming-processgroup/README.md create mode 100644 BMW-Dynatrace-config/CD_eadb/conditional-naming-processgroup/conditional-naming-processgroup.yaml create mode 100644 BMW-Dynatrace-config/CD_eadb/conditional-naming-processgroup/template.json create mode 100644 BMW-Dynatrace-config/CD_eadb/conditional-naming-service/README.md create mode 100644 BMW-Dynatrace-config/CD_eadb/conditional-naming-service/conditional-naming-service.yaml create mode 100644 BMW-Dynatrace-config/CD_eadb/conditional-naming-service/template.json create mode 100644 BMW-Dynatrace-config/CD_ercaf/conditional-naming-processgroup/README.md create mode 100644 BMW-Dynatrace-config/CD_ercaf/conditional-naming-processgroup/conditional-naming-processgroup.yaml create mode 100644 BMW-Dynatrace-config/CD_ercaf/conditional-naming-processgroup/template.json create mode 100644 BMW-Dynatrace-config/CD_ercaf/conditional-naming-service/README.md create mode 100644 BMW-Dynatrace-config/CD_ercaf/conditional-naming-service/conditional-naming-service.yaml create mode 100644 BMW-Dynatrace-config/CD_ercaf/conditional-naming-service/template.json create mode 100644 BMW-Dynatrace-config/CD_ercr/conditional-naming-processgroup/README.md create mode 100644 BMW-Dynatrace-config/CD_ercr/conditional-naming-processgroup/conditional-naming-processgroup.yaml create mode 100644 BMW-Dynatrace-config/CD_ercr/conditional-naming-processgroup/template.json create mode 100644 BMW-Dynatrace-config/CD_ercr/conditional-naming-service/README.md create mode 100644 BMW-Dynatrace-config/CD_ercr/conditional-naming-service/conditional-naming-service.yaml create mode 100644 BMW-Dynatrace-config/CD_ercr/conditional-naming-service/template.json create mode 100644 BMW-Dynatrace-config/CD_erd/conditional-naming-processgroup/README.md create mode 100644 BMW-Dynatrace-config/CD_erd/conditional-naming-processgroup/conditional-naming-processgroup.yaml create mode 100644 BMW-Dynatrace-config/CD_erd/conditional-naming-processgroup/template.json create mode 100644 BMW-Dynatrace-config/CD_erd/conditional-naming-service/README.md create mode 100644 BMW-Dynatrace-config/CD_erd/conditional-naming-service/conditional-naming-service.yaml create mode 100644 BMW-Dynatrace-config/CD_erd/conditional-naming-service/template.json create mode 100644 BMW-Dynatrace-config/CD_esh/conditional-naming-processgroup/README.md create mode 100644 BMW-Dynatrace-config/CD_esh/conditional-naming-processgroup/conditional-naming-processgroup.yaml create mode 100644 BMW-Dynatrace-config/CD_esh/conditional-naming-processgroup/template.json create mode 100644 BMW-Dynatrace-config/CD_esh/conditional-naming-service/README.md create mode 100644 BMW-Dynatrace-config/CD_esh/conditional-naming-service/conditional-naming-service.yaml create mode 100644 BMW-Dynatrace-config/CD_esh/conditional-naming-service/template.json create mode 100644 BMW-Dynatrace-config/CD_esim-composite-service/conditional-naming-processgroup/README.md create mode 100644 BMW-Dynatrace-config/CD_esim-composite-service/conditional-naming-processgroup/conditional-naming-processgroup.yaml create mode 100644 BMW-Dynatrace-config/CD_esim-composite-service/conditional-naming-processgroup/template.json create mode 100644 BMW-Dynatrace-config/CD_esim-composite-service/conditional-naming-service/README.md create mode 100644 BMW-Dynatrace-config/CD_esim-composite-service/conditional-naming-service/conditional-naming-service.yaml create mode 100644 BMW-Dynatrace-config/CD_esim-composite-service/conditional-naming-service/template.json create mode 100644 BMW-Dynatrace-config/CD_explore-composite-service/conditional-naming-processgroup/README.md create mode 100644 BMW-Dynatrace-config/CD_explore-composite-service/conditional-naming-processgroup/conditional-naming-processgroup.yaml create mode 100644 BMW-Dynatrace-config/CD_explore-composite-service/conditional-naming-processgroup/template.json create mode 100644 BMW-Dynatrace-config/CD_explore-composite-service/conditional-naming-service/README.md create mode 100644 BMW-Dynatrace-config/CD_explore-composite-service/conditional-naming-service/conditional-naming-service.yaml create mode 100644 BMW-Dynatrace-config/CD_explore-composite-service/conditional-naming-service/template.json create mode 100644 BMW-Dynatrace-config/CD_feature-toggles-service/conditional-naming-processgroup/README.md create mode 100644 BMW-Dynatrace-config/CD_feature-toggles-service/conditional-naming-processgroup/conditional-naming-processgroup.yaml create mode 100644 BMW-Dynatrace-config/CD_feature-toggles-service/conditional-naming-processgroup/template.json create mode 100644 BMW-Dynatrace-config/CD_feature-toggles-service/conditional-naming-service/README.md create mode 100644 BMW-Dynatrace-config/CD_feature-toggles-service/conditional-naming-service/conditional-naming-service.yaml create mode 100644 BMW-Dynatrace-config/CD_feature-toggles-service/conditional-naming-service/template.json create mode 100644 BMW-Dynatrace-config/CD_fmc/conditional-naming-processgroup/README.md create mode 100644 BMW-Dynatrace-config/CD_fmc/conditional-naming-processgroup/conditional-naming-processgroup.yaml create mode 100644 BMW-Dynatrace-config/CD_fmc/conditional-naming-processgroup/template.json create mode 100644 BMW-Dynatrace-config/CD_fmc/conditional-naming-service/README.md create mode 100644 BMW-Dynatrace-config/CD_fmc/conditional-naming-service/conditional-naming-service.yaml create mode 100644 BMW-Dynatrace-config/CD_fmc/conditional-naming-service/template.json create mode 100644 BMW-Dynatrace-config/CD_fuel-search-service/conditional-naming-processgroup/README.md create mode 100644 BMW-Dynatrace-config/CD_fuel-search-service/conditional-naming-processgroup/conditional-naming-processgroup.yaml create mode 100644 BMW-Dynatrace-config/CD_fuel-search-service/conditional-naming-processgroup/template.json create mode 100644 BMW-Dynatrace-config/CD_fuel-search-service/conditional-naming-service/README.md create mode 100644 BMW-Dynatrace-config/CD_fuel-search-service/conditional-naming-service/conditional-naming-service.yaml create mode 100644 BMW-Dynatrace-config/CD_fuel-search-service/conditional-naming-service/template.json create mode 100644 BMW-Dynatrace-config/CD_hpauth/conditional-naming-processgroup/README.md create mode 100644 BMW-Dynatrace-config/CD_hpauth/conditional-naming-processgroup/conditional-naming-processgroup.yaml create mode 100644 BMW-Dynatrace-config/CD_hpauth/conditional-naming-processgroup/template.json create mode 100644 BMW-Dynatrace-config/CD_hpauth/conditional-naming-service/README.md create mode 100644 BMW-Dynatrace-config/CD_hpauth/conditional-naming-service/conditional-naming-service.yaml create mode 100644 BMW-Dynatrace-config/CD_hpauth/conditional-naming-service/template.json create mode 100644 BMW-Dynatrace-config/CD_hubtab-service/conditional-naming-processgroup/README.md create mode 100644 BMW-Dynatrace-config/CD_hubtab-service/conditional-naming-processgroup/conditional-naming-processgroup.yaml create mode 100644 BMW-Dynatrace-config/CD_hubtab-service/conditional-naming-processgroup/template.json create mode 100644 BMW-Dynatrace-config/CD_hubtab-service/conditional-naming-service/README.md create mode 100644 BMW-Dynatrace-config/CD_hubtab-service/conditional-naming-service/conditional-naming-service.yaml create mode 100644 BMW-Dynatrace-config/CD_hubtab-service/conditional-naming-service/template.json create mode 100644 BMW-Dynatrace-config/CD_id-lookup-service/conditional-naming-processgroup/README.md create mode 100644 BMW-Dynatrace-config/CD_id-lookup-service/conditional-naming-processgroup/conditional-naming-processgroup.yaml create mode 100644 BMW-Dynatrace-config/CD_id-lookup-service/conditional-naming-processgroup/template.json create mode 100644 BMW-Dynatrace-config/CD_id-lookup-service/conditional-naming-service/README.md create mode 100644 BMW-Dynatrace-config/CD_id-lookup-service/conditional-naming-service/conditional-naming-service.yaml create mode 100644 BMW-Dynatrace-config/CD_id-lookup-service/conditional-naming-service/template.json create mode 100644 BMW-Dynatrace-config/CD_ids-admin/conditional-naming-processgroup/README.md create mode 100644 BMW-Dynatrace-config/CD_ids-admin/conditional-naming-processgroup/conditional-naming-processgroup.yaml create mode 100644 BMW-Dynatrace-config/CD_ids-admin/conditional-naming-processgroup/template.json create mode 100644 BMW-Dynatrace-config/CD_ids-admin/conditional-naming-service/README.md create mode 100644 BMW-Dynatrace-config/CD_ids-admin/conditional-naming-service/conditional-naming-service.yaml create mode 100644 BMW-Dynatrace-config/CD_ids-admin/conditional-naming-service/template.json create mode 100644 BMW-Dynatrace-config/CD_ids-svds/conditional-naming-processgroup/README.md create mode 100644 BMW-Dynatrace-config/CD_ids-svds/conditional-naming-processgroup/conditional-naming-processgroup.yaml create mode 100644 BMW-Dynatrace-config/CD_ids-svds/conditional-naming-processgroup/template.json create mode 100644 BMW-Dynatrace-config/CD_ids-svds/conditional-naming-service/README.md create mode 100644 BMW-Dynatrace-config/CD_ids-svds/conditional-naming-service/conditional-naming-service.yaml create mode 100644 BMW-Dynatrace-config/CD_ids-svds/conditional-naming-service/template.json create mode 100644 BMW-Dynatrace-config/CD_ids-sync/conditional-naming-processgroup/README.md create mode 100644 BMW-Dynatrace-config/CD_ids-sync/conditional-naming-processgroup/conditional-naming-processgroup.yaml create mode 100644 BMW-Dynatrace-config/CD_ids-sync/conditional-naming-processgroup/template.json create mode 100644 BMW-Dynatrace-config/CD_ids-sync/conditional-naming-service/README.md create mode 100644 BMW-Dynatrace-config/CD_ids-sync/conditional-naming-service/conditional-naming-service.yaml create mode 100644 BMW-Dynatrace-config/CD_ids-sync/conditional-naming-service/template.json create mode 100644 BMW-Dynatrace-config/CD_ids-ws/conditional-naming-processgroup/README.md create mode 100644 BMW-Dynatrace-config/CD_ids-ws/conditional-naming-processgroup/conditional-naming-processgroup.yaml create mode 100644 BMW-Dynatrace-config/CD_ids-ws/conditional-naming-processgroup/template.json create mode 100644 BMW-Dynatrace-config/CD_ids-ws/conditional-naming-service/README.md create mode 100644 BMW-Dynatrace-config/CD_ids-ws/conditional-naming-service/conditional-naming-service.yaml create mode 100644 BMW-Dynatrace-config/CD_ids-ws/conditional-naming-service/template.json create mode 100644 BMW-Dynatrace-config/CD_image-composite-service/calculated-metrics-service/README.md create mode 100644 BMW-Dynatrace-config/CD_image-composite-service/conditional-naming-processgroup/README.md create mode 100644 BMW-Dynatrace-config/CD_image-composite-service/conditional-naming-processgroup/conditional-naming-processgroup.yaml create mode 100644 BMW-Dynatrace-config/CD_image-composite-service/conditional-naming-processgroup/template.json create mode 100644 BMW-Dynatrace-config/CD_image-composite-service/conditional-naming-service/README.md create mode 100644 BMW-Dynatrace-config/CD_image-composite-service/conditional-naming-service/conditional-naming-service.yaml create mode 100644 BMW-Dynatrace-config/CD_image-composite-service/conditional-naming-service/template.json create mode 100644 BMW-Dynatrace-config/CD_image-composite-service/custom-service-java/README.md create mode 100644 BMW-Dynatrace-config/CD_image-composite-service/custom-service-java/custom-service-java.yaml create mode 100644 BMW-Dynatrace-config/CD_image-composite-service/custom-service-java/template-1-1.json create mode 100644 BMW-Dynatrace-config/CD_image-composite-service/notification/README.md create mode 100644 BMW-Dynatrace-config/CD_image-composite-service/notification/email.json create mode 100644 BMW-Dynatrace-config/CD_image-composite-service/notification/msTeams.json create mode 100644 BMW-Dynatrace-config/CD_image-composite-service/notification/notification.yaml create mode 100644 BMW-Dynatrace-config/CD_imiles-service/conditional-naming-processgroup/README.md create mode 100644 BMW-Dynatrace-config/CD_imiles-service/conditional-naming-processgroup/conditional-naming-processgroup.yaml create mode 100644 BMW-Dynatrace-config/CD_imiles-service/conditional-naming-processgroup/template.json create mode 100644 BMW-Dynatrace-config/CD_imiles-service/conditional-naming-service/README.md create mode 100644 BMW-Dynatrace-config/CD_imiles-service/conditional-naming-service/conditional-naming-service.yaml create mode 100644 BMW-Dynatrace-config/CD_imiles-service/conditional-naming-service/template.json create mode 100644 BMW-Dynatrace-config/CD_ipa-gateway/conditional-naming-processgroup/README.md create mode 100644 BMW-Dynatrace-config/CD_ipa-gateway/conditional-naming-processgroup/conditional-naming-processgroup.yaml create mode 100644 BMW-Dynatrace-config/CD_ipa-gateway/conditional-naming-processgroup/template.json create mode 100644 BMW-Dynatrace-config/CD_ipa-gateway/conditional-naming-service/README.md create mode 100644 BMW-Dynatrace-config/CD_ipa-gateway/conditional-naming-service/conditional-naming-service.yaml create mode 100644 BMW-Dynatrace-config/CD_ipa-gateway/conditional-naming-service/template.json create mode 100644 BMW-Dynatrace-config/CD_jdssp21/conditional-naming-processgroup/README.md create mode 100644 BMW-Dynatrace-config/CD_jdssp21/conditional-naming-processgroup/conditional-naming-processgroup.yaml create mode 100644 BMW-Dynatrace-config/CD_jdssp21/conditional-naming-processgroup/template.json create mode 100644 BMW-Dynatrace-config/CD_jdssp21/conditional-naming-service/README.md create mode 100644 BMW-Dynatrace-config/CD_jdssp21/conditional-naming-service/conditional-naming-service.yaml create mode 100644 BMW-Dynatrace-config/CD_jdssp21/conditional-naming-service/template.json create mode 100644 BMW-Dynatrace-config/CD_legacy-deletion-service/conditional-naming-processgroup/README.md create mode 100644 BMW-Dynatrace-config/CD_legacy-deletion-service/conditional-naming-processgroup/conditional-naming-processgroup.yaml create mode 100644 BMW-Dynatrace-config/CD_legacy-deletion-service/conditional-naming-processgroup/template.json create mode 100644 BMW-Dynatrace-config/CD_legacy-deletion-service/conditional-naming-service/README.md create mode 100644 BMW-Dynatrace-config/CD_legacy-deletion-service/conditional-naming-service/conditional-naming-service.yaml create mode 100644 BMW-Dynatrace-config/CD_legacy-deletion-service/conditional-naming-service/template.json create mode 100644 BMW-Dynatrace-config/CD_legacy-sar-service/conditional-naming-processgroup/README.md create mode 100644 BMW-Dynatrace-config/CD_legacy-sar-service/conditional-naming-processgroup/conditional-naming-processgroup.yaml create mode 100644 BMW-Dynatrace-config/CD_legacy-sar-service/conditional-naming-processgroup/template.json create mode 100644 BMW-Dynatrace-config/CD_legacy-sar-service/conditional-naming-service/README.md create mode 100644 BMW-Dynatrace-config/CD_legacy-sar-service/conditional-naming-service/conditional-naming-service.yaml create mode 100644 BMW-Dynatrace-config/CD_legacy-sar-service/conditional-naming-service/template.json create mode 100644 BMW-Dynatrace-config/CD_legal-document-composite-service/conditional-naming-processgroup/README.md create mode 100644 BMW-Dynatrace-config/CD_legal-document-composite-service/conditional-naming-processgroup/conditional-naming-processgroup.yaml create mode 100644 BMW-Dynatrace-config/CD_legal-document-composite-service/conditional-naming-processgroup/template.json create mode 100644 BMW-Dynatrace-config/CD_legal-document-composite-service/conditional-naming-service/README.md create mode 100644 BMW-Dynatrace-config/CD_legal-document-composite-service/conditional-naming-service/conditional-naming-service.yaml create mode 100644 BMW-Dynatrace-config/CD_legal-document-composite-service/conditional-naming-service/template.json create mode 100644 BMW-Dynatrace-config/CD_log-data-deletion-service/conditional-naming-processgroup/README.md create mode 100644 BMW-Dynatrace-config/CD_log-data-deletion-service/conditional-naming-processgroup/conditional-naming-processgroup.yaml create mode 100644 BMW-Dynatrace-config/CD_log-data-deletion-service/conditional-naming-processgroup/template.json create mode 100644 BMW-Dynatrace-config/CD_log-data-deletion-service/conditional-naming-service/README.md create mode 100644 BMW-Dynatrace-config/CD_log-data-deletion-service/conditional-naming-service/conditional-naming-service.yaml create mode 100644 BMW-Dynatrace-config/CD_log-data-deletion-service/conditional-naming-service/template.json create mode 100644 BMW-Dynatrace-config/CD_lsc-kc/conditional-naming-processgroup/README.md create mode 100644 BMW-Dynatrace-config/CD_lsc-kc/conditional-naming-processgroup/conditional-naming-processgroup.yaml create mode 100644 BMW-Dynatrace-config/CD_lsc-kc/conditional-naming-processgroup/template.json create mode 100644 BMW-Dynatrace-config/CD_lsc-kc/conditional-naming-service/README.md create mode 100644 BMW-Dynatrace-config/CD_lsc-kc/conditional-naming-service/conditional-naming-service.yaml create mode 100644 BMW-Dynatrace-config/CD_lsc-kc/conditional-naming-service/template.json create mode 100644 BMW-Dynatrace-config/CD_lsc-mm/conditional-naming-processgroup/README.md create mode 100644 BMW-Dynatrace-config/CD_lsc-mm/conditional-naming-processgroup/conditional-naming-processgroup.yaml create mode 100644 BMW-Dynatrace-config/CD_lsc-mm/conditional-naming-processgroup/template.json create mode 100644 BMW-Dynatrace-config/CD_lsc-mm/conditional-naming-service/README.md create mode 100644 BMW-Dynatrace-config/CD_lsc-mm/conditional-naming-service/conditional-naming-service.yaml create mode 100644 BMW-Dynatrace-config/CD_lsc-mm/conditional-naming-service/template.json create mode 100644 BMW-Dynatrace-config/CD_lsc-oc/conditional-naming-processgroup/README.md create mode 100644 BMW-Dynatrace-config/CD_lsc-oc/conditional-naming-processgroup/conditional-naming-processgroup.yaml create mode 100644 BMW-Dynatrace-config/CD_lsc-oc/conditional-naming-processgroup/template.json create mode 100644 BMW-Dynatrace-config/CD_lsc-oc/conditional-naming-service/README.md create mode 100644 BMW-Dynatrace-config/CD_lsc-oc/conditional-naming-service/conditional-naming-service.yaml create mode 100644 BMW-Dynatrace-config/CD_lsc-oc/conditional-naming-service/template.json create mode 100644 BMW-Dynatrace-config/CD_lsc-og/conditional-naming-processgroup/README.md create mode 100644 BMW-Dynatrace-config/CD_lsc-og/conditional-naming-processgroup/conditional-naming-processgroup.yaml create mode 100644 BMW-Dynatrace-config/CD_lsc-og/conditional-naming-processgroup/template.json create mode 100644 BMW-Dynatrace-config/CD_lsc-og/conditional-naming-service/README.md create mode 100644 BMW-Dynatrace-config/CD_lsc-og/conditional-naming-service/conditional-naming-service.yaml create mode 100644 BMW-Dynatrace-config/CD_lsc-og/conditional-naming-service/template.json create mode 100644 BMW-Dynatrace-config/CD_mds/conditional-naming-processgroup/README.md create mode 100644 BMW-Dynatrace-config/CD_mds/conditional-naming-processgroup/conditional-naming-processgroup.yaml create mode 100644 BMW-Dynatrace-config/CD_mds/conditional-naming-processgroup/template.json create mode 100644 BMW-Dynatrace-config/CD_mds/conditional-naming-service/README.md create mode 100644 BMW-Dynatrace-config/CD_mds/conditional-naming-service/conditional-naming-service.yaml create mode 100644 BMW-Dynatrace-config/CD_mds/conditional-naming-service/template.json create mode 100644 BMW-Dynatrace-config/CD_ml-ingestion-service/conditional-naming-processgroup/README.md create mode 100644 BMW-Dynatrace-config/CD_ml-ingestion-service/conditional-naming-processgroup/conditional-naming-processgroup.yaml create mode 100644 BMW-Dynatrace-config/CD_ml-ingestion-service/conditional-naming-processgroup/template.json create mode 100644 BMW-Dynatrace-config/CD_ml-ingestion-service/conditional-naming-service/README.md create mode 100644 BMW-Dynatrace-config/CD_ml-ingestion-service/conditional-naming-service/conditional-naming-service.yaml create mode 100644 BMW-Dynatrace-config/CD_ml-ingestion-service/conditional-naming-service/template.json create mode 100644 BMW-Dynatrace-config/CD_mlc/conditional-naming-processgroup/README.md create mode 100644 BMW-Dynatrace-config/CD_mlc/conditional-naming-processgroup/conditional-naming-processgroup.yaml create mode 100644 BMW-Dynatrace-config/CD_mlc/conditional-naming-processgroup/template.json create mode 100644 BMW-Dynatrace-config/CD_mlc/conditional-naming-service/README.md create mode 100644 BMW-Dynatrace-config/CD_mlc/conditional-naming-service/conditional-naming-service.yaml create mode 100644 BMW-Dynatrace-config/CD_mlc/conditional-naming-service/template.json create mode 100644 BMW-Dynatrace-config/CD_mrp/conditional-naming-processgroup/README.md create mode 100644 BMW-Dynatrace-config/CD_mrp/conditional-naming-processgroup/conditional-naming-processgroup.yaml create mode 100644 BMW-Dynatrace-config/CD_mrp/conditional-naming-processgroup/template.json create mode 100644 BMW-Dynatrace-config/CD_mrp/conditional-naming-service/README.md create mode 100644 BMW-Dynatrace-config/CD_mrp/conditional-naming-service/conditional-naming-service.yaml create mode 100644 BMW-Dynatrace-config/CD_mrp/conditional-naming-service/template.json create mode 100644 BMW-Dynatrace-config/CD_mrpspringboot/conditional-naming-processgroup/README.md create mode 100644 BMW-Dynatrace-config/CD_mrpspringboot/conditional-naming-processgroup/conditional-naming-processgroup.yaml create mode 100644 BMW-Dynatrace-config/CD_mrpspringboot/conditional-naming-processgroup/template.json create mode 100644 BMW-Dynatrace-config/CD_mrpspringboot/conditional-naming-service/README.md create mode 100644 BMW-Dynatrace-config/CD_mrpspringboot/conditional-naming-service/conditional-naming-service.yaml create mode 100644 BMW-Dynatrace-config/CD_mrpspringboot/conditional-naming-service/template.json create mode 100644 BMW-Dynatrace-config/CD_nop-admin/conditional-naming-processgroup/README.md create mode 100644 BMW-Dynatrace-config/CD_nop-admin/conditional-naming-processgroup/conditional-naming-processgroup.yaml create mode 100644 BMW-Dynatrace-config/CD_nop-admin/conditional-naming-processgroup/template.json create mode 100644 BMW-Dynatrace-config/CD_nop-admin/conditional-naming-service/README.md create mode 100644 BMW-Dynatrace-config/CD_nop-admin/conditional-naming-service/conditional-naming-service.yaml create mode 100644 BMW-Dynatrace-config/CD_nop-admin/conditional-naming-service/template.json create mode 100644 BMW-Dynatrace-config/CD_nop-archive/conditional-naming-processgroup/README.md create mode 100644 BMW-Dynatrace-config/CD_nop-archive/conditional-naming-processgroup/conditional-naming-processgroup.yaml create mode 100644 BMW-Dynatrace-config/CD_nop-archive/conditional-naming-processgroup/template.json create mode 100644 BMW-Dynatrace-config/CD_nop-archive/conditional-naming-service/README.md create mode 100644 BMW-Dynatrace-config/CD_nop-archive/conditional-naming-service/conditional-naming-service.yaml create mode 100644 BMW-Dynatrace-config/CD_nop-archive/conditional-naming-service/template.json create mode 100644 BMW-Dynatrace-config/CD_nop-provisioning/conditional-naming-processgroup/README.md create mode 100644 BMW-Dynatrace-config/CD_nop-provisioning/conditional-naming-processgroup/conditional-naming-processgroup.yaml create mode 100644 BMW-Dynatrace-config/CD_nop-provisioning/conditional-naming-processgroup/template.json create mode 100644 BMW-Dynatrace-config/CD_nop-provisioning/conditional-naming-service/README.md create mode 100644 BMW-Dynatrace-config/CD_nop-provisioning/conditional-naming-service/conditional-naming-service.yaml create mode 100644 BMW-Dynatrace-config/CD_nop-provisioning/conditional-naming-service/template.json create mode 100644 BMW-Dynatrace-config/CD_nop-trigger/conditional-naming-processgroup/README.md create mode 100644 BMW-Dynatrace-config/CD_nop-trigger/conditional-naming-processgroup/conditional-naming-processgroup.yaml create mode 100644 BMW-Dynatrace-config/CD_nop-trigger/conditional-naming-processgroup/template.json create mode 100644 BMW-Dynatrace-config/CD_nop-trigger/conditional-naming-service/README.md create mode 100644 BMW-Dynatrace-config/CD_nop-trigger/conditional-naming-service/conditional-naming-service.yaml create mode 100644 BMW-Dynatrace-config/CD_nop-trigger/conditional-naming-service/template.json create mode 100644 BMW-Dynatrace-config/CD_notification-composite-service/conditional-naming-processgroup/README.md create mode 100644 BMW-Dynatrace-config/CD_notification-composite-service/conditional-naming-processgroup/conditional-naming-processgroup.yaml create mode 100644 BMW-Dynatrace-config/CD_notification-composite-service/conditional-naming-processgroup/template.json create mode 100644 BMW-Dynatrace-config/CD_notification-composite-service/conditional-naming-service/README.md create mode 100644 BMW-Dynatrace-config/CD_notification-composite-service/conditional-naming-service/conditional-naming-service.yaml create mode 100644 BMW-Dynatrace-config/CD_notification-composite-service/conditional-naming-service/template.json create mode 100644 BMW-Dynatrace-config/CD_notification-service/conditional-naming-processgroup/README.md create mode 100644 BMW-Dynatrace-config/CD_notification-service/conditional-naming-processgroup/conditional-naming-processgroup.yaml create mode 100644 BMW-Dynatrace-config/CD_notification-service/conditional-naming-processgroup/template.json create mode 100644 BMW-Dynatrace-config/CD_notification-service/conditional-naming-service/README.md create mode 100644 BMW-Dynatrace-config/CD_notification-service/conditional-naming-service/conditional-naming-service.yaml create mode 100644 BMW-Dynatrace-config/CD_notification-service/conditional-naming-service/template.json create mode 100644 BMW-Dynatrace-config/CD_oas-composite-service/conditional-naming-processgroup/README.md create mode 100644 BMW-Dynatrace-config/CD_oas-composite-service/conditional-naming-processgroup/conditional-naming-processgroup.yaml create mode 100644 BMW-Dynatrace-config/CD_oas-composite-service/conditional-naming-processgroup/template.json create mode 100644 BMW-Dynatrace-config/CD_oas-composite-service/conditional-naming-service/README.md create mode 100644 BMW-Dynatrace-config/CD_oas-composite-service/conditional-naming-service/conditional-naming-service.yaml create mode 100644 BMW-Dynatrace-config/CD_oas-composite-service/conditional-naming-service/template.json create mode 100644 BMW-Dynatrace-config/CD_oclisc2v/conditional-naming-processgroup/README.md create mode 100644 BMW-Dynatrace-config/CD_oclisc2v/conditional-naming-processgroup/conditional-naming-processgroup.yaml create mode 100644 BMW-Dynatrace-config/CD_oclisc2v/conditional-naming-processgroup/template.json create mode 100644 BMW-Dynatrace-config/CD_oclisc2v/conditional-naming-service/README.md create mode 100644 BMW-Dynatrace-config/CD_oclisc2v/conditional-naming-service/conditional-naming-service.yaml create mode 100644 BMW-Dynatrace-config/CD_oclisc2v/conditional-naming-service/template.json create mode 100644 BMW-Dynatrace-config/CD_oclisocsp/conditional-naming-processgroup/README.md create mode 100644 BMW-Dynatrace-config/CD_oclisocsp/conditional-naming-processgroup/conditional-naming-processgroup.yaml create mode 100644 BMW-Dynatrace-config/CD_oclisocsp/conditional-naming-processgroup/template.json create mode 100644 BMW-Dynatrace-config/CD_oclisocsp/conditional-naming-service/README.md create mode 100644 BMW-Dynatrace-config/CD_oclisocsp/conditional-naming-service/conditional-naming-service.yaml create mode 100644 BMW-Dynatrace-config/CD_oclisocsp/conditional-naming-service/template.json create mode 100644 BMW-Dynatrace-config/CD_omc-cd-services/conditional-naming-processgroup/README.md create mode 100644 BMW-Dynatrace-config/CD_omc-cd-services/conditional-naming-processgroup/conditional-naming-processgroup.yaml create mode 100644 BMW-Dynatrace-config/CD_omc-cd-services/conditional-naming-processgroup/template.json create mode 100644 BMW-Dynatrace-config/CD_omc-cd-services/conditional-naming-service/README.md create mode 100644 BMW-Dynatrace-config/CD_omc-cd-services/conditional-naming-service/conditional-naming-service.yaml create mode 100644 BMW-Dynatrace-config/CD_omc-cd-services/conditional-naming-service/template.json create mode 100644 BMW-Dynatrace-config/CD_omg/conditional-naming-processgroup/README.md create mode 100644 BMW-Dynatrace-config/CD_omg/conditional-naming-processgroup/conditional-naming-processgroup.yaml create mode 100644 BMW-Dynatrace-config/CD_omg/conditional-naming-processgroup/template.json create mode 100644 BMW-Dynatrace-config/CD_omg/conditional-naming-service/README.md create mode 100644 BMW-Dynatrace-config/CD_omg/conditional-naming-service/conditional-naming-service.yaml create mode 100644 BMW-Dynatrace-config/CD_omg/conditional-naming-service/template.json create mode 100644 BMW-Dynatrace-config/CD_onboard-navigation-sync-service/conditional-naming-processgroup/README.md create mode 100644 BMW-Dynatrace-config/CD_onboard-navigation-sync-service/conditional-naming-processgroup/conditional-naming-processgroup.yaml create mode 100644 BMW-Dynatrace-config/CD_onboard-navigation-sync-service/conditional-naming-processgroup/template.json create mode 100644 BMW-Dynatrace-config/CD_onboard-navigation-sync-service/conditional-naming-service/README.md create mode 100644 BMW-Dynatrace-config/CD_onboard-navigation-sync-service/conditional-naming-service/conditional-naming-service.yaml create mode 100644 BMW-Dynatrace-config/CD_onboard-navigation-sync-service/conditional-naming-service/template.json create mode 100644 BMW-Dynatrace-config/CD_online-appointment-service/conditional-naming-processgroup/README.md create mode 100644 BMW-Dynatrace-config/CD_online-appointment-service/conditional-naming-processgroup/conditional-naming-processgroup.yaml create mode 100644 BMW-Dynatrace-config/CD_online-appointment-service/conditional-naming-processgroup/template.json create mode 100644 BMW-Dynatrace-config/CD_online-appointment-service/conditional-naming-service/README.md create mode 100644 BMW-Dynatrace-config/CD_online-appointment-service/conditional-naming-service/conditional-naming-service.yaml create mode 100644 BMW-Dynatrace-config/CD_online-appointment-service/conditional-naming-service/template.json create mode 100644 BMW-Dynatrace-config/CD_online-entertainment/conditional-naming-processgroup/README.md create mode 100644 BMW-Dynatrace-config/CD_online-entertainment/conditional-naming-processgroup/conditional-naming-processgroup.yaml create mode 100644 BMW-Dynatrace-config/CD_online-entertainment/conditional-naming-processgroup/template.json create mode 100644 BMW-Dynatrace-config/CD_online-entertainment/conditional-naming-service/README.md create mode 100644 BMW-Dynatrace-config/CD_online-entertainment/conditional-naming-service/conditional-naming-service.yaml create mode 100644 BMW-Dynatrace-config/CD_online-entertainment/conditional-naming-service/template.json create mode 100644 BMW-Dynatrace-config/CD_pdmmanager/conditional-naming-processgroup/README.md create mode 100644 BMW-Dynatrace-config/CD_pdmmanager/conditional-naming-processgroup/conditional-naming-processgroup.yaml create mode 100644 BMW-Dynatrace-config/CD_pdmmanager/conditional-naming-processgroup/template.json create mode 100644 BMW-Dynatrace-config/CD_pdmmanager/conditional-naming-service/README.md create mode 100644 BMW-Dynatrace-config/CD_pdmmanager/conditional-naming-service/conditional-naming-service.yaml create mode 100644 BMW-Dynatrace-config/CD_pdmmanager/conditional-naming-service/template.json create mode 100644 BMW-Dynatrace-config/CD_personal-data-service/conditional-naming-processgroup/README.md create mode 100644 BMW-Dynatrace-config/CD_personal-data-service/conditional-naming-processgroup/conditional-naming-processgroup.yaml create mode 100644 BMW-Dynatrace-config/CD_personal-data-service/conditional-naming-processgroup/template.json create mode 100644 BMW-Dynatrace-config/CD_personal-data-service/conditional-naming-service/README.md create mode 100644 BMW-Dynatrace-config/CD_personal-data-service/conditional-naming-service/conditional-naming-service.yaml create mode 100644 BMW-Dynatrace-config/CD_personal-data-service/conditional-naming-service/template.json create mode 100644 BMW-Dynatrace-config/CD_pmuimapper-service/conditional-naming-processgroup/README.md create mode 100644 BMW-Dynatrace-config/CD_pmuimapper-service/conditional-naming-processgroup/conditional-naming-processgroup.yaml create mode 100644 BMW-Dynatrace-config/CD_pmuimapper-service/conditional-naming-processgroup/template.json create mode 100644 BMW-Dynatrace-config/CD_pmuimapper-service/conditional-naming-service/README.md create mode 100644 BMW-Dynatrace-config/CD_pmuimapper-service/conditional-naming-service/conditional-naming-service.yaml create mode 100644 BMW-Dynatrace-config/CD_pmuimapper-service/conditional-naming-service/template.json create mode 100644 BMW-Dynatrace-config/CD_private-charging-tariffs-composite-service/conditional-naming-processgroup/README.md create mode 100644 BMW-Dynatrace-config/CD_private-charging-tariffs-composite-service/conditional-naming-processgroup/conditional-naming-processgroup.yaml create mode 100644 BMW-Dynatrace-config/CD_private-charging-tariffs-composite-service/conditional-naming-processgroup/template.json create mode 100644 BMW-Dynatrace-config/CD_private-charging-tariffs-composite-service/conditional-naming-service/README.md create mode 100644 BMW-Dynatrace-config/CD_private-charging-tariffs-composite-service/conditional-naming-service/conditional-naming-service.yaml create mode 100644 BMW-Dynatrace-config/CD_private-charging-tariffs-composite-service/conditional-naming-service/template.json create mode 100644 BMW-Dynatrace-config/CD_private-charging-tariffs-service/conditional-naming-processgroup/README.md create mode 100644 BMW-Dynatrace-config/CD_private-charging-tariffs-service/conditional-naming-processgroup/conditional-naming-processgroup.yaml create mode 100644 BMW-Dynatrace-config/CD_private-charging-tariffs-service/conditional-naming-processgroup/template.json create mode 100644 BMW-Dynatrace-config/CD_private-charging-tariffs-service/conditional-naming-service/README.md create mode 100644 BMW-Dynatrace-config/CD_private-charging-tariffs-service/conditional-naming-service/conditional-naming-service.yaml create mode 100644 BMW-Dynatrace-config/CD_private-charging-tariffs-service/conditional-naming-service/template.json create mode 100644 BMW-Dynatrace-config/CD_push-notification-service/conditional-naming-processgroup/README.md create mode 100644 BMW-Dynatrace-config/CD_push-notification-service/conditional-naming-processgroup/conditional-naming-processgroup.yaml create mode 100644 BMW-Dynatrace-config/CD_push-notification-service/conditional-naming-processgroup/template.json create mode 100644 BMW-Dynatrace-config/CD_push-notification-service/conditional-naming-service/README.md create mode 100644 BMW-Dynatrace-config/CD_push-notification-service/conditional-naming-service/conditional-naming-service.yaml create mode 100644 BMW-Dynatrace-config/CD_push-notification-service/conditional-naming-service/template.json create mode 100644 BMW-Dynatrace-config/CD_push-notification-settings-composite-service/conditional-naming-processgroup/README.md create mode 100644 BMW-Dynatrace-config/CD_push-notification-settings-composite-service/conditional-naming-processgroup/conditional-naming-processgroup.yaml create mode 100644 BMW-Dynatrace-config/CD_push-notification-settings-composite-service/conditional-naming-processgroup/template.json create mode 100644 BMW-Dynatrace-config/CD_push-notification-settings-composite-service/conditional-naming-service/README.md create mode 100644 BMW-Dynatrace-config/CD_push-notification-settings-composite-service/conditional-naming-service/conditional-naming-service.yaml create mode 100644 BMW-Dynatrace-config/CD_push-notification-settings-composite-service/conditional-naming-service/template.json create mode 100644 BMW-Dynatrace-config/CD_recall-analytics-service/conditional-naming-processgroup/README.md create mode 100644 BMW-Dynatrace-config/CD_recall-analytics-service/conditional-naming-processgroup/conditional-naming-processgroup.yaml create mode 100644 BMW-Dynatrace-config/CD_recall-analytics-service/conditional-naming-processgroup/template.json create mode 100644 BMW-Dynatrace-config/CD_recall-analytics-service/conditional-naming-service/README.md create mode 100644 BMW-Dynatrace-config/CD_recall-analytics-service/conditional-naming-service/conditional-naming-service.yaml create mode 100644 BMW-Dynatrace-config/CD_recall-analytics-service/conditional-naming-service/template.json create mode 100644 BMW-Dynatrace-config/CD_recall-client-service/conditional-naming-processgroup/README.md create mode 100644 BMW-Dynatrace-config/CD_recall-client-service/conditional-naming-processgroup/conditional-naming-processgroup.yaml create mode 100644 BMW-Dynatrace-config/CD_recall-client-service/conditional-naming-processgroup/template.json create mode 100644 BMW-Dynatrace-config/CD_recall-client-service/conditional-naming-service/README.md create mode 100644 BMW-Dynatrace-config/CD_recall-client-service/conditional-naming-service/conditional-naming-service.yaml create mode 100644 BMW-Dynatrace-config/CD_recall-client-service/conditional-naming-service/template.json create mode 100644 BMW-Dynatrace-config/CD_recall-handler-service/conditional-naming-processgroup/README.md create mode 100644 BMW-Dynatrace-config/CD_recall-handler-service/conditional-naming-processgroup/conditional-naming-processgroup.yaml create mode 100644 BMW-Dynatrace-config/CD_recall-handler-service/conditional-naming-processgroup/template.json create mode 100644 BMW-Dynatrace-config/CD_recall-handler-service/conditional-naming-service/README.md create mode 100644 BMW-Dynatrace-config/CD_recall-handler-service/conditional-naming-service/conditional-naming-service.yaml create mode 100644 BMW-Dynatrace-config/CD_recall-handler-service/conditional-naming-service/template.json create mode 100644 BMW-Dynatrace-config/CD_recall-notification-service/conditional-naming-processgroup/README.md create mode 100644 BMW-Dynatrace-config/CD_recall-notification-service/conditional-naming-processgroup/conditional-naming-processgroup.yaml create mode 100644 BMW-Dynatrace-config/CD_recall-notification-service/conditional-naming-processgroup/template.json create mode 100644 BMW-Dynatrace-config/CD_recall-notification-service/conditional-naming-service/README.md create mode 100644 BMW-Dynatrace-config/CD_recall-notification-service/conditional-naming-service/conditional-naming-service.yaml create mode 100644 BMW-Dynatrace-config/CD_recall-notification-service/conditional-naming-service/template.json create mode 100644 BMW-Dynatrace-config/CD_recall-scheduler-service/conditional-naming-processgroup/README.md create mode 100644 BMW-Dynatrace-config/CD_recall-scheduler-service/conditional-naming-processgroup/conditional-naming-processgroup.yaml create mode 100644 BMW-Dynatrace-config/CD_recall-scheduler-service/conditional-naming-processgroup/template.json create mode 100644 BMW-Dynatrace-config/CD_recall-scheduler-service/conditional-naming-service/README.md create mode 100644 BMW-Dynatrace-config/CD_recall-scheduler-service/conditional-naming-service/conditional-naming-service.yaml create mode 100644 BMW-Dynatrace-config/CD_recall-scheduler-service/conditional-naming-service/template.json create mode 100644 BMW-Dynatrace-config/CD_recall-tcn-service/conditional-naming-processgroup/README.md create mode 100644 BMW-Dynatrace-config/CD_recall-tcn-service/conditional-naming-processgroup/conditional-naming-processgroup.yaml create mode 100644 BMW-Dynatrace-config/CD_recall-tcn-service/conditional-naming-processgroup/template.json create mode 100644 BMW-Dynatrace-config/CD_recall-tcn-service/conditional-naming-service/README.md create mode 100644 BMW-Dynatrace-config/CD_recall-tcn-service/conditional-naming-service/conditional-naming-service.yaml create mode 100644 BMW-Dynatrace-config/CD_recall-tcn-service/conditional-naming-service/template.json create mode 100644 BMW-Dynatrace-config/CD_remote-360-composite-service/conditional-naming-processgroup/README.md create mode 100644 BMW-Dynatrace-config/CD_remote-360-composite-service/conditional-naming-processgroup/conditional-naming-processgroup.yaml create mode 100644 BMW-Dynatrace-config/CD_remote-360-composite-service/conditional-naming-processgroup/template.json create mode 100644 BMW-Dynatrace-config/CD_remote-360-composite-service/conditional-naming-service/README.md create mode 100644 BMW-Dynatrace-config/CD_remote-360-composite-service/conditional-naming-service/conditional-naming-service.yaml create mode 100644 BMW-Dynatrace-config/CD_remote-360-composite-service/conditional-naming-service/template.json create mode 100644 BMW-Dynatrace-config/CD_remote-service-event-processor/conditional-naming-processgroup/README.md create mode 100644 BMW-Dynatrace-config/CD_remote-service-event-processor/conditional-naming-processgroup/conditional-naming-processgroup.yaml create mode 100644 BMW-Dynatrace-config/CD_remote-service-event-processor/conditional-naming-processgroup/template.json create mode 100644 BMW-Dynatrace-config/CD_remote-service-event-processor/conditional-naming-service/README.md create mode 100644 BMW-Dynatrace-config/CD_remote-service-event-processor/conditional-naming-service/conditional-naming-service.yaml create mode 100644 BMW-Dynatrace-config/CD_remote-service-event-processor/conditional-naming-service/template.json create mode 100644 BMW-Dynatrace-config/CD_remote-service/conditional-naming-processgroup/README.md create mode 100644 BMW-Dynatrace-config/CD_remote-service/conditional-naming-processgroup/conditional-naming-processgroup.yaml create mode 100644 BMW-Dynatrace-config/CD_remote-service/conditional-naming-processgroup/template.json create mode 100644 BMW-Dynatrace-config/CD_remote-service/conditional-naming-service/README.md create mode 100644 BMW-Dynatrace-config/CD_remote-service/conditional-naming-service/conditional-naming-service.yaml create mode 100644 BMW-Dynatrace-config/CD_remote-service/conditional-naming-service/template.json create mode 100644 BMW-Dynatrace-config/CD_remote-software-upgrade/conditional-naming-processgroup/README.md create mode 100644 BMW-Dynatrace-config/CD_remote-software-upgrade/conditional-naming-processgroup/conditional-naming-processgroup.yaml create mode 100644 BMW-Dynatrace-config/CD_remote-software-upgrade/conditional-naming-processgroup/template.json create mode 100644 BMW-Dynatrace-config/CD_remote-software-upgrade/conditional-naming-service/README.md create mode 100644 BMW-Dynatrace-config/CD_remote-software-upgrade/conditional-naming-service/conditional-naming-service.yaml create mode 100644 BMW-Dynatrace-config/CD_remote-software-upgrade/conditional-naming-service/template.json create mode 100644 BMW-Dynatrace-config/CD_roadside-assistance-composite-service/conditional-naming-processgroup/README.md create mode 100644 BMW-Dynatrace-config/CD_roadside-assistance-composite-service/conditional-naming-processgroup/conditional-naming-processgroup.yaml create mode 100644 BMW-Dynatrace-config/CD_roadside-assistance-composite-service/conditional-naming-processgroup/template.json create mode 100644 BMW-Dynatrace-config/CD_roadside-assistance-composite-service/conditional-naming-service/README.md create mode 100644 BMW-Dynatrace-config/CD_roadside-assistance-composite-service/conditional-naming-service/conditional-naming-service.yaml create mode 100644 BMW-Dynatrace-config/CD_roadside-assistance-composite-service/conditional-naming-service/template.json create mode 100644 BMW-Dynatrace-config/CD_roadside-assistance/conditional-naming-processgroup/README.md create mode 100644 BMW-Dynatrace-config/CD_roadside-assistance/conditional-naming-processgroup/conditional-naming-processgroup.yaml create mode 100644 BMW-Dynatrace-config/CD_roadside-assistance/conditional-naming-processgroup/template.json create mode 100644 BMW-Dynatrace-config/CD_roadside-assistance/conditional-naming-service/README.md create mode 100644 BMW-Dynatrace-config/CD_roadside-assistance/conditional-naming-service/conditional-naming-service.yaml create mode 100644 BMW-Dynatrace-config/CD_roadside-assistance/conditional-naming-service/template.json create mode 100644 BMW-Dynatrace-config/CD_rsu-adapter/conditional-naming-processgroup/README.md create mode 100644 BMW-Dynatrace-config/CD_rsu-adapter/conditional-naming-processgroup/conditional-naming-processgroup.yaml create mode 100644 BMW-Dynatrace-config/CD_rsu-adapter/conditional-naming-processgroup/template.json create mode 100644 BMW-Dynatrace-config/CD_rsu-adapter/conditional-naming-service/README.md create mode 100644 BMW-Dynatrace-config/CD_rsu-adapter/conditional-naming-service/conditional-naming-service.yaml create mode 100644 BMW-Dynatrace-config/CD_rsu-adapter/conditional-naming-service/template.json create mode 100644 BMW-Dynatrace-config/CD_rsu/conditional-naming-processgroup/README.md create mode 100644 BMW-Dynatrace-config/CD_rsu/conditional-naming-processgroup/conditional-naming-processgroup.yaml create mode 100644 BMW-Dynatrace-config/CD_rsu/conditional-naming-processgroup/template.json create mode 100644 BMW-Dynatrace-config/CD_rsu/conditional-naming-service/README.md create mode 100644 BMW-Dynatrace-config/CD_rsu/conditional-naming-service/conditional-naming-service.yaml create mode 100644 BMW-Dynatrace-config/CD_rsu/conditional-naming-service/template.json create mode 100644 BMW-Dynatrace-config/CD_sbr/conditional-naming-processgroup/README.md create mode 100644 BMW-Dynatrace-config/CD_sbr/conditional-naming-processgroup/conditional-naming-processgroup.yaml create mode 100644 BMW-Dynatrace-config/CD_sbr/conditional-naming-processgroup/template.json create mode 100644 BMW-Dynatrace-config/CD_sbr/conditional-naming-service/README.md create mode 100644 BMW-Dynatrace-config/CD_sbr/conditional-naming-service/conditional-naming-service.yaml create mode 100644 BMW-Dynatrace-config/CD_sbr/conditional-naming-service/template.json create mode 100644 BMW-Dynatrace-config/CD_scb/conditional-naming-processgroup/README.md create mode 100644 BMW-Dynatrace-config/CD_scb/conditional-naming-processgroup/conditional-naming-processgroup.yaml create mode 100644 BMW-Dynatrace-config/CD_scb/conditional-naming-processgroup/template.json create mode 100644 BMW-Dynatrace-config/CD_scb/conditional-naming-service/README.md create mode 100644 BMW-Dynatrace-config/CD_scb/conditional-naming-service/conditional-naming-service.yaml create mode 100644 BMW-Dynatrace-config/CD_scb/conditional-naming-service/template.json create mode 100644 BMW-Dynatrace-config/CD_scc/conditional-naming-processgroup/README.md create mode 100644 BMW-Dynatrace-config/CD_scc/conditional-naming-processgroup/conditional-naming-processgroup.yaml create mode 100644 BMW-Dynatrace-config/CD_scc/conditional-naming-processgroup/template.json create mode 100644 BMW-Dynatrace-config/CD_scc/conditional-naming-service/README.md create mode 100644 BMW-Dynatrace-config/CD_scc/conditional-naming-service/conditional-naming-service.yaml create mode 100644 BMW-Dynatrace-config/CD_scc/conditional-naming-service/template.json create mode 100644 BMW-Dynatrace-config/CD_scm-agentreg/conditional-naming-processgroup/README.md create mode 100644 BMW-Dynatrace-config/CD_scm-agentreg/conditional-naming-processgroup/conditional-naming-processgroup.yaml create mode 100644 BMW-Dynatrace-config/CD_scm-agentreg/conditional-naming-processgroup/template.json create mode 100644 BMW-Dynatrace-config/CD_scm-agentreg/conditional-naming-service/README.md create mode 100644 BMW-Dynatrace-config/CD_scm-agentreg/conditional-naming-service/conditional-naming-service.yaml create mode 100644 BMW-Dynatrace-config/CD_scm-agentreg/conditional-naming-service/template.json create mode 100644 BMW-Dynatrace-config/CD_scm-scm/conditional-naming-processgroup/README.md create mode 100644 BMW-Dynatrace-config/CD_scm-scm/conditional-naming-processgroup/conditional-naming-processgroup.yaml create mode 100644 BMW-Dynatrace-config/CD_scm-scm/conditional-naming-processgroup/template.json create mode 100644 BMW-Dynatrace-config/CD_scm-scm/conditional-naming-service/README.md create mode 100644 BMW-Dynatrace-config/CD_scm-scm/conditional-naming-service/conditional-naming-service.yaml create mode 100644 BMW-Dynatrace-config/CD_scm-scm/conditional-naming-service/template.json create mode 100644 BMW-Dynatrace-config/CD_scma-backend/conditional-naming-processgroup/README.md create mode 100644 BMW-Dynatrace-config/CD_scma-backend/conditional-naming-processgroup/conditional-naming-processgroup.yaml create mode 100644 BMW-Dynatrace-config/CD_scma-backend/conditional-naming-processgroup/template.json create mode 100644 BMW-Dynatrace-config/CD_scma-backend/conditional-naming-service/README.md create mode 100644 BMW-Dynatrace-config/CD_scma-backend/conditional-naming-service/conditional-naming-service.yaml create mode 100644 BMW-Dynatrace-config/CD_scma-backend/conditional-naming-service/template.json create mode 100644 BMW-Dynatrace-config/CD_seam-event-consumer/conditional-naming-processgroup/README.md create mode 100644 BMW-Dynatrace-config/CD_seam-event-consumer/conditional-naming-processgroup/conditional-naming-processgroup.yaml create mode 100644 BMW-Dynatrace-config/CD_seam-event-consumer/conditional-naming-processgroup/template.json create mode 100644 BMW-Dynatrace-config/CD_seam-event-consumer/conditional-naming-service/README.md create mode 100644 BMW-Dynatrace-config/CD_seam-event-consumer/conditional-naming-service/conditional-naming-service.yaml create mode 100644 BMW-Dynatrace-config/CD_seam-event-consumer/conditional-naming-service/template.json create mode 100644 BMW-Dynatrace-config/CD_seam-event-producer/conditional-naming-processgroup/README.md create mode 100644 BMW-Dynatrace-config/CD_seam-event-producer/conditional-naming-processgroup/conditional-naming-processgroup.yaml create mode 100644 BMW-Dynatrace-config/CD_seam-event-producer/conditional-naming-processgroup/template.json create mode 100644 BMW-Dynatrace-config/CD_seam-event-producer/conditional-naming-service/README.md create mode 100644 BMW-Dynatrace-config/CD_seam-event-producer/conditional-naming-service/conditional-naming-service.yaml create mode 100644 BMW-Dynatrace-config/CD_seam-event-producer/conditional-naming-service/template.json create mode 100644 BMW-Dynatrace-config/CD_search-composite-service/conditional-naming-processgroup/README.md create mode 100644 BMW-Dynatrace-config/CD_search-composite-service/conditional-naming-processgroup/conditional-naming-processgroup.yaml create mode 100644 BMW-Dynatrace-config/CD_search-composite-service/conditional-naming-processgroup/template.json create mode 100644 BMW-Dynatrace-config/CD_search-composite-service/conditional-naming-service/README.md create mode 100644 BMW-Dynatrace-config/CD_search-composite-service/conditional-naming-service/conditional-naming-service.yaml create mode 100644 BMW-Dynatrace-config/CD_search-composite-service/conditional-naming-service/template.json create mode 100644 BMW-Dynatrace-config/CD_send-to-car-service/conditional-naming-processgroup/README.md create mode 100644 BMW-Dynatrace-config/CD_send-to-car-service/conditional-naming-processgroup/conditional-naming-processgroup.yaml create mode 100644 BMW-Dynatrace-config/CD_send-to-car-service/conditional-naming-processgroup/template.json create mode 100644 BMW-Dynatrace-config/CD_send-to-car-service/conditional-naming-service/README.md create mode 100644 BMW-Dynatrace-config/CD_send-to-car-service/conditional-naming-service/conditional-naming-service.yaml create mode 100644 BMW-Dynatrace-config/CD_send-to-car-service/conditional-naming-service/template.json create mode 100644 BMW-Dynatrace-config/CD_service-manager/conditional-naming-processgroup/README.md create mode 100644 BMW-Dynatrace-config/CD_service-manager/conditional-naming-processgroup/conditional-naming-processgroup.yaml create mode 100644 BMW-Dynatrace-config/CD_service-manager/conditional-naming-processgroup/template.json create mode 100644 BMW-Dynatrace-config/CD_service-manager/conditional-naming-service/README.md create mode 100644 BMW-Dynatrace-config/CD_service-manager/conditional-naming-service/conditional-naming-service.yaml create mode 100644 BMW-Dynatrace-config/CD_service-manager/conditional-naming-service/template.json create mode 100644 BMW-Dynatrace-config/CD_service-notification-service/conditional-naming-processgroup/README.md create mode 100644 BMW-Dynatrace-config/CD_service-notification-service/conditional-naming-processgroup/conditional-naming-processgroup.yaml create mode 100644 BMW-Dynatrace-config/CD_service-notification-service/conditional-naming-processgroup/template.json create mode 100644 BMW-Dynatrace-config/CD_service-notification-service/conditional-naming-service/README.md create mode 100644 BMW-Dynatrace-config/CD_service-notification-service/conditional-naming-service/conditional-naming-service.yaml create mode 100644 BMW-Dynatrace-config/CD_service-notification-service/conditional-naming-service/template.json create mode 100644 BMW-Dynatrace-config/CD_sfa-fre/conditional-naming-processgroup/README.md create mode 100644 BMW-Dynatrace-config/CD_sfa-fre/conditional-naming-processgroup/conditional-naming-processgroup.yaml create mode 100644 BMW-Dynatrace-config/CD_sfa-fre/conditional-naming-processgroup/template.json create mode 100644 BMW-Dynatrace-config/CD_sfa-fre/conditional-naming-service/README.md create mode 100644 BMW-Dynatrace-config/CD_sfa-fre/conditional-naming-service/conditional-naming-service.yaml create mode 100644 BMW-Dynatrace-config/CD_sfa-fre/conditional-naming-service/template.json create mode 100644 BMW-Dynatrace-config/CD_sfa-ota/conditional-naming-processgroup/README.md create mode 100644 BMW-Dynatrace-config/CD_sfa-ota/conditional-naming-processgroup/conditional-naming-processgroup.yaml create mode 100644 BMW-Dynatrace-config/CD_sfa-ota/conditional-naming-processgroup/template.json create mode 100644 BMW-Dynatrace-config/CD_sfa-ota/conditional-naming-service/README.md create mode 100644 BMW-Dynatrace-config/CD_sfa-ota/conditional-naming-service/conditional-naming-service.yaml create mode 100644 BMW-Dynatrace-config/CD_sfa-ota/conditional-naming-service/template.json create mode 100644 BMW-Dynatrace-config/CD_sfa-vs/conditional-naming-processgroup/README.md create mode 100644 BMW-Dynatrace-config/CD_sfa-vs/conditional-naming-processgroup/conditional-naming-processgroup.yaml create mode 100644 BMW-Dynatrace-config/CD_sfa-vs/conditional-naming-processgroup/template.json create mode 100644 BMW-Dynatrace-config/CD_sfa-vs/conditional-naming-service/README.md create mode 100644 BMW-Dynatrace-config/CD_sfa-vs/conditional-naming-service/conditional-naming-service.yaml create mode 100644 BMW-Dynatrace-config/CD_sfa-vs/conditional-naming-service/template.json create mode 100644 BMW-Dynatrace-config/CD_sfa/conditional-naming-processgroup/README.md create mode 100644 BMW-Dynatrace-config/CD_sfa/conditional-naming-processgroup/conditional-naming-processgroup.yaml create mode 100644 BMW-Dynatrace-config/CD_sfa/conditional-naming-processgroup/template.json create mode 100644 BMW-Dynatrace-config/CD_sfa/conditional-naming-service/README.md create mode 100644 BMW-Dynatrace-config/CD_sfa/conditional-naming-service/conditional-naming-service.yaml create mode 100644 BMW-Dynatrace-config/CD_sfa/conditional-naming-service/template.json create mode 100644 BMW-Dynatrace-config/CD_smart-access-order-service/conditional-naming-processgroup/README.md create mode 100644 BMW-Dynatrace-config/CD_smart-access-order-service/conditional-naming-processgroup/conditional-naming-processgroup.yaml create mode 100644 BMW-Dynatrace-config/CD_smart-access-order-service/conditional-naming-processgroup/template.json create mode 100644 BMW-Dynatrace-config/CD_smart-access-order-service/conditional-naming-service/README.md create mode 100644 BMW-Dynatrace-config/CD_smart-access-order-service/conditional-naming-service/conditional-naming-service.yaml create mode 100644 BMW-Dynatrace-config/CD_smart-access-order-service/conditional-naming-service/template.json create mode 100644 BMW-Dynatrace-config/CD_sms-email-adapter-service/conditional-naming-processgroup/README.md create mode 100644 BMW-Dynatrace-config/CD_sms-email-adapter-service/conditional-naming-processgroup/conditional-naming-processgroup.yaml create mode 100644 BMW-Dynatrace-config/CD_sms-email-adapter-service/conditional-naming-processgroup/template.json create mode 100644 BMW-Dynatrace-config/CD_sms-email-adapter-service/conditional-naming-service/README.md create mode 100644 BMW-Dynatrace-config/CD_sms-email-adapter-service/conditional-naming-service/conditional-naming-service.yaml create mode 100644 BMW-Dynatrace-config/CD_sms-email-adapter-service/conditional-naming-service/template.json create mode 100644 BMW-Dynatrace-config/CD_srmanager/conditional-naming-processgroup/README.md create mode 100644 BMW-Dynatrace-config/CD_srmanager/conditional-naming-processgroup/conditional-naming-processgroup.yaml create mode 100644 BMW-Dynatrace-config/CD_srmanager/conditional-naming-processgroup/template.json create mode 100644 BMW-Dynatrace-config/CD_srmanager/conditional-naming-service/README.md create mode 100644 BMW-Dynatrace-config/CD_srmanager/conditional-naming-service/conditional-naming-service.yaml create mode 100644 BMW-Dynatrace-config/CD_srmanager/conditional-naming-service/template.json create mode 100644 BMW-Dynatrace-config/CD_stm/conditional-naming-processgroup/README.md create mode 100644 BMW-Dynatrace-config/CD_stm/conditional-naming-processgroup/conditional-naming-processgroup.yaml create mode 100644 BMW-Dynatrace-config/CD_stm/conditional-naming-processgroup/template.json create mode 100644 BMW-Dynatrace-config/CD_stm/conditional-naming-service/README.md create mode 100644 BMW-Dynatrace-config/CD_stm/conditional-naming-service/conditional-naming-service.yaml create mode 100644 BMW-Dynatrace-config/CD_stm/conditional-naming-service/template.json create mode 100644 BMW-Dynatrace-config/CD_svcinfo/conditional-naming-processgroup/README.md create mode 100644 BMW-Dynatrace-config/CD_svcinfo/conditional-naming-processgroup/conditional-naming-processgroup.yaml create mode 100644 BMW-Dynatrace-config/CD_svcinfo/conditional-naming-processgroup/template.json create mode 100644 BMW-Dynatrace-config/CD_svcinfo/conditional-naming-service/README.md create mode 100644 BMW-Dynatrace-config/CD_svcinfo/conditional-naming-service/conditional-naming-service.yaml create mode 100644 BMW-Dynatrace-config/CD_svcinfo/conditional-naming-service/template.json create mode 100644 BMW-Dynatrace-config/CD_timer-service/conditional-naming-processgroup/README.md create mode 100644 BMW-Dynatrace-config/CD_timer-service/conditional-naming-processgroup/conditional-naming-processgroup.yaml create mode 100644 BMW-Dynatrace-config/CD_timer-service/conditional-naming-processgroup/template.json create mode 100644 BMW-Dynatrace-config/CD_timer-service/conditional-naming-service/README.md create mode 100644 BMW-Dynatrace-config/CD_timer-service/conditional-naming-service/conditional-naming-service.yaml create mode 100644 BMW-Dynatrace-config/CD_timer-service/conditional-naming-service/template.json create mode 100644 BMW-Dynatrace-config/CD_timers-processor/conditional-naming-processgroup/README.md create mode 100644 BMW-Dynatrace-config/CD_timers-processor/conditional-naming-processgroup/conditional-naming-processgroup.yaml create mode 100644 BMW-Dynatrace-config/CD_timers-processor/conditional-naming-processgroup/template.json create mode 100644 BMW-Dynatrace-config/CD_timers-processor/conditional-naming-service/README.md create mode 100644 BMW-Dynatrace-config/CD_timers-processor/conditional-naming-service/conditional-naming-service.yaml create mode 100644 BMW-Dynatrace-config/CD_timers-processor/conditional-naming-service/template.json create mode 100644 BMW-Dynatrace-config/CD_token-exchanger-service/conditional-naming-processgroup/README.md create mode 100644 BMW-Dynatrace-config/CD_token-exchanger-service/conditional-naming-processgroup/conditional-naming-processgroup.yaml create mode 100644 BMW-Dynatrace-config/CD_token-exchanger-service/conditional-naming-processgroup/template.json create mode 100644 BMW-Dynatrace-config/CD_token-exchanger-service/conditional-naming-service/README.md create mode 100644 BMW-Dynatrace-config/CD_token-exchanger-service/conditional-naming-service/conditional-naming-service.yaml create mode 100644 BMW-Dynatrace-config/CD_token-exchanger-service/conditional-naming-service/template.json create mode 100644 BMW-Dynatrace-config/CD_tol-mgu/conditional-naming-processgroup/README.md create mode 100644 BMW-Dynatrace-config/CD_tol-mgu/conditional-naming-processgroup/conditional-naming-processgroup.yaml create mode 100644 BMW-Dynatrace-config/CD_tol-mgu/conditional-naming-processgroup/template.json create mode 100644 BMW-Dynatrace-config/CD_tol-mgu/conditional-naming-service/README.md create mode 100644 BMW-Dynatrace-config/CD_tol-mgu/conditional-naming-service/conditional-naming-service.yaml create mode 100644 BMW-Dynatrace-config/CD_tol-mgu/conditional-naming-service/template.json create mode 100644 BMW-Dynatrace-config/CD_tol-tssb/conditional-naming-processgroup/README.md create mode 100644 BMW-Dynatrace-config/CD_tol-tssb/conditional-naming-processgroup/conditional-naming-processgroup.yaml create mode 100644 BMW-Dynatrace-config/CD_tol-tssb/conditional-naming-processgroup/template.json create mode 100644 BMW-Dynatrace-config/CD_tol-tssb/conditional-naming-service/README.md create mode 100644 BMW-Dynatrace-config/CD_tol-tssb/conditional-naming-service/conditional-naming-service.yaml create mode 100644 BMW-Dynatrace-config/CD_tol-tssb/conditional-naming-service/template.json create mode 100644 BMW-Dynatrace-config/CD_tol/conditional-naming-processgroup/README.md create mode 100644 BMW-Dynatrace-config/CD_tol/conditional-naming-processgroup/conditional-naming-processgroup.yaml create mode 100644 BMW-Dynatrace-config/CD_tol/conditional-naming-processgroup/template.json create mode 100644 BMW-Dynatrace-config/CD_tol/conditional-naming-service/README.md create mode 100644 BMW-Dynatrace-config/CD_tol/conditional-naming-service/conditional-naming-service.yaml create mode 100644 BMW-Dynatrace-config/CD_tol/conditional-naming-service/template.json create mode 100644 BMW-Dynatrace-config/CD_trip-change-processor/conditional-naming-processgroup/README.md create mode 100644 BMW-Dynatrace-config/CD_trip-change-processor/conditional-naming-processgroup/conditional-naming-processgroup.yaml create mode 100644 BMW-Dynatrace-config/CD_trip-change-processor/conditional-naming-processgroup/template.json create mode 100644 BMW-Dynatrace-config/CD_trip-change-processor/conditional-naming-service/README.md create mode 100644 BMW-Dynatrace-config/CD_trip-change-processor/conditional-naming-service/conditional-naming-service.yaml create mode 100644 BMW-Dynatrace-config/CD_trip-change-processor/conditional-naming-service/template.json create mode 100644 BMW-Dynatrace-config/CD_trip-cleanup-app-service/conditional-naming-processgroup/README.md create mode 100644 BMW-Dynatrace-config/CD_trip-cleanup-app-service/conditional-naming-processgroup/conditional-naming-processgroup.yaml create mode 100644 BMW-Dynatrace-config/CD_trip-cleanup-app-service/conditional-naming-processgroup/template.json create mode 100644 BMW-Dynatrace-config/CD_trip-cleanup-app-service/conditional-naming-service/README.md create mode 100644 BMW-Dynatrace-config/CD_trip-cleanup-app-service/conditional-naming-service/conditional-naming-service.yaml create mode 100644 BMW-Dynatrace-config/CD_trip-cleanup-app-service/conditional-naming-service/template.json create mode 100644 BMW-Dynatrace-config/CD_trip-monitor-service/conditional-naming-processgroup/README.md create mode 100644 BMW-Dynatrace-config/CD_trip-monitor-service/conditional-naming-processgroup/conditional-naming-processgroup.yaml create mode 100644 BMW-Dynatrace-config/CD_trip-monitor-service/conditional-naming-processgroup/template.json create mode 100644 BMW-Dynatrace-config/CD_trip-monitor-service/conditional-naming-service/README.md create mode 100644 BMW-Dynatrace-config/CD_trip-monitor-service/conditional-naming-service/conditional-naming-service.yaml create mode 100644 BMW-Dynatrace-config/CD_trip-monitor-service/conditional-naming-service/template.json create mode 100644 BMW-Dynatrace-config/CD_trip-reminder-processor/conditional-naming-processgroup/README.md create mode 100644 BMW-Dynatrace-config/CD_trip-reminder-processor/conditional-naming-processgroup/conditional-naming-processgroup.yaml create mode 100644 BMW-Dynatrace-config/CD_trip-reminder-processor/conditional-naming-processgroup/template.json create mode 100644 BMW-Dynatrace-config/CD_trip-reminder-processor/conditional-naming-service/README.md create mode 100644 BMW-Dynatrace-config/CD_trip-reminder-processor/conditional-naming-service/conditional-naming-service.yaml create mode 100644 BMW-Dynatrace-config/CD_trip-reminder-processor/conditional-naming-service/template.json create mode 100644 BMW-Dynatrace-config/CD_trip-route-service/conditional-naming-processgroup/README.md create mode 100644 BMW-Dynatrace-config/CD_trip-route-service/conditional-naming-processgroup/conditional-naming-processgroup.yaml create mode 100644 BMW-Dynatrace-config/CD_trip-route-service/conditional-naming-processgroup/template.json create mode 100644 BMW-Dynatrace-config/CD_trip-route-service/conditional-naming-service/README.md create mode 100644 BMW-Dynatrace-config/CD_trip-route-service/conditional-naming-service/conditional-naming-service.yaml create mode 100644 BMW-Dynatrace-config/CD_trip-route-service/conditional-naming-service/template.json create mode 100644 BMW-Dynatrace-config/CD_trip-service/conditional-naming-processgroup/README.md create mode 100644 BMW-Dynatrace-config/CD_trip-service/conditional-naming-processgroup/conditional-naming-processgroup.yaml create mode 100644 BMW-Dynatrace-config/CD_trip-service/conditional-naming-processgroup/template.json create mode 100644 BMW-Dynatrace-config/CD_trip-service/conditional-naming-service/README.md create mode 100644 BMW-Dynatrace-config/CD_trip-service/conditional-naming-service/conditional-naming-service.yaml create mode 100644 BMW-Dynatrace-config/CD_trip-service/conditional-naming-service/template.json create mode 100644 BMW-Dynatrace-config/CD_ts-bcallservice/conditional-naming-processgroup/README.md create mode 100644 BMW-Dynatrace-config/CD_ts-bcallservice/conditional-naming-processgroup/conditional-naming-processgroup.yaml create mode 100644 BMW-Dynatrace-config/CD_ts-bcallservice/conditional-naming-processgroup/template.json create mode 100644 BMW-Dynatrace-config/CD_ts-bcallservice/conditional-naming-service/README.md create mode 100644 BMW-Dynatrace-config/CD_ts-bcallservice/conditional-naming-service/conditional-naming-service.yaml create mode 100644 BMW-Dynatrace-config/CD_ts-bcallservice/conditional-naming-service/template.json create mode 100644 BMW-Dynatrace-config/CD_ts-bt/conditional-naming-processgroup/README.md create mode 100644 BMW-Dynatrace-config/CD_ts-bt/conditional-naming-processgroup/conditional-naming-processgroup.yaml create mode 100644 BMW-Dynatrace-config/CD_ts-bt/conditional-naming-processgroup/template.json create mode 100644 BMW-Dynatrace-config/CD_ts-bt/conditional-naming-service/README.md create mode 100644 BMW-Dynatrace-config/CD_ts-bt/conditional-naming-service/conditional-naming-service.yaml create mode 100644 BMW-Dynatrace-config/CD_ts-bt/conditional-naming-service/template.json create mode 100644 BMW-Dynatrace-config/CD_ts-bti/conditional-naming-processgroup/README.md create mode 100644 BMW-Dynatrace-config/CD_ts-bti/conditional-naming-processgroup/conditional-naming-processgroup.yaml create mode 100644 BMW-Dynatrace-config/CD_ts-bti/conditional-naming-processgroup/template.json create mode 100644 BMW-Dynatrace-config/CD_ts-bti/conditional-naming-service/README.md create mode 100644 BMW-Dynatrace-config/CD_ts-bti/conditional-naming-service/conditional-naming-service.yaml create mode 100644 BMW-Dynatrace-config/CD_ts-bti/conditional-naming-service/template.json create mode 100644 BMW-Dynatrace-config/CD_ts-cas-spm/conditional-naming-processgroup/README.md create mode 100644 BMW-Dynatrace-config/CD_ts-cas-spm/conditional-naming-processgroup/conditional-naming-processgroup.yaml create mode 100644 BMW-Dynatrace-config/CD_ts-cas-spm/conditional-naming-processgroup/template.json create mode 100644 BMW-Dynatrace-config/CD_ts-cas-spm/conditional-naming-service/README.md create mode 100644 BMW-Dynatrace-config/CD_ts-cas-spm/conditional-naming-service/conditional-naming-service.yaml create mode 100644 BMW-Dynatrace-config/CD_ts-cas-spm/conditional-naming-service/template.json create mode 100644 BMW-Dynatrace-config/CD_ts-cas-stm/conditional-naming-processgroup/README.md create mode 100644 BMW-Dynatrace-config/CD_ts-cas-stm/conditional-naming-processgroup/conditional-naming-processgroup.yaml create mode 100644 BMW-Dynatrace-config/CD_ts-cas-stm/conditional-naming-processgroup/template.json create mode 100644 BMW-Dynatrace-config/CD_ts-cas-stm/conditional-naming-service/README.md create mode 100644 BMW-Dynatrace-config/CD_ts-cas-stm/conditional-naming-service/conditional-naming-service.yaml create mode 100644 BMW-Dynatrace-config/CD_ts-cas-stm/conditional-naming-service/template.json create mode 100644 BMW-Dynatrace-config/CD_ts-datadispatcher/conditional-naming-processgroup/README.md create mode 100644 BMW-Dynatrace-config/CD_ts-datadispatcher/conditional-naming-processgroup/conditional-naming-processgroup.yaml create mode 100644 BMW-Dynatrace-config/CD_ts-datadispatcher/conditional-naming-processgroup/template.json create mode 100644 BMW-Dynatrace-config/CD_ts-datadispatcher/conditional-naming-service/README.md create mode 100644 BMW-Dynatrace-config/CD_ts-datadispatcher/conditional-naming-service/conditional-naming-service.yaml create mode 100644 BMW-Dynatrace-config/CD_ts-datadispatcher/conditional-naming-service/template.json create mode 100644 BMW-Dynatrace-config/CD_ts-diagservice/conditional-naming-processgroup/README.md create mode 100644 BMW-Dynatrace-config/CD_ts-diagservice/conditional-naming-processgroup/conditional-naming-processgroup.yaml create mode 100644 BMW-Dynatrace-config/CD_ts-diagservice/conditional-naming-processgroup/template.json create mode 100644 BMW-Dynatrace-config/CD_ts-diagservice/conditional-naming-service/README.md create mode 100644 BMW-Dynatrace-config/CD_ts-diagservice/conditional-naming-service/conditional-naming-service.yaml create mode 100644 BMW-Dynatrace-config/CD_ts-diagservice/conditional-naming-service/template.json create mode 100644 BMW-Dynatrace-config/CD_ts-eshad/conditional-naming-processgroup/README.md create mode 100644 BMW-Dynatrace-config/CD_ts-eshad/conditional-naming-processgroup/conditional-naming-processgroup.yaml create mode 100644 BMW-Dynatrace-config/CD_ts-eshad/conditional-naming-processgroup/template.json create mode 100644 BMW-Dynatrace-config/CD_ts-eshad/conditional-naming-service/README.md create mode 100644 BMW-Dynatrace-config/CD_ts-eshad/conditional-naming-service/conditional-naming-service.yaml create mode 100644 BMW-Dynatrace-config/CD_ts-eshad/conditional-naming-service/template.json create mode 100644 BMW-Dynatrace-config/CD_ts-message-receiver/conditional-naming-processgroup/README.md create mode 100644 BMW-Dynatrace-config/CD_ts-message-receiver/conditional-naming-processgroup/conditional-naming-processgroup.yaml create mode 100644 BMW-Dynatrace-config/CD_ts-message-receiver/conditional-naming-processgroup/template.json create mode 100644 BMW-Dynatrace-config/CD_ts-message-receiver/conditional-naming-service/README.md create mode 100644 BMW-Dynatrace-config/CD_ts-message-receiver/conditional-naming-service/conditional-naming-service.yaml create mode 100644 BMW-Dynatrace-config/CD_ts-message-receiver/conditional-naming-service/template.json create mode 100644 BMW-Dynatrace-config/CD_ts-pdmupdater/conditional-naming-processgroup/README.md create mode 100644 BMW-Dynatrace-config/CD_ts-pdmupdater/conditional-naming-processgroup/conditional-naming-processgroup.yaml create mode 100644 BMW-Dynatrace-config/CD_ts-pdmupdater/conditional-naming-processgroup/template.json create mode 100644 BMW-Dynatrace-config/CD_ts-pdmupdater/conditional-naming-service/README.md create mode 100644 BMW-Dynatrace-config/CD_ts-pdmupdater/conditional-naming-service/conditional-naming-service.yaml create mode 100644 BMW-Dynatrace-config/CD_ts-pdmupdater/conditional-naming-service/template.json create mode 100644 BMW-Dynatrace-config/CD_ts-pservice/conditional-naming-processgroup/README.md create mode 100644 BMW-Dynatrace-config/CD_ts-pservice/conditional-naming-processgroup/conditional-naming-processgroup.yaml create mode 100644 BMW-Dynatrace-config/CD_ts-pservice/conditional-naming-processgroup/template.json create mode 100644 BMW-Dynatrace-config/CD_ts-pservice/conditional-naming-service/README.md create mode 100644 BMW-Dynatrace-config/CD_ts-pservice/conditional-naming-service/conditional-naming-service.yaml create mode 100644 BMW-Dynatrace-config/CD_ts-pservice/conditional-naming-service/template.json create mode 100644 BMW-Dynatrace-config/CD_ts-remotediagnosis/conditional-naming-processgroup/README.md create mode 100644 BMW-Dynatrace-config/CD_ts-remotediagnosis/conditional-naming-processgroup/conditional-naming-processgroup.yaml create mode 100644 BMW-Dynatrace-config/CD_ts-remotediagnosis/conditional-naming-processgroup/template.json create mode 100644 BMW-Dynatrace-config/CD_ts-remotediagnosis/conditional-naming-service/README.md create mode 100644 BMW-Dynatrace-config/CD_ts-remotediagnosis/conditional-naming-service/conditional-naming-service.yaml create mode 100644 BMW-Dynatrace-config/CD_ts-remotediagnosis/conditional-naming-service/template.json create mode 100644 BMW-Dynatrace-config/CD_ts-rsurservice/conditional-naming-processgroup/README.md create mode 100644 BMW-Dynatrace-config/CD_ts-rsurservice/conditional-naming-processgroup/conditional-naming-processgroup.yaml create mode 100644 BMW-Dynatrace-config/CD_ts-rsurservice/conditional-naming-processgroup/template.json create mode 100644 BMW-Dynatrace-config/CD_ts-rsurservice/conditional-naming-service/README.md create mode 100644 BMW-Dynatrace-config/CD_ts-rsurservice/conditional-naming-service/conditional-naming-service.yaml create mode 100644 BMW-Dynatrace-config/CD_ts-rsurservice/conditional-naming-service/template.json create mode 100644 BMW-Dynatrace-config/CD_ts-rtcadapter/conditional-naming-processgroup/README.md create mode 100644 BMW-Dynatrace-config/CD_ts-rtcadapter/conditional-naming-processgroup/conditional-naming-processgroup.yaml create mode 100644 BMW-Dynatrace-config/CD_ts-rtcadapter/conditional-naming-processgroup/template.json create mode 100644 BMW-Dynatrace-config/CD_ts-rtcadapter/conditional-naming-service/README.md create mode 100644 BMW-Dynatrace-config/CD_ts-rtcadapter/conditional-naming-service/conditional-naming-service.yaml create mode 100644 BMW-Dynatrace-config/CD_ts-rtcadapter/conditional-naming-service/template.json create mode 100644 BMW-Dynatrace-config/CD_ts-rtchandler/conditional-naming-processgroup/README.md create mode 100644 BMW-Dynatrace-config/CD_ts-rtchandler/conditional-naming-processgroup/conditional-naming-processgroup.yaml create mode 100644 BMW-Dynatrace-config/CD_ts-rtchandler/conditional-naming-processgroup/template.json create mode 100644 BMW-Dynatrace-config/CD_ts-rtchandler/conditional-naming-service/README.md create mode 100644 BMW-Dynatrace-config/CD_ts-rtchandler/conditional-naming-service/conditional-naming-service.yaml create mode 100644 BMW-Dynatrace-config/CD_ts-rtchandler/conditional-naming-service/template.json create mode 100644 BMW-Dynatrace-config/CD_ts-rtcservice/conditional-naming-processgroup/README.md create mode 100644 BMW-Dynatrace-config/CD_ts-rtcservice/conditional-naming-processgroup/conditional-naming-processgroup.yaml create mode 100644 BMW-Dynatrace-config/CD_ts-rtcservice/conditional-naming-processgroup/template.json create mode 100644 BMW-Dynatrace-config/CD_ts-rtcservice/conditional-naming-service/README.md create mode 100644 BMW-Dynatrace-config/CD_ts-rtcservice/conditional-naming-service/conditional-naming-service.yaml create mode 100644 BMW-Dynatrace-config/CD_ts-rtcservice/conditional-naming-service/template.json create mode 100644 BMW-Dynatrace-config/CD_ts-scallservice/conditional-naming-processgroup/README.md create mode 100644 BMW-Dynatrace-config/CD_ts-scallservice/conditional-naming-processgroup/conditional-naming-processgroup.yaml create mode 100644 BMW-Dynatrace-config/CD_ts-scallservice/conditional-naming-processgroup/template.json create mode 100644 BMW-Dynatrace-config/CD_ts-scallservice/conditional-naming-service/README.md create mode 100644 BMW-Dynatrace-config/CD_ts-scallservice/conditional-naming-service/conditional-naming-service.yaml create mode 100644 BMW-Dynatrace-config/CD_ts-scallservice/conditional-naming-service/template.json create mode 100644 BMW-Dynatrace-config/CD_ts-tsbgam/conditional-naming-processgroup/README.md create mode 100644 BMW-Dynatrace-config/CD_ts-tsbgam/conditional-naming-processgroup/conditional-naming-processgroup.yaml create mode 100644 BMW-Dynatrace-config/CD_ts-tsbgam/conditional-naming-processgroup/template.json create mode 100644 BMW-Dynatrace-config/CD_ts-tsbgam/conditional-naming-service/README.md create mode 100644 BMW-Dynatrace-config/CD_ts-tsbgam/conditional-naming-service/conditional-naming-service.yaml create mode 100644 BMW-Dynatrace-config/CD_ts-tsbgam/conditional-naming-service/template.json create mode 100644 BMW-Dynatrace-config/CD_ts-tsbgservice/conditional-naming-processgroup/README.md create mode 100644 BMW-Dynatrace-config/CD_ts-tsbgservice/conditional-naming-processgroup/conditional-naming-processgroup.yaml create mode 100644 BMW-Dynatrace-config/CD_ts-tsbgservice/conditional-naming-processgroup/template.json create mode 100644 BMW-Dynatrace-config/CD_ts-tsbgservice/conditional-naming-service/README.md create mode 100644 BMW-Dynatrace-config/CD_ts-tsbgservice/conditional-naming-service/conditional-naming-service.yaml create mode 100644 BMW-Dynatrace-config/CD_ts-tsbgservice/conditional-naming-service/template.json create mode 100644 BMW-Dynatrace-config/CD_ts-tsp/conditional-naming-processgroup/README.md create mode 100644 BMW-Dynatrace-config/CD_ts-tsp/conditional-naming-processgroup/conditional-naming-processgroup.yaml create mode 100644 BMW-Dynatrace-config/CD_ts-tsp/conditional-naming-processgroup/template.json create mode 100644 BMW-Dynatrace-config/CD_ts-tsp/conditional-naming-service/README.md create mode 100644 BMW-Dynatrace-config/CD_ts-tsp/conditional-naming-service/conditional-naming-service.yaml create mode 100644 BMW-Dynatrace-config/CD_ts-tsp/conditional-naming-service/template.json create mode 100644 BMW-Dynatrace-config/CD_ts-wlupdater/conditional-naming-processgroup/README.md create mode 100644 BMW-Dynatrace-config/CD_ts-wlupdater/conditional-naming-processgroup/conditional-naming-processgroup.yaml create mode 100644 BMW-Dynatrace-config/CD_ts-wlupdater/conditional-naming-processgroup/template.json create mode 100644 BMW-Dynatrace-config/CD_ts-wlupdater/conditional-naming-service/README.md create mode 100644 BMW-Dynatrace-config/CD_ts-wlupdater/conditional-naming-service/conditional-naming-service.yaml create mode 100644 BMW-Dynatrace-config/CD_ts-wlupdater/conditional-naming-service/template.json create mode 100644 BMW-Dynatrace-config/CD_tscs/conditional-naming-processgroup/README.md create mode 100644 BMW-Dynatrace-config/CD_tscs/conditional-naming-processgroup/conditional-naming-processgroup.yaml create mode 100644 BMW-Dynatrace-config/CD_tscs/conditional-naming-processgroup/template.json create mode 100644 BMW-Dynatrace-config/CD_tscs/conditional-naming-service/README.md create mode 100644 BMW-Dynatrace-config/CD_tscs/conditional-naming-service/conditional-naming-service.yaml create mode 100644 BMW-Dynatrace-config/CD_tscs/conditional-naming-service/template.json create mode 100644 BMW-Dynatrace-config/CD_tsmb/conditional-naming-processgroup/README.md create mode 100644 BMW-Dynatrace-config/CD_tsmb/conditional-naming-processgroup/conditional-naming-processgroup.yaml create mode 100644 BMW-Dynatrace-config/CD_tsmb/conditional-naming-processgroup/template.json create mode 100644 BMW-Dynatrace-config/CD_tsmb/conditional-naming-service/README.md create mode 100644 BMW-Dynatrace-config/CD_tsmb/conditional-naming-service/conditional-naming-service.yaml create mode 100644 BMW-Dynatrace-config/CD_tsmb/conditional-naming-service/template.json create mode 100644 BMW-Dynatrace-config/CD_tsr-cmr/conditional-naming-processgroup/README.md create mode 100644 BMW-Dynatrace-config/CD_tsr-cmr/conditional-naming-processgroup/conditional-naming-processgroup.yaml create mode 100644 BMW-Dynatrace-config/CD_tsr-cmr/conditional-naming-processgroup/template.json create mode 100644 BMW-Dynatrace-config/CD_tsr-cmr/conditional-naming-service/README.md create mode 100644 BMW-Dynatrace-config/CD_tsr-cmr/conditional-naming-service/conditional-naming-service.yaml create mode 100644 BMW-Dynatrace-config/CD_tsr-cmr/conditional-naming-service/template.json create mode 100644 BMW-Dynatrace-config/CD_tsr-dd/conditional-naming-processgroup/README.md create mode 100644 BMW-Dynatrace-config/CD_tsr-dd/conditional-naming-processgroup/conditional-naming-processgroup.yaml create mode 100644 BMW-Dynatrace-config/CD_tsr-dd/conditional-naming-processgroup/template.json create mode 100644 BMW-Dynatrace-config/CD_tsr-dd/conditional-naming-service/README.md create mode 100644 BMW-Dynatrace-config/CD_tsr-dd/conditional-naming-service/conditional-naming-service.yaml create mode 100644 BMW-Dynatrace-config/CD_tsr-dd/conditional-naming-service/template.json create mode 100644 BMW-Dynatrace-config/CD_tsr-vu/conditional-naming-processgroup/README.md create mode 100644 BMW-Dynatrace-config/CD_tsr-vu/conditional-naming-processgroup/conditional-naming-processgroup.yaml create mode 100644 BMW-Dynatrace-config/CD_tsr-vu/conditional-naming-processgroup/template.json create mode 100644 BMW-Dynatrace-config/CD_tsr-vu/conditional-naming-service/README.md create mode 100644 BMW-Dynatrace-config/CD_tsr-vu/conditional-naming-service/conditional-naming-service.yaml create mode 100644 BMW-Dynatrace-config/CD_tsr-vu/conditional-naming-service/template.json create mode 100644 BMW-Dynatrace-config/CD_tsrservice/conditional-naming-processgroup/README.md create mode 100644 BMW-Dynatrace-config/CD_tsrservice/conditional-naming-processgroup/conditional-naming-processgroup.yaml create mode 100644 BMW-Dynatrace-config/CD_tsrservice/conditional-naming-processgroup/template.json create mode 100644 BMW-Dynatrace-config/CD_tsrservice/conditional-naming-service/README.md create mode 100644 BMW-Dynatrace-config/CD_tsrservice/conditional-naming-service/conditional-naming-service.yaml create mode 100644 BMW-Dynatrace-config/CD_tsrservice/conditional-naming-service/template.json create mode 100644 BMW-Dynatrace-config/CD_user-activity-service/conditional-naming-processgroup/README.md create mode 100644 BMW-Dynatrace-config/CD_user-activity-service/conditional-naming-processgroup/conditional-naming-processgroup.yaml create mode 100644 BMW-Dynatrace-config/CD_user-activity-service/conditional-naming-processgroup/template.json create mode 100644 BMW-Dynatrace-config/CD_user-activity-service/conditional-naming-service/README.md create mode 100644 BMW-Dynatrace-config/CD_user-activity-service/conditional-naming-service/conditional-naming-service.yaml create mode 100644 BMW-Dynatrace-config/CD_user-activity-service/conditional-naming-service/template.json create mode 100644 BMW-Dynatrace-config/CD_user-attributes-service/conditional-naming-processgroup/README.md create mode 100644 BMW-Dynatrace-config/CD_user-attributes-service/conditional-naming-processgroup/conditional-naming-processgroup.yaml create mode 100644 BMW-Dynatrace-config/CD_user-attributes-service/conditional-naming-processgroup/template.json create mode 100644 BMW-Dynatrace-config/CD_user-attributes-service/conditional-naming-service/README.md create mode 100644 BMW-Dynatrace-config/CD_user-attributes-service/conditional-naming-service/conditional-naming-service.yaml create mode 100644 BMW-Dynatrace-config/CD_user-attributes-service/conditional-naming-service/template.json create mode 100644 BMW-Dynatrace-config/CD_user-composite-service/conditional-naming-processgroup/README.md create mode 100644 BMW-Dynatrace-config/CD_user-composite-service/conditional-naming-processgroup/conditional-naming-processgroup.yaml create mode 100644 BMW-Dynatrace-config/CD_user-composite-service/conditional-naming-processgroup/template.json create mode 100644 BMW-Dynatrace-config/CD_user-composite-service/conditional-naming-service/README.md create mode 100644 BMW-Dynatrace-config/CD_user-composite-service/conditional-naming-service/conditional-naming-service.yaml create mode 100644 BMW-Dynatrace-config/CD_user-composite-service/conditional-naming-service/template.json create mode 100644 BMW-Dynatrace-config/CD_user-delete-service/conditional-naming-processgroup/README.md create mode 100644 BMW-Dynatrace-config/CD_user-delete-service/conditional-naming-processgroup/conditional-naming-processgroup.yaml create mode 100644 BMW-Dynatrace-config/CD_user-delete-service/conditional-naming-processgroup/template.json create mode 100644 BMW-Dynatrace-config/CD_user-delete-service/conditional-naming-service/README.md create mode 100644 BMW-Dynatrace-config/CD_user-delete-service/conditional-naming-service/conditional-naming-service.yaml create mode 100644 BMW-Dynatrace-config/CD_user-delete-service/conditional-naming-service/template.json create mode 100644 BMW-Dynatrace-config/CD_user-position-service/conditional-naming-processgroup/README.md create mode 100644 BMW-Dynatrace-config/CD_user-position-service/conditional-naming-processgroup/conditional-naming-processgroup.yaml create mode 100644 BMW-Dynatrace-config/CD_user-position-service/conditional-naming-processgroup/template.json create mode 100644 BMW-Dynatrace-config/CD_user-position-service/conditional-naming-service/README.md create mode 100644 BMW-Dynatrace-config/CD_user-position-service/conditional-naming-service/conditional-naming-service.yaml create mode 100644 BMW-Dynatrace-config/CD_user-position-service/conditional-naming-service/template.json create mode 100644 BMW-Dynatrace-config/CD_user-profile-service/conditional-naming-processgroup/README.md create mode 100644 BMW-Dynatrace-config/CD_user-profile-service/conditional-naming-processgroup/conditional-naming-processgroup.yaml create mode 100644 BMW-Dynatrace-config/CD_user-profile-service/conditional-naming-processgroup/template.json create mode 100644 BMW-Dynatrace-config/CD_user-profile-service/conditional-naming-service/README.md create mode 100644 BMW-Dynatrace-config/CD_user-profile-service/conditional-naming-service/conditional-naming-service.yaml create mode 100644 BMW-Dynatrace-config/CD_user-profile-service/conditional-naming-service/template.json create mode 100644 BMW-Dynatrace-config/CD_usid-filter-service/conditional-naming-processgroup/README.md create mode 100644 BMW-Dynatrace-config/CD_usid-filter-service/conditional-naming-processgroup/conditional-naming-processgroup.yaml create mode 100644 BMW-Dynatrace-config/CD_usid-filter-service/conditional-naming-processgroup/template.json create mode 100644 BMW-Dynatrace-config/CD_usid-filter-service/conditional-naming-service/README.md create mode 100644 BMW-Dynatrace-config/CD_usid-filter-service/conditional-naming-service/conditional-naming-service.yaml create mode 100644 BMW-Dynatrace-config/CD_usid-filter-service/conditional-naming-service/template.json create mode 100644 BMW-Dynatrace-config/CD_vehicle-composite-service/conditional-naming-processgroup/README.md create mode 100644 BMW-Dynatrace-config/CD_vehicle-composite-service/conditional-naming-processgroup/conditional-naming-processgroup.yaml create mode 100644 BMW-Dynatrace-config/CD_vehicle-composite-service/conditional-naming-processgroup/template.json create mode 100644 BMW-Dynatrace-config/CD_vehicle-composite-service/conditional-naming-service/README.md create mode 100644 BMW-Dynatrace-config/CD_vehicle-composite-service/conditional-naming-service/conditional-naming-service.yaml create mode 100644 BMW-Dynatrace-config/CD_vehicle-composite-service/conditional-naming-service/template.json create mode 100644 BMW-Dynatrace-config/CD_vehicle-features-service/conditional-naming-processgroup/README.md create mode 100644 BMW-Dynatrace-config/CD_vehicle-features-service/conditional-naming-processgroup/conditional-naming-processgroup.yaml create mode 100644 BMW-Dynatrace-config/CD_vehicle-features-service/conditional-naming-processgroup/template.json create mode 100644 BMW-Dynatrace-config/CD_vehicle-features-service/conditional-naming-service/README.md create mode 100644 BMW-Dynatrace-config/CD_vehicle-features-service/conditional-naming-service/conditional-naming-service.yaml create mode 100644 BMW-Dynatrace-config/CD_vehicle-features-service/conditional-naming-service/template.json create mode 100644 BMW-Dynatrace-config/CD_vehicle-list-proxy-service/conditional-naming-processgroup/README.md create mode 100644 BMW-Dynatrace-config/CD_vehicle-list-proxy-service/conditional-naming-processgroup/conditional-naming-processgroup.yaml create mode 100644 BMW-Dynatrace-config/CD_vehicle-list-proxy-service/conditional-naming-processgroup/template.json create mode 100644 BMW-Dynatrace-config/CD_vehicle-list-proxy-service/conditional-naming-service/README.md create mode 100644 BMW-Dynatrace-config/CD_vehicle-list-proxy-service/conditional-naming-service/conditional-naming-service.yaml create mode 100644 BMW-Dynatrace-config/CD_vehicle-list-proxy-service/conditional-naming-service/template.json create mode 100644 BMW-Dynatrace-config/CD_vehicle-mapping-composite-service/conditional-naming-processgroup/README.md create mode 100644 BMW-Dynatrace-config/CD_vehicle-mapping-composite-service/conditional-naming-processgroup/conditional-naming-processgroup.yaml create mode 100644 BMW-Dynatrace-config/CD_vehicle-mapping-composite-service/conditional-naming-processgroup/template.json create mode 100644 BMW-Dynatrace-config/CD_vehicle-mapping-composite-service/conditional-naming-service/README.md create mode 100644 BMW-Dynatrace-config/CD_vehicle-mapping-composite-service/conditional-naming-service/conditional-naming-service.yaml create mode 100644 BMW-Dynatrace-config/CD_vehicle-mapping-composite-service/conditional-naming-service/template.json create mode 100644 BMW-Dynatrace-config/CD_vehicle-mapping-service/conditional-naming-processgroup/README.md create mode 100644 BMW-Dynatrace-config/CD_vehicle-mapping-service/conditional-naming-processgroup/conditional-naming-processgroup.yaml create mode 100644 BMW-Dynatrace-config/CD_vehicle-mapping-service/conditional-naming-processgroup/template.json create mode 100644 BMW-Dynatrace-config/CD_vehicle-mapping-service/conditional-naming-service/README.md create mode 100644 BMW-Dynatrace-config/CD_vehicle-mapping-service/conditional-naming-service/conditional-naming-service.yaml create mode 100644 BMW-Dynatrace-config/CD_vehicle-mapping-service/conditional-naming-service/template.json create mode 100644 BMW-Dynatrace-config/CD_vehicle-remote-commands-composite-service/conditional-naming-processgroup/README.md create mode 100644 BMW-Dynatrace-config/CD_vehicle-remote-commands-composite-service/conditional-naming-processgroup/conditional-naming-processgroup.yaml create mode 100644 BMW-Dynatrace-config/CD_vehicle-remote-commands-composite-service/conditional-naming-processgroup/template.json create mode 100644 BMW-Dynatrace-config/CD_vehicle-remote-commands-composite-service/conditional-naming-service/README.md create mode 100644 BMW-Dynatrace-config/CD_vehicle-remote-commands-composite-service/conditional-naming-service/conditional-naming-service.yaml create mode 100644 BMW-Dynatrace-config/CD_vehicle-remote-commands-composite-service/conditional-naming-service/template.json create mode 100644 BMW-Dynatrace-config/CD_vehicle-service-alert/conditional-naming-processgroup/README.md create mode 100644 BMW-Dynatrace-config/CD_vehicle-service-alert/conditional-naming-processgroup/conditional-naming-processgroup.yaml create mode 100644 BMW-Dynatrace-config/CD_vehicle-service-alert/conditional-naming-processgroup/template.json create mode 100644 BMW-Dynatrace-config/CD_vehicle-service-alert/conditional-naming-service/README.md create mode 100644 BMW-Dynatrace-config/CD_vehicle-service-alert/conditional-naming-service/conditional-naming-service.yaml create mode 100644 BMW-Dynatrace-config/CD_vehicle-service-alert/conditional-naming-service/template.json create mode 100644 BMW-Dynatrace-config/CD_vehicle-service-background/conditional-naming-processgroup/README.md create mode 100644 BMW-Dynatrace-config/CD_vehicle-service-background/conditional-naming-processgroup/conditional-naming-processgroup.yaml create mode 100644 BMW-Dynatrace-config/CD_vehicle-service-background/conditional-naming-processgroup/template.json create mode 100644 BMW-Dynatrace-config/CD_vehicle-service-background/conditional-naming-service/README.md create mode 100644 BMW-Dynatrace-config/CD_vehicle-service-background/conditional-naming-service/conditional-naming-service.yaml create mode 100644 BMW-Dynatrace-config/CD_vehicle-service-background/conditional-naming-service/template.json create mode 100644 BMW-Dynatrace-config/CD_vehicle-service-staging/conditional-naming-processgroup/README.md create mode 100644 BMW-Dynatrace-config/CD_vehicle-service-staging/conditional-naming-processgroup/conditional-naming-processgroup.yaml create mode 100644 BMW-Dynatrace-config/CD_vehicle-service-staging/conditional-naming-processgroup/template.json create mode 100644 BMW-Dynatrace-config/CD_vehicle-service-staging/conditional-naming-service/README.md create mode 100644 BMW-Dynatrace-config/CD_vehicle-service-staging/conditional-naming-service/conditional-naming-service.yaml create mode 100644 BMW-Dynatrace-config/CD_vehicle-service-staging/conditional-naming-service/template.json create mode 100644 BMW-Dynatrace-config/CD_vehicle-shadow-event-processor/conditional-naming-processgroup/README.md create mode 100644 BMW-Dynatrace-config/CD_vehicle-shadow-event-processor/conditional-naming-processgroup/conditional-naming-processgroup.yaml create mode 100644 BMW-Dynatrace-config/CD_vehicle-shadow-event-processor/conditional-naming-processgroup/template.json create mode 100644 BMW-Dynatrace-config/CD_vehicle-shadow-event-processor/conditional-naming-service/README.md create mode 100644 BMW-Dynatrace-config/CD_vehicle-shadow-event-processor/conditional-naming-service/conditional-naming-service.yaml create mode 100644 BMW-Dynatrace-config/CD_vehicle-shadow-event-processor/conditional-naming-service/template.json create mode 100644 BMW-Dynatrace-config/CD_vehicle-status-proxy-service/conditional-naming-processgroup/README.md create mode 100644 BMW-Dynatrace-config/CD_vehicle-status-proxy-service/conditional-naming-processgroup/conditional-naming-processgroup.yaml create mode 100644 BMW-Dynatrace-config/CD_vehicle-status-proxy-service/conditional-naming-processgroup/template.json create mode 100644 BMW-Dynatrace-config/CD_vehicle-status-proxy-service/conditional-naming-service/README.md create mode 100644 BMW-Dynatrace-config/CD_vehicle-status-proxy-service/conditional-naming-service/conditional-naming-service.yaml create mode 100644 BMW-Dynatrace-config/CD_vehicle-status-proxy-service/conditional-naming-service/template.json create mode 100644 BMW-Dynatrace-config/CD_vehicle-user-relationship-service/conditional-naming-processgroup/README.md create mode 100644 BMW-Dynatrace-config/CD_vehicle-user-relationship-service/conditional-naming-processgroup/conditional-naming-processgroup.yaml create mode 100644 BMW-Dynatrace-config/CD_vehicle-user-relationship-service/conditional-naming-processgroup/template.json create mode 100644 BMW-Dynatrace-config/CD_vehicle-user-relationship-service/conditional-naming-service/README.md create mode 100644 BMW-Dynatrace-config/CD_vehicle-user-relationship-service/conditional-naming-service/conditional-naming-service.yaml create mode 100644 BMW-Dynatrace-config/CD_vehicle-user-relationship-service/conditional-naming-service/template.json create mode 100644 BMW-Dynatrace-config/CD_vin-list-generator-service/conditional-naming-processgroup/README.md create mode 100644 BMW-Dynatrace-config/CD_vin-list-generator-service/conditional-naming-processgroup/conditional-naming-processgroup.yaml create mode 100644 BMW-Dynatrace-config/CD_vin-list-generator-service/conditional-naming-processgroup/template.json create mode 100644 BMW-Dynatrace-config/CD_vin-list-generator-service/conditional-naming-service/README.md create mode 100644 BMW-Dynatrace-config/CD_vin-list-generator-service/conditional-naming-service/conditional-naming-service.yaml create mode 100644 BMW-Dynatrace-config/CD_vin-list-generator-service/conditional-naming-service/template.json create mode 100644 BMW-Dynatrace-config/CD_vps-admin/conditional-naming-processgroup/README.md create mode 100644 BMW-Dynatrace-config/CD_vps-admin/conditional-naming-processgroup/conditional-naming-processgroup.yaml create mode 100644 BMW-Dynatrace-config/CD_vps-admin/conditional-naming-processgroup/template.json create mode 100644 BMW-Dynatrace-config/CD_vps-admin/conditional-naming-service/README.md create mode 100644 BMW-Dynatrace-config/CD_vps-admin/conditional-naming-service/conditional-naming-service.yaml create mode 100644 BMW-Dynatrace-config/CD_vps-admin/conditional-naming-service/template.json create mode 100644 BMW-Dynatrace-config/CD_vps-archive/conditional-naming-processgroup/README.md create mode 100644 BMW-Dynatrace-config/CD_vps-archive/conditional-naming-processgroup/conditional-naming-processgroup.yaml create mode 100644 BMW-Dynatrace-config/CD_vps-archive/conditional-naming-processgroup/template.json create mode 100644 BMW-Dynatrace-config/CD_vps-archive/conditional-naming-service/README.md create mode 100644 BMW-Dynatrace-config/CD_vps-archive/conditional-naming-service/conditional-naming-service.yaml create mode 100644 BMW-Dynatrace-config/CD_vps-archive/conditional-naming-service/template.json create mode 100644 BMW-Dynatrace-config/CD_vps-monitor/conditional-naming-processgroup/README.md create mode 100644 BMW-Dynatrace-config/CD_vps-monitor/conditional-naming-processgroup/conditional-naming-processgroup.yaml create mode 100644 BMW-Dynatrace-config/CD_vps-monitor/conditional-naming-processgroup/template.json create mode 100644 BMW-Dynatrace-config/CD_vps-monitor/conditional-naming-service/README.md create mode 100644 BMW-Dynatrace-config/CD_vps-monitor/conditional-naming-service/conditional-naming-service.yaml create mode 100644 BMW-Dynatrace-config/CD_vps-monitor/conditional-naming-service/template.json create mode 100644 BMW-Dynatrace-config/CD_vps-prov/conditional-naming-processgroup/README.md create mode 100644 BMW-Dynatrace-config/CD_vps-prov/conditional-naming-processgroup/conditional-naming-processgroup.yaml create mode 100644 BMW-Dynatrace-config/CD_vps-prov/conditional-naming-processgroup/template.json create mode 100644 BMW-Dynatrace-config/CD_vps-prov/conditional-naming-service/README.md create mode 100644 BMW-Dynatrace-config/CD_vps-prov/conditional-naming-service/conditional-naming-service.yaml create mode 100644 BMW-Dynatrace-config/CD_vps-prov/conditional-naming-service/template.json create mode 100644 BMW-Dynatrace-config/CD_vps-trigger/conditional-naming-processgroup/README.md create mode 100644 BMW-Dynatrace-config/CD_vps-trigger/conditional-naming-processgroup/conditional-naming-processgroup.yaml create mode 100644 BMW-Dynatrace-config/CD_vps-trigger/conditional-naming-processgroup/template.json create mode 100644 BMW-Dynatrace-config/CD_vps-trigger/conditional-naming-service/README.md create mode 100644 BMW-Dynatrace-config/CD_vps-trigger/conditional-naming-service/conditional-naming-service.yaml create mode 100644 BMW-Dynatrace-config/CD_vps-trigger/conditional-naming-service/template.json create mode 100644 BMW-Dynatrace-config/CD_vs-api/conditional-naming-processgroup/README.md create mode 100644 BMW-Dynatrace-config/CD_vs-api/conditional-naming-processgroup/conditional-naming-processgroup.yaml create mode 100644 BMW-Dynatrace-config/CD_vs-api/conditional-naming-processgroup/template.json create mode 100644 BMW-Dynatrace-config/CD_vs-api/conditional-naming-service/README.md create mode 100644 BMW-Dynatrace-config/CD_vs-api/conditional-naming-service/conditional-naming-service.yaml create mode 100644 BMW-Dynatrace-config/CD_vs-api/conditional-naming-service/template.json create mode 100644 BMW-Dynatrace-config/CD_webapi/conditional-naming-processgroup/README.md create mode 100644 BMW-Dynatrace-config/CD_webapi/conditional-naming-processgroup/conditional-naming-processgroup.yaml create mode 100644 BMW-Dynatrace-config/CD_webapi/conditional-naming-processgroup/template.json create mode 100644 BMW-Dynatrace-config/CD_webapi/conditional-naming-service/README.md create mode 100644 BMW-Dynatrace-config/CD_webapi/conditional-naming-service/conditional-naming-service.yaml create mode 100644 BMW-Dynatrace-config/CD_webapi/conditional-naming-service/template.json create mode 100644 BMW-Dynatrace-config/CD_wlmanager/conditional-naming-processgroup/README.md create mode 100644 BMW-Dynatrace-config/CD_wlmanager/conditional-naming-processgroup/conditional-naming-processgroup.yaml create mode 100644 BMW-Dynatrace-config/CD_wlmanager/conditional-naming-processgroup/template.json create mode 100644 BMW-Dynatrace-config/CD_wlmanager/conditional-naming-service/README.md create mode 100644 BMW-Dynatrace-config/CD_wlmanager/conditional-naming-service/conditional-naming-service.yaml create mode 100644 BMW-Dynatrace-config/CD_wlmanager/conditional-naming-service/template.json create mode 100644 BMW-Dynatrace-config/CD_xfcd/conditional-naming-processgroup/README.md create mode 100644 BMW-Dynatrace-config/CD_xfcd/conditional-naming-processgroup/conditional-naming-processgroup.yaml create mode 100644 BMW-Dynatrace-config/CD_xfcd/conditional-naming-processgroup/template.json create mode 100644 BMW-Dynatrace-config/CD_xfcd/conditional-naming-service/README.md create mode 100644 BMW-Dynatrace-config/CD_xfcd/conditional-naming-service/conditional-naming-service.yaml create mode 100644 BMW-Dynatrace-config/CD_xfcd/conditional-naming-service/template.json diff --git a/BMW-Dynatrace-config/CD_APIGW/alerting-profile/alerting-profile.yaml b/BMW-Dynatrace-config/CD_APIGW/alerting-profile/alerting-profile.yaml new file mode 100644 index 00000000..30567a75 --- /dev/null +++ b/BMW-Dynatrace-config/CD_APIGW/alerting-profile/alerting-profile.yaml @@ -0,0 +1,60 @@ +config: +- CDAPIGW-PROD: default.json +- CDAPIGW-INT: default.json + +#Prod alerting profiles for EMEA/NA/CN +#Dry-run needed for all hubs +CDAPIGW-PROD: +- name: CD_APIGW PROD +- tag: APIGW +- mzId: CD_APIGW/management-zone/CDAPIGW.id +- env: PROD +- skipDeployment: "true" +#Configuration +CDAPIGW-PROD.EMEA-Prod: +- name: CD_APIGW PROD +- tag: APIGW +- mzId: CD_APIGW/management-zone/CDAPIGW.id +- env: PROD +- skipDeployment: "false" +CDAPIGW-PROD.NA-Prod: +- name: CD_APIGW PROD +- tag: APIGW +- mzId: CD_APIGW/management-zone/CDAPIGW.id +- env: PROD +- skipDeployment: "false" +CDAPIGW-PROD.CN-Prod: +- name: CD_APIGW PROD +- tag: APIGW +- mzId: CD_APIGW/management-zone/CDAPIGW.id +- env: PROD +- skipDeployment: "false" + + +#INT alerting profiles for EMEA/NA/CN +#Dry-run needed for all hubs +CDAPIGW-INT: +- name: CD_APIGW INT +- tag: APIGW +- mzId: CD_APIGW/management-zone/CDAPIGW.id +- env: INT +- skipDeployment: "true" +#Configuration +CDAPIGW-INT.EMEA-PreProd: +- name: CD_APIGW INT +- tag: APIGW +- mzId: CD_APIGW/management-zone/CDAPIGW.id +- env: INT +- skipDeployment: "false" +CDAPIGW-INT.NA-PreProd: +- name: CD_APIGW INT +- tag: APIGW +- mzId: CD_APIGW/management-zone/CDAPIGW.id +- env: INT +- skipDeployment: "false" +CDAPIGW-INT.CN-PreProd: +- name: CD_APIGW INT +- tag: APIGW +- mzId: CD_APIGW/management-zone/CDAPIGW.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_Perseus/alerting-profile/Perseus.json b/BMW-Dynatrace-config/CD_APIGW/alerting-profile/default.json similarity index 83% rename from BMW-Dynatrace-config/CD_Perseus/alerting-profile/Perseus.json rename to BMW-Dynatrace-config/CD_APIGW/alerting-profile/default.json index 716b4176..681a4c64 100644 --- a/BMW-Dynatrace-config/CD_Perseus/alerting-profile/Perseus.json +++ b/BMW-Dynatrace-config/CD_APIGW/alerting-profile/default.json @@ -98,25 +98,6 @@ } ] } - }, - { - "delayInMinutes": 0, - "severityLevel": "MONITORING_UNAVAILABLE", - "tagFilter": { - "includeMode": "INCLUDE_ALL", - "tagFilters": [ - { - "context": "CONTEXTLESS", - "key": "Component", - "value": "{{.tag}}" - }, - { - "context": "CONTEXTLESS", - "key": "Environment", - "value": "{{.env}}" - } - ] - } } ] } \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_APIGW/calculated-metrics-service/README.md b/BMW-Dynatrace-config/CD_APIGW/calculated-metrics-service/README.md new file mode 100644 index 00000000..0bf8efbc --- /dev/null +++ b/BMW-Dynatrace-config/CD_APIGW/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_APIGW/conditional-naming-processgroup/README.md b/BMW-Dynatrace-config/CD_APIGW/conditional-naming-processgroup/README.md new file mode 100644 index 00000000..f94196a5 --- /dev/null +++ b/BMW-Dynatrace-config/CD_APIGW/conditional-naming-processgroup/README.md @@ -0,0 +1,67 @@ +### Process Group Detection Rules and Naming + +#### Detection Rule or Naming? + +For the explanation, we're using a real example of the Infotainment application: + +!(PGNaming1)[../../../../img/PGNaming1.PNG] + +Before working with your dashboards and alerting profiles, an important task to do when working with Dynatrace is checking +the structure of your applications (process groups). You can do that clicking under *technologies* and filter using your +application Management Zone. + +In the picture above, there are two Process Groups called bon-information-prod. **If you see duplicated process groups like in** +**this case, you MUST follow this guideline** + +Next step would be to open both process groups and compare the metadata. In that way, you can identify if all process instances are +part of the same application or not. An easy way to do that is asking yourself: how many instances of my application do i have? + +If you have 4 instances in total and you're able to see 2 in one PG and other 2 in other PG it means that **they are part of the ** +**same application** + +Another situation could be that checking on the metadata, then you see that are **two different application** and Dynatrace is just naming +the process group in the same way + +*Same application* +- Problem: Dynatrace is creating two different process groups, what transalates in two separated services for the same application. Instead of +seeing all the traffic in one service, you will have it splitted and it will complicate your monitoring +- Solution: create a process group detection rule. Contact Dynatrace Expert + +*Different application* +- Problem: Dynatrace is just naming in the same way applications that are different. +- Solution: This case is less severe, since it can be fixed with a process group naming rule. + + +What about our example? +!(PGNaming2)[../../../../img/PGNaming2.PNG] +!(PGNaming3)[../../../../img/PGNaming3.PNG] + +Based on the feedback of the infotaiment team, each process group is a different application (microservice) and it's visible in the kubernetes container/workload +within the metadata of each Process Group. + +#### How to create a Process Group Detection Rule +1. Open the *conditional-naming-processgroup.yaml* file and create a rule that looks like this: +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName} +- tag: Infotainment +- skipDeployment: false +``` +The result of the rule will be renaming the PG to this: +``` +bon-information-prod ipa +bon-information-prod rsl +``` + +Other possible placeholders that you can use are for example: +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName/[^\\-]*$} +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesFullPodName/buffet-(.*?)-} +{ProcessGroup:DetectedName} - {HostGroup:Name/[^\\_]*$} +{ProcessGroup:KubernetesNamespace} +{ProcessGroup:CommandLineArgs/.*?\\-f\\s\\/www\\/(.*?)\\/generated\\/httpd\\.conf.*?} + +You can combine different ones. Check the (documentation)[link] for more \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_APIGW/conditional-naming-processgroup/conditional-naming-processgroup.yaml b/BMW-Dynatrace-config/CD_APIGW/conditional-naming-processgroup/conditional-naming-processgroup.yaml new file mode 100644 index 00000000..b928a3e7 --- /dev/null +++ b/BMW-Dynatrace-config/CD_APIGW/conditional-naming-processgroup/conditional-naming-processgroup.yaml @@ -0,0 +1,8 @@ +config: +- CDAPIGW: template.json + +CDAPIGW: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: APIGW +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_APIGW/conditional-naming-processgroup/template.json b/BMW-Dynatrace-config/CD_APIGW/conditional-naming-processgroup/template.json new file mode 100644 index 00000000..7c039808 --- /dev/null +++ b/BMW-Dynatrace-config/CD_APIGW/conditional-naming-processgroup/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "type": "PROCESS_GROUP" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_APIGW/conditional-naming-service/README.md b/BMW-Dynatrace-config/CD_APIGW/conditional-naming-service/README.md new file mode 100644 index 00000000..c34ef308 --- /dev/null +++ b/BMW-Dynatrace-config/CD_APIGW/conditional-naming-service/README.md @@ -0,0 +1,35 @@ +### Service Naming Rules + +A typical case could be that you access to *Transaction & Services* and you find two services that are exactly the same: +*DataDownloadV1* +*DataDownloadV1* + +If you drilldown into the service and you check in the process group, you may have a PROD and a E2E for each service. + +*Note: if you see that both process group are exactly the same, please contact a Dynatrace expert to create a Process* +*Group detection rule* + +In the case the PG are PROD and E2E, then we need to create a rule that looks like this: + +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {Service:DetectedName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +- tag: Infotainment +- skipDeployment: false +``` + +The rule will get the Service Detected Name (current name) and it will extract (with a regex) the part of the kubernetes namespace after the "-", so -prod or -e2e, resulting in: +*DataDownloadV1 - prod* +*DataDownloadV1 - e2e* + +Now, services will be easy to identify. + +You can create rules based on any property/metadata. Some other placeholder's eamples: +{Service:DatabaseName} - E2E +{Service:WebServiceName} - {ProcessGroup:Kubernetes:microservice} - {ProcessGroup:Kubernetes:environment} +{Service:DetectedName} - {ProcessGroup:KubernetesContainerName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +{Service:DetectedName} - {ProcessGroup:SpringBootProfileName/[^\\-]*$} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_APIGW/conditional-naming-service/conditional-naming-service.yaml b/BMW-Dynatrace-config/CD_APIGW/conditional-naming-service/conditional-naming-service.yaml new file mode 100644 index 00000000..b928a3e7 --- /dev/null +++ b/BMW-Dynatrace-config/CD_APIGW/conditional-naming-service/conditional-naming-service.yaml @@ -0,0 +1,8 @@ +config: +- CDAPIGW: template.json + +CDAPIGW: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: APIGW +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_APIGW/conditional-naming-service/template.json b/BMW-Dynatrace-config/CD_APIGW/conditional-naming-service/template.json new file mode 100644 index 00000000..5d4fac56 --- /dev/null +++ b/BMW-Dynatrace-config/CD_APIGW/conditional-naming-service/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "type": "SERVICE" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_APIGW/custom-service-java/README.md b/BMW-Dynatrace-config/CD_APIGW/custom-service-java/README.md new file mode 100644 index 00000000..5f35e5c1 --- /dev/null +++ b/BMW-Dynatrace-config/CD_APIGW/custom-service-java/README.md @@ -0,0 +1,4 @@ + +### How to configure custom services? + +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Custom+Services) page to configure your custom services. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_APIGW/custom-service-java/custom-service-java.yaml b/BMW-Dynatrace-config/CD_APIGW/custom-service-java/custom-service-java.yaml new file mode 100644 index 00000000..25f8a028 --- /dev/null +++ b/BMW-Dynatrace-config/CD_APIGW/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_APIGW/custom-service-java/template-1-1.json b/BMW-Dynatrace-config/CD_APIGW/custom-service-java/template-1-1.json new file mode 100644 index 00000000..b3003515 --- /dev/null +++ b/BMW-Dynatrace-config/CD_APIGW/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_APIGW/dashboard/README.md b/BMW-Dynatrace-config/CD_APIGW/dashboard/README.md new file mode 100644 index 00000000..dffcdc8a --- /dev/null +++ b/BMW-Dynatrace-config/CD_APIGW/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_APIGW/dashboard/dashboard.yaml b/BMW-Dynatrace-config/CD_APIGW/dashboard/dashboard.yaml new file mode 100644 index 00000000..0867ad18 --- /dev/null +++ b/BMW-Dynatrace-config/CD_APIGW/dashboard/dashboard.yaml @@ -0,0 +1,127 @@ +config: +- CDAPIGW-PROD: default.json +- CDAPIGW-E2E: default.json +- CDAPIGW-INT: default.json +- CDAPIGW-TEST: default.json + +#PROD dashboards for EMEA/NA/CN Prod +#Dry-run needed for all hubs +CDAPIGW-PROD: +- name: CD_APIGW PROD +- mzName: CD_APIGW/management-zone/CDAPIGW.name +- mzId: CD_APIGW/management-zone/CDAPIGW.id +- env: PROD +- skipDeployment: "true" +#Configuration +CDAPIGW-PROD.EMEA-Prod: +- name: CD_APIGW PROD +- mzName: CD_APIGW/management-zone/CDAPIGW.name +- mzId: CD_APIGW/management-zone/CDAPIGW.id +- tag: APIGW +- env: PROD +- skipDeployment: "false" +CDAPIGW-PROD.NA-Prod: +- name: CD_APIGW PROD +- mzName: CD_APIGW/management-zone/CDAPIGW.name +- mzId: CD_APIGW/management-zone/CDAPIGW.id +- tag: APIGW +- env: PROD +- skipDeployment: "false" +CDAPIGW-PROD.CN-Prod: +- name: CD_APIGW PROD +- mzName: CD_APIGW/management-zone/CDAPIGW.name +- mzId: CD_APIGW/management-zone/CDAPIGW.id +- tag: APIGW +- env: PROD +- skipDeployment: "false" + +#E2E dashboards for EMEA/NA/CN E2E +#Dry-run needed for all hubs +CDAPIGW-E2E: +- name: CD_APIGW E2E +- mzName: CD_APIGW/management-zone/CDAPIGW.name +- mzId: CD_APIGW/management-zone/CDAPIGW.id +- env: E2E +- skipDeployment: "true" +#Configuration +CDAPIGW-E2E.EMEA-Prod: +- name: CD_APIGW E2E +- mzName: CD_APIGW/management-zone/CDAPIGW.name +- mzId: CD_APIGW/management-zone/CDAPIGW.id +- env: E2E +- tag: APIGW +- skipDeployment: "true" +CDAPIGW-E2E.NA-Prod: +- name: CD_APIGW E2E +- mzName: CD_APIGW/management-zone/CDAPIGW.name +- mzId: CD_APIGW/management-zone/CDAPIGW.id +- env: E2E +- tag: APIGW +- skipDeployment: "true" +CDAPIGW-E2E.CN-Prod: +- name: CD_APIGW E2E +- mzName: CD_APIGW/management-zone/CDAPIGW.name +- mzId: CD_APIGW/management-zone/CDAPIGW.id +- env: E2E +- tag: APIGW +- skipDeployment: "true" + +#INT dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDAPIGW-INT: +- name: CD_APIGW INT +- mzName: CD_APIGW/management-zone/CDAPIGW.name +- mzId: CD_APIGW/management-zone/CDAPIGW.id +- env: INT +- tag: APIGW +- skipDeployment: "true" +#Configuration +CDAPIGW-INT.EMEA-PreProd: +- name: CD_APIGW INT +- mzName: CD_APIGW/management-zone/CDAPIGW.name +- mzId: CD_APIGW/management-zone/CDAPIGW.id +- env: INT +- tag: APIGW +- skipDeployment: "false" +CDAPIGW-INT.NA-PreProd: +- name: CD_APIGW INT +- mzName: CD_APIGW/management-zone/CDAPIGW.name +- mzId: CD_APIGW/management-zone/CDAPIGW.id +- env: INT +- skipDeployment: "false" +CDAPIGW-INT.CN-PreProd: +- name: CD_APIGW INT +- mzName: CD_APIGW/management-zone/CDAPIGW.name +- mzId: CD_APIGW/management-zone/CDAPIGW.id +- env: INT +- skipDeployment: "false" + +#TEST dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDAPIGW-TEST: +- name: CD_APIGW TEST +- mzName: CD_APIGW/management-zone/CDAPIGW.name +- mzId: CD_APIGW/management-zone/CDAPIGW.id +- tag: APIGW +- env: TEST +- skipDeployment: "true" +#Configuration +CDAPIGW-TEST.EMEA-PreProd: +- name: CD_APIGW TEST +- mzName: CD_APIGW/management-zone/CDAPIGW.name +- mzId: CD_APIGW/management-zone/CDAPIGW.id +- tag: APIGW +- env: TEST +- skipDeployment: "false" +CDAPIGW-TEST.NA-PreProd: +- name: CD_APIGW TEST +- mzName: CD_APIGW/management-zone/CDAPIGW.name +- mzId: CD_APIGW/management-zone/CDAPIGW.id +- env: TEST +- skipDeployment: "false" +CDAPIGW-TEST.CN-PreProd: +- name: CD_APIGW TEST +- mzName: CD_APIGW/management-zone/CDAPIGW.name +- mzId: CD_APIGW/management-zone/CDAPIGW.id +- env: TEST +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_APIGW/dashboard/default.json b/BMW-Dynatrace-config/CD_APIGW/dashboard/default.json new file mode 100644 index 00000000..6c685810 --- /dev/null +++ b/BMW-Dynatrace-config/CD_APIGW/dashboard/default.json @@ -0,0 +1,308 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.214.107.20210407-223952" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": true, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "timeframe": "-24h to now" + }, + "tags": [ + "{{.tag}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 228, + "left": 38, + "width": 1064, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Failure rate (HTTP 4xx/5xx errors)", + "defaultName": "Custom chart", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [ + { + "metric": "builtin:service.errors.fourxx.rate", + "aggregation": "AVG", + "type": "BAR", + "entityType": "SERVICE", + "dimensions": [], + "sortAscending": false, + "sortColumn": false, + "aggregationRate": "TOTAL" + }, + { + "metric": "builtin:service.errors.fivexx.rate", + "aggregation": "AVG", + "type": "BAR", + "entityType": "SERVICE", + "dimensions": [], + "sortAscending": false, + "sortColumn": true, + "aggregationRate": "TOTAL" + } + ], + "resultMetadata": { + "nullbuiltin:service.errors.fivexx.rate|AVG|TOTAL|BAR|SERVICE": { + "lastModified": 1617956393463, + "customColor": "#ff0000" + }, + "nullbuiltin:service.errors.fourxx.rate|AVG|TOTAL|BAR|SERVICE": { + "lastModified": 1617956441725, + "customColor": "#fff29a" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:{{.env}}", + "Component:{{.tag}}" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 38, + "left": 950, + "width": 152, + "height": 152 + }, + "tileFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + } + }, + { + "name": "Overall Health", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 0, + "left": 38, + "width": 1064, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 532, + "left": 38, + "width": 1064, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 570, + "left": 38, + "width": 1064, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Request Count and Number of Errors", + "defaultName": "Custom chart", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [ + { + "metric": "builtin:service.response.time", + "aggregation": "AVG", + "type": "LINE", + "entityType": "SERVICE", + "dimensions": [], + "sortAscending": false, + "sortColumn": false, + "aggregationRate": "TOTAL" + }, + { + "metric": "builtin:service.requestCount.total", + "aggregation": "NONE", + "type": "BAR", + "entityType": "SERVICE", + "dimensions": [], + "sortAscending": false, + "sortColumn": false, + "aggregationRate": "TOTAL" + }, + { + "metric": "builtin:service.errors.total.count", + "aggregation": "NONE", + "type": "BAR", + "entityType": "SERVICE", + "dimensions": [], + "sortAscending": false, + "sortColumn": true, + "aggregationRate": "TOTAL" + } + ], + "resultMetadata": { + "nullbuiltin:service.requestCount.total|NONE|TOTAL|BAR|SERVICE": { + "lastModified": 1595275720776, + "customColor": "#008cdb" + }, + "nullbuiltin:service.errors.total.count|NONE|TOTAL|BAR|SERVICE": { + "lastModified": 1595275955999, + "customColor": "#ef651f" + }, + "nullbuiltin:service.response.time|AVG|TOTAL|LINE|SERVICE": { + "lastModified": 1595275686773, + "customColor": "#b4e5f9" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:{{.env}}", + "Component:{{.tag}}" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 190, + "left": 38, + "width": 1064, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 38, + "left": 646, + "width": 190, + "height": 152 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:{{.env}}", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 38, + "left": 342, + "width": 190, + "height": 152 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:{{.env}}", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 190, + "height": 152 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:{{.env}}", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_APIGW/notification/README.md b/BMW-Dynatrace-config/CD_APIGW/notification/README.md new file mode 100644 index 00000000..e1a6af84 --- /dev/null +++ b/BMW-Dynatrace-config/CD_APIGW/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_Perseus/notification/CDPerseus-Email.json b/BMW-Dynatrace-config/CD_APIGW/notification/email.json similarity index 100% rename from BMW-Dynatrace-config/CD_Perseus/notification/CDPerseus-Email.json rename to BMW-Dynatrace-config/CD_APIGW/notification/email.json diff --git a/BMW-Dynatrace-config/CD_DPP_DPM/notification/CDDPP-MSTeams.json b/BMW-Dynatrace-config/CD_APIGW/notification/msTeams.json similarity index 100% rename from BMW-Dynatrace-config/CD_DPP_DPM/notification/CDDPP-MSTeams.json rename to BMW-Dynatrace-config/CD_APIGW/notification/msTeams.json diff --git a/BMW-Dynatrace-config/CD_APIGW/notification/notification.yaml b/BMW-Dynatrace-config/CD_APIGW/notification/notification.yaml new file mode 100644 index 00000000..bb9126b1 --- /dev/null +++ b/BMW-Dynatrace-config/CD_APIGW/notification/notification.yaml @@ -0,0 +1,51 @@ +config: +- CDAPIGW-PROD: msTeams.json +- CDAPIGW-INT: msTeams.json + +#Prod notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDAPIGW-PROD: +- name: CD_APIGW PROD +- alertingProfile: CD_APIGW/alerting-profile/CDAPIGW-PROD.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDAPIGW-PROD.EMEA-Prod: +- name: CD_APIGW PROD +- alertingProfile: CD_APIGW/alerting-profile/CDAPIGW-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDAPIGW-PROD.NA-Prod: +- name: CD_APIGW PROD +- alertingProfile: CD_APIGW/alerting-profile/CDAPIGW-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDAPIGW-PROD.CN-Prod: +- name: CD_APIGW PROD +- alertingProfile: CD_APIGW/alerting-profile/CDAPIGW-PROD.id +- webhook: https://empty +- skipDeployment: "false" + +#INT notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDAPIGW-INT: +- name: CD_APIGW INT +- alertingProfile: CD_APIGW/alerting-profile/CDAPIGW-INT.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDAPIGW-INT.EMEA-PreProd: +- name: CD_APIGW INT +- alertingProfile: CD_APIGW/alerting-profile/CDAPIGW-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDAPIGW-INT.NA-PreProd: +- name: CD_APIGW INT +- alertingProfile: CD_APIGW/alerting-profile/CDAPIGW-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDAPIGW-INT.CN-PreProd: +- name: CD_APIGW INT +- alertingProfile: CD_APIGW/alerting-profile/CDAPIGW-INT.id +- webhook: https://empty +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_APIGW/synthetic-monitor/README.md b/BMW-Dynatrace-config/CD_APIGW/synthetic-monitor/README.md new file mode 100644 index 00000000..1695924c --- /dev/null +++ b/BMW-Dynatrace-config/CD_APIGW/synthetic-monitor/README.md @@ -0,0 +1,4 @@ + +### How to configure synthetics? + +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Synthetic+Monitors) page to configure your synthetics. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_APIGW/synthetic-monitor/default.json b/BMW-Dynatrace-config/CD_APIGW/synthetic-monitor/default.json new file mode 100644 index 00000000..cf83039b --- /dev/null +++ b/BMW-Dynatrace-config/CD_APIGW/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_APIGW/synthetic-monitor/synthetic-monitor.yaml b/BMW-Dynatrace-config/CD_APIGW/synthetic-monitor/synthetic-monitor.yaml new file mode 100644 index 00000000..fd8fd8cd --- /dev/null +++ b/BMW-Dynatrace-config/CD_APIGW/synthetic-monitor/synthetic-monitor.yaml @@ -0,0 +1,10 @@ +config: +- APIGW: default.json + +APIGW: +- name: CD_APIGW - +- mzName: CD_APIGW/management-zone/CDAPIGW.name +- mzId: CD_APIGW/management-zone/CDAPIGW.id +- endpoint: +- location: +- skipDeployment: "true" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_APIM/alerting-profile/alerting-profile.yaml b/BMW-Dynatrace-config/CD_APIM/alerting-profile/alerting-profile.yaml new file mode 100644 index 00000000..f1e308bd --- /dev/null +++ b/BMW-Dynatrace-config/CD_APIM/alerting-profile/alerting-profile.yaml @@ -0,0 +1,60 @@ +config: +- CDAPIM-PROD: default.json +- CDAPIM-INT: default.json + +#Prod alerting profiles for EMEA/NA/CN +#Dry-run needed for all hubs +CDAPIM-PROD: +- name: CD_APIM PROD +- tag: APIM +- mzId: CD_APIM/management-zone/CDAPIM.id +- env: PROD +- skipDeployment: "true" +#Configuration +CDAPIM-PROD.EMEA-Prod: +- name: CD_APIM PROD +- tag: APIM +- mzId: CD_APIM/management-zone/CDAPIM.id +- env: PROD +- skipDeployment: "false" +CDAPIM-PROD.NA-Prod: +- name: CD_APIM PROD +- tag: APIM +- mzId: CD_APIM/management-zone/CDAPIM.id +- env: PROD +- skipDeployment: "false" +CDAPIM-PROD.CN-Prod: +- name: CD_APIM PROD +- tag: APIM +- mzId: CD_APIM/management-zone/CDAPIM.id +- env: PROD +- skipDeployment: "false" + + +#INT alerting profiles for EMEA/NA/CN +#Dry-run needed for all hubs +CDAPIM-INT: +- name: CD_APIM INT +- tag: APIM +- mzId: CD_APIM/management-zone/CDAPIM.id +- env: INT +- skipDeployment: "true" +#Configuration +CDAPIM-INT.EMEA-PreProd: +- name: CD_APIM INT +- tag: APIM +- mzId: CD_APIM/management-zone/CDAPIM.id +- env: INT +- skipDeployment: "false" +CDAPIM-INT.NA-PreProd: +- name: CD_APIM INT +- tag: APIM +- mzId: CD_APIM/management-zone/CDAPIM.id +- env: INT +- skipDeployment: "false" +CDAPIM-INT.CN-PreProd: +- name: CD_APIM INT +- tag: APIM +- mzId: CD_APIM/management-zone/CDAPIM.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ASBC-SMACC/alerting-profile/CDASBC-SMACC.json b/BMW-Dynatrace-config/CD_APIM/alerting-profile/default.json similarity index 66% rename from BMW-Dynatrace-config/CD_ASBC-SMACC/alerting-profile/CDASBC-SMACC.json rename to BMW-Dynatrace-config/CD_APIM/alerting-profile/default.json index d10ad44a..681a4c64 100644 --- a/BMW-Dynatrace-config/CD_ASBC-SMACC/alerting-profile/CDASBC-SMACC.json +++ b/BMW-Dynatrace-config/CD_APIM/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_APIM/calculated-metrics-service/README.md b/BMW-Dynatrace-config/CD_APIM/calculated-metrics-service/README.md new file mode 100644 index 00000000..0bf8efbc --- /dev/null +++ b/BMW-Dynatrace-config/CD_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_APIM/conditional-naming-processgroup/README.md b/BMW-Dynatrace-config/CD_APIM/conditional-naming-processgroup/README.md new file mode 100644 index 00000000..f94196a5 --- /dev/null +++ b/BMW-Dynatrace-config/CD_APIM/conditional-naming-processgroup/README.md @@ -0,0 +1,67 @@ +### Process Group Detection Rules and Naming + +#### Detection Rule or Naming? + +For the explanation, we're using a real example of the Infotainment application: + +!(PGNaming1)[../../../../img/PGNaming1.PNG] + +Before working with your dashboards and alerting profiles, an important task to do when working with Dynatrace is checking +the structure of your applications (process groups). You can do that clicking under *technologies* and filter using your +application Management Zone. + +In the picture above, there are two Process Groups called bon-information-prod. **If you see duplicated process groups like in** +**this case, you MUST follow this guideline** + +Next step would be to open both process groups and compare the metadata. In that way, you can identify if all process instances are +part of the same application or not. An easy way to do that is asking yourself: how many instances of my application do i have? + +If you have 4 instances in total and you're able to see 2 in one PG and other 2 in other PG it means that **they are part of the ** +**same application** + +Another situation could be that checking on the metadata, then you see that are **two different application** and Dynatrace is just naming +the process group in the same way + +*Same application* +- Problem: Dynatrace is creating two different process groups, what transalates in two separated services for the same application. Instead of +seeing all the traffic in one service, you will have it splitted and it will complicate your monitoring +- Solution: create a process group detection rule. Contact Dynatrace Expert + +*Different application* +- Problem: Dynatrace is just naming in the same way applications that are different. +- Solution: This case is less severe, since it can be fixed with a process group naming rule. + + +What about our example? +!(PGNaming2)[../../../../img/PGNaming2.PNG] +!(PGNaming3)[../../../../img/PGNaming3.PNG] + +Based on the feedback of the infotaiment team, each process group is a different application (microservice) and it's visible in the kubernetes container/workload +within the metadata of each Process Group. + +#### How to create a Process Group Detection Rule +1. Open the *conditional-naming-processgroup.yaml* file and create a rule that looks like this: +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName} +- tag: Infotainment +- skipDeployment: false +``` +The result of the rule will be renaming the PG to this: +``` +bon-information-prod ipa +bon-information-prod rsl +``` + +Other possible placeholders that you can use are for example: +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName/[^\\-]*$} +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesFullPodName/buffet-(.*?)-} +{ProcessGroup:DetectedName} - {HostGroup:Name/[^\\_]*$} +{ProcessGroup:KubernetesNamespace} +{ProcessGroup:CommandLineArgs/.*?\\-f\\s\\/www\\/(.*?)\\/generated\\/httpd\\.conf.*?} + +You can combine different ones. Check the (documentation)[link] for more \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_APIM/conditional-naming-processgroup/conditional-naming-processgroup.yaml b/BMW-Dynatrace-config/CD_APIM/conditional-naming-processgroup/conditional-naming-processgroup.yaml new file mode 100644 index 00000000..c81eaf9c --- /dev/null +++ b/BMW-Dynatrace-config/CD_APIM/conditional-naming-processgroup/conditional-naming-processgroup.yaml @@ -0,0 +1,8 @@ +config: +- CDAPIM: template.json + +CDAPIM: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: APIM +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_APIM/conditional-naming-processgroup/template.json b/BMW-Dynatrace-config/CD_APIM/conditional-naming-processgroup/template.json new file mode 100644 index 00000000..7c039808 --- /dev/null +++ b/BMW-Dynatrace-config/CD_APIM/conditional-naming-processgroup/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "type": "PROCESS_GROUP" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_APIM/conditional-naming-service/README.md b/BMW-Dynatrace-config/CD_APIM/conditional-naming-service/README.md new file mode 100644 index 00000000..c34ef308 --- /dev/null +++ b/BMW-Dynatrace-config/CD_APIM/conditional-naming-service/README.md @@ -0,0 +1,35 @@ +### Service Naming Rules + +A typical case could be that you access to *Transaction & Services* and you find two services that are exactly the same: +*DataDownloadV1* +*DataDownloadV1* + +If you drilldown into the service and you check in the process group, you may have a PROD and a E2E for each service. + +*Note: if you see that both process group are exactly the same, please contact a Dynatrace expert to create a Process* +*Group detection rule* + +In the case the PG are PROD and E2E, then we need to create a rule that looks like this: + +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {Service:DetectedName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +- tag: Infotainment +- skipDeployment: false +``` + +The rule will get the Service Detected Name (current name) and it will extract (with a regex) the part of the kubernetes namespace after the "-", so -prod or -e2e, resulting in: +*DataDownloadV1 - prod* +*DataDownloadV1 - e2e* + +Now, services will be easy to identify. + +You can create rules based on any property/metadata. Some other placeholder's eamples: +{Service:DatabaseName} - E2E +{Service:WebServiceName} - {ProcessGroup:Kubernetes:microservice} - {ProcessGroup:Kubernetes:environment} +{Service:DetectedName} - {ProcessGroup:KubernetesContainerName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +{Service:DetectedName} - {ProcessGroup:SpringBootProfileName/[^\\-]*$} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_APIM/conditional-naming-service/conditional-naming-service.yaml b/BMW-Dynatrace-config/CD_APIM/conditional-naming-service/conditional-naming-service.yaml new file mode 100644 index 00000000..c81eaf9c --- /dev/null +++ b/BMW-Dynatrace-config/CD_APIM/conditional-naming-service/conditional-naming-service.yaml @@ -0,0 +1,8 @@ +config: +- CDAPIM: template.json + +CDAPIM: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: APIM +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_APIM/conditional-naming-service/template.json b/BMW-Dynatrace-config/CD_APIM/conditional-naming-service/template.json new file mode 100644 index 00000000..5d4fac56 --- /dev/null +++ b/BMW-Dynatrace-config/CD_APIM/conditional-naming-service/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "type": "SERVICE" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_APIM/custom-service-java/README.md b/BMW-Dynatrace-config/CD_APIM/custom-service-java/README.md new file mode 100644 index 00000000..5f35e5c1 --- /dev/null +++ b/BMW-Dynatrace-config/CD_APIM/custom-service-java/README.md @@ -0,0 +1,4 @@ + +### How to configure custom services? + +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Custom+Services) page to configure your custom services. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_APIM/custom-service-java/custom-service-java.yaml b/BMW-Dynatrace-config/CD_APIM/custom-service-java/custom-service-java.yaml new file mode 100644 index 00000000..25f8a028 --- /dev/null +++ b/BMW-Dynatrace-config/CD_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_APIM/custom-service-java/template-1-1.json b/BMW-Dynatrace-config/CD_APIM/custom-service-java/template-1-1.json new file mode 100644 index 00000000..b3003515 --- /dev/null +++ b/BMW-Dynatrace-config/CD_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_APIM/dashboard/README.md b/BMW-Dynatrace-config/CD_APIM/dashboard/README.md new file mode 100644 index 00000000..dffcdc8a --- /dev/null +++ b/BMW-Dynatrace-config/CD_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_APIM/dashboard/dashboard.yaml b/BMW-Dynatrace-config/CD_APIM/dashboard/dashboard.yaml new file mode 100644 index 00000000..a63dba8f --- /dev/null +++ b/BMW-Dynatrace-config/CD_APIM/dashboard/dashboard.yaml @@ -0,0 +1,127 @@ +config: +- CDAPIM-PROD: default.json +- CDAPIM-E2E: default.json +- CDAPIM-INT: default.json +- CDAPIM-TEST: default.json + +#PROD dashboards for EMEA/NA/CN Prod +#Dry-run needed for all hubs +CDAPIM-PROD: +- name: CD_APIM PROD +- mzName: CD_APIM/management-zone/CDAPIM.name +- mzId: CD_APIM/management-zone/CDAPIM.id +- env: PROD +- skipDeployment: "true" +#Configuration +CDAPIM-PROD.EMEA-Prod: +- name: CD_APIM PROD +- mzName: CD_APIM/management-zone/CDAPIM.name +- mzId: CD_APIM/management-zone/CDAPIM.id +- tag: APIM +- env: PROD +- skipDeployment: "false" +CDAPIM-PROD.NA-Prod: +- name: CD_APIM PROD +- mzName: CD_APIM/management-zone/CDAPIM.name +- mzId: CD_APIM/management-zone/CDAPIM.id +- tag: APIM +- env: PROD +- skipDeployment: "false" +CDAPIM-PROD.CN-Prod: +- name: CD_APIM PROD +- mzName: CD_APIM/management-zone/CDAPIM.name +- mzId: CD_APIM/management-zone/CDAPIM.id +- tag: APIM +- env: PROD +- skipDeployment: "false" + +#E2E dashboards for EMEA/NA/CN E2E +#Dry-run needed for all hubs +CDAPIM-E2E: +- name: CD_APIM E2E +- mzName: CD_APIM/management-zone/CDAPIM.name +- mzId: CD_APIM/management-zone/CDAPIM.id +- env: E2E +- skipDeployment: "true" +#Configuration +CDAPIM-E2E.EMEA-Prod: +- name: CD_APIM E2E +- mzName: CD_APIM/management-zone/CDAPIM.name +- mzId: CD_APIM/management-zone/CDAPIM.id +- env: E2E +- tag: APIM +- skipDeployment: "true" +CDAPIM-E2E.NA-Prod: +- name: CD_APIM E2E +- mzName: CD_APIM/management-zone/CDAPIM.name +- mzId: CD_APIM/management-zone/CDAPIM.id +- env: E2E +- tag: APIM +- skipDeployment: "true" +CDAPIM-E2E.CN-Prod: +- name: CD_APIM E2E +- mzName: CD_APIM/management-zone/CDAPIM.name +- mzId: CD_APIM/management-zone/CDAPIM.id +- env: E2E +- tag: APIM +- skipDeployment: "true" + +#INT dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDAPIM-INT: +- name: CD_APIM INT +- mzName: CD_APIM/management-zone/CDAPIM.name +- mzId: CD_APIM/management-zone/CDAPIM.id +- env: INT +- tag: APIM +- skipDeployment: "true" +#Configuration +CDAPIM-INT.EMEA-PreProd: +- name: CD_APIM INT +- mzName: CD_APIM/management-zone/CDAPIM.name +- mzId: CD_APIM/management-zone/CDAPIM.id +- env: INT +- tag: APIM +- skipDeployment: "false" +CDAPIM-INT.NA-PreProd: +- name: CD_APIM INT +- mzName: CD_APIM/management-zone/CDAPIM.name +- mzId: CD_APIM/management-zone/CDAPIM.id +- env: INT +- skipDeployment: "false" +CDAPIM-INT.CN-PreProd: +- name: CD_APIM INT +- mzName: CD_APIM/management-zone/CDAPIM.name +- mzId: CD_APIM/management-zone/CDAPIM.id +- env: INT +- skipDeployment: "false" + +#TEST dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDAPIM-TEST: +- name: CD_APIM TEST +- mzName: CD_APIM/management-zone/CDAPIM.name +- mzId: CD_APIM/management-zone/CDAPIM.id +- tag: APIM +- env: TEST +- skipDeployment: "true" +#Configuration +CDAPIM-TEST.EMEA-PreProd: +- name: CD_APIM TEST +- mzName: CD_APIM/management-zone/CDAPIM.name +- mzId: CD_APIM/management-zone/CDAPIM.id +- tag: APIM +- env: TEST +- skipDeployment: "false" +CDAPIM-TEST.NA-PreProd: +- name: CD_APIM TEST +- mzName: CD_APIM/management-zone/CDAPIM.name +- mzId: CD_APIM/management-zone/CDAPIM.id +- env: TEST +- skipDeployment: "false" +CDAPIM-TEST.CN-PreProd: +- name: CD_APIM TEST +- mzName: CD_APIM/management-zone/CDAPIM.name +- mzId: CD_APIM/management-zone/CDAPIM.id +- env: TEST +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_APIM/dashboard/default.json b/BMW-Dynatrace-config/CD_APIM/dashboard/default.json new file mode 100644 index 00000000..6c685810 --- /dev/null +++ b/BMW-Dynatrace-config/CD_APIM/dashboard/default.json @@ -0,0 +1,308 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.214.107.20210407-223952" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": true, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "timeframe": "-24h to now" + }, + "tags": [ + "{{.tag}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 228, + "left": 38, + "width": 1064, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Failure rate (HTTP 4xx/5xx errors)", + "defaultName": "Custom chart", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [ + { + "metric": "builtin:service.errors.fourxx.rate", + "aggregation": "AVG", + "type": "BAR", + "entityType": "SERVICE", + "dimensions": [], + "sortAscending": false, + "sortColumn": false, + "aggregationRate": "TOTAL" + }, + { + "metric": "builtin:service.errors.fivexx.rate", + "aggregation": "AVG", + "type": "BAR", + "entityType": "SERVICE", + "dimensions": [], + "sortAscending": false, + "sortColumn": true, + "aggregationRate": "TOTAL" + } + ], + "resultMetadata": { + "nullbuiltin:service.errors.fivexx.rate|AVG|TOTAL|BAR|SERVICE": { + "lastModified": 1617956393463, + "customColor": "#ff0000" + }, + "nullbuiltin:service.errors.fourxx.rate|AVG|TOTAL|BAR|SERVICE": { + "lastModified": 1617956441725, + "customColor": "#fff29a" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:{{.env}}", + "Component:{{.tag}}" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 38, + "left": 950, + "width": 152, + "height": 152 + }, + "tileFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + } + }, + { + "name": "Overall Health", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 0, + "left": 38, + "width": 1064, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 532, + "left": 38, + "width": 1064, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 570, + "left": 38, + "width": 1064, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Request Count and Number of Errors", + "defaultName": "Custom chart", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [ + { + "metric": "builtin:service.response.time", + "aggregation": "AVG", + "type": "LINE", + "entityType": "SERVICE", + "dimensions": [], + "sortAscending": false, + "sortColumn": false, + "aggregationRate": "TOTAL" + }, + { + "metric": "builtin:service.requestCount.total", + "aggregation": "NONE", + "type": "BAR", + "entityType": "SERVICE", + "dimensions": [], + "sortAscending": false, + "sortColumn": false, + "aggregationRate": "TOTAL" + }, + { + "metric": "builtin:service.errors.total.count", + "aggregation": "NONE", + "type": "BAR", + "entityType": "SERVICE", + "dimensions": [], + "sortAscending": false, + "sortColumn": true, + "aggregationRate": "TOTAL" + } + ], + "resultMetadata": { + "nullbuiltin:service.requestCount.total|NONE|TOTAL|BAR|SERVICE": { + "lastModified": 1595275720776, + "customColor": "#008cdb" + }, + "nullbuiltin:service.errors.total.count|NONE|TOTAL|BAR|SERVICE": { + "lastModified": 1595275955999, + "customColor": "#ef651f" + }, + "nullbuiltin:service.response.time|AVG|TOTAL|LINE|SERVICE": { + "lastModified": 1595275686773, + "customColor": "#b4e5f9" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:{{.env}}", + "Component:{{.tag}}" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 190, + "left": 38, + "width": 1064, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 38, + "left": 646, + "width": 190, + "height": 152 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:{{.env}}", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 38, + "left": 342, + "width": 190, + "height": 152 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:{{.env}}", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 190, + "height": 152 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:{{.env}}", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_APIM/notification/README.md b/BMW-Dynatrace-config/CD_APIM/notification/README.md new file mode 100644 index 00000000..e1a6af84 --- /dev/null +++ b/BMW-Dynatrace-config/CD_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_APIM/notification/email.json b/BMW-Dynatrace-config/CD_APIM/notification/email.json new file mode 100644 index 00000000..486642a7 --- /dev/null +++ b/BMW-Dynatrace-config/CD_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_Call-Handling-Backends/notification/NGTP-MSTeams.json b/BMW-Dynatrace-config/CD_APIM/notification/msTeams.json similarity index 86% rename from BMW-Dynatrace-config/CD_Call-Handling-Backends/notification/NGTP-MSTeams.json rename to BMW-Dynatrace-config/CD_APIM/notification/msTeams.json index 163a7a3b..33e92cf6 100644 --- a/BMW-Dynatrace-config/CD_Call-Handling-Backends/notification/NGTP-MSTeams.json +++ b/BMW-Dynatrace-config/CD_APIM/notification/msTeams.json @@ -1,7 +1,7 @@ { "acceptAnyCertificate": false, "active": true, - "alertingProfile": "{{.apid}}", + "alertingProfile": "{{.alertingProfile}}", "headers": [], "name": "{{.name}}", "notifyEventMergesEnabled": false, diff --git a/BMW-Dynatrace-config/CD_APIM/notification/notification.yaml b/BMW-Dynatrace-config/CD_APIM/notification/notification.yaml new file mode 100644 index 00000000..b8567153 --- /dev/null +++ b/BMW-Dynatrace-config/CD_APIM/notification/notification.yaml @@ -0,0 +1,51 @@ +config: +- CDAPIM-PROD: msTeams.json +- CDAPIM-INT: msTeams.json + +#Prod notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDAPIM-PROD: +- name: CD_APIM PROD +- alertingProfile: CD_APIM/alerting-profile/CDAPIM-PROD.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDAPIM-PROD.EMEA-Prod: +- name: CD_APIM PROD +- alertingProfile: CD_APIM/alerting-profile/CDAPIM-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDAPIM-PROD.NA-Prod: +- name: CD_APIM PROD +- alertingProfile: CD_APIM/alerting-profile/CDAPIM-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDAPIM-PROD.CN-Prod: +- name: CD_APIM PROD +- alertingProfile: CD_APIM/alerting-profile/CDAPIM-PROD.id +- webhook: https://empty +- skipDeployment: "false" + +#INT notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDAPIM-INT: +- name: CD_APIM INT +- alertingProfile: CD_APIM/alerting-profile/CDAPIM-INT.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDAPIM-INT.EMEA-PreProd: +- name: CD_APIM INT +- alertingProfile: CD_APIM/alerting-profile/CDAPIM-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDAPIM-INT.NA-PreProd: +- name: CD_APIM INT +- alertingProfile: CD_APIM/alerting-profile/CDAPIM-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDAPIM-INT.CN-PreProd: +- name: CD_APIM INT +- alertingProfile: CD_APIM/alerting-profile/CDAPIM-INT.id +- webhook: https://empty +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_APIM/synthetic-monitor/README.md b/BMW-Dynatrace-config/CD_APIM/synthetic-monitor/README.md new file mode 100644 index 00000000..1695924c --- /dev/null +++ b/BMW-Dynatrace-config/CD_APIM/synthetic-monitor/README.md @@ -0,0 +1,4 @@ + +### How to configure synthetics? + +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Synthetic+Monitors) page to configure your synthetics. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_APIM/synthetic-monitor/default.json b/BMW-Dynatrace-config/CD_APIM/synthetic-monitor/default.json new file mode 100644 index 00000000..cf83039b --- /dev/null +++ b/BMW-Dynatrace-config/CD_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_APIM/synthetic-monitor/synthetic-monitor.yaml b/BMW-Dynatrace-config/CD_APIM/synthetic-monitor/synthetic-monitor.yaml new file mode 100644 index 00000000..d93af525 --- /dev/null +++ b/BMW-Dynatrace-config/CD_APIM/synthetic-monitor/synthetic-monitor.yaml @@ -0,0 +1,10 @@ +config: +- APIM: default.json + +APIM: +- name: CD_APIM - +- mzName: CD_APIM/management-zone/CDAPIM.name +- mzId: CD_APIM/management-zone/CDAPIM.id +- endpoint: +- location: +- skipDeployment: "true" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ASBC-HAL/alerting-profile/ASBC-HAL.json b/BMW-Dynatrace-config/CD_ASBC-HAL/alerting-profile/ASBC-HAL.json deleted file mode 100644 index d10ad44a..00000000 --- a/BMW-Dynatrace-config/CD_ASBC-HAL/alerting-profile/ASBC-HAL.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_ASBC-HAL/alerting-profile/alerting-profile.yaml b/BMW-Dynatrace-config/CD_ASBC-HAL/alerting-profile/alerting-profile.yaml index d4e014d6..c59bda21 100644 --- a/BMW-Dynatrace-config/CD_ASBC-HAL/alerting-profile/alerting-profile.yaml +++ b/BMW-Dynatrace-config/CD_ASBC-HAL/alerting-profile/alerting-profile.yaml @@ -1,6 +1,60 @@ -CDASBC-HAL: -- name: CD_ASBC-HAL/management-zone/CDASBC-HAL.name +config: +- CDASBC-HAL-PROD: default.json +- CDASBC-HAL-INT: default.json + +#Prod alerting profiles for EMEA/NA/CN +#Dry-run needed for all hubs +CDASBC-HAL-PROD: +- name: CD_ASBC-HAL PROD - tag: ASBC-HAL - mzId: CD_ASBC-HAL/management-zone/CDASBC-HAL.id -config: -- CDASBC-HAL: ASBC-HAL.json +- env: PROD +- skipDeployment: "true" +#Configuration +CDASBC-HAL-PROD.EMEA-Prod: +- name: CD_ASBC-HAL PROD +- tag: ASBC-HAL +- mzId: CD_ASBC-HAL/management-zone/CDASBC-HAL.id +- env: PROD +- skipDeployment: "false" +CDASBC-HAL-PROD.NA-Prod: +- name: CD_ASBC-HAL PROD +- tag: ASBC-HAL +- mzId: CD_ASBC-HAL/management-zone/CDASBC-HAL.id +- env: PROD +- skipDeployment: "false" +CDASBC-HAL-PROD.CN-Prod: +- name: CD_ASBC-HAL PROD +- tag: ASBC-HAL +- mzId: CD_ASBC-HAL/management-zone/CDASBC-HAL.id +- env: PROD +- skipDeployment: "false" + + +#INT alerting profiles for EMEA/NA/CN +#Dry-run needed for all hubs +CDASBC-HAL-INT: +- name: CD_ASBC-HAL INT +- tag: ASBC-HAL +- mzId: CD_ASBC-HAL/management-zone/CDASBC-HAL.id +- env: INT +- skipDeployment: "true" +#Configuration +CDASBC-HAL-INT.EMEA-PreProd: +- name: CD_ASBC-HAL INT +- tag: ASBC-HAL +- mzId: CD_ASBC-HAL/management-zone/CDASBC-HAL.id +- env: INT +- skipDeployment: "false" +CDASBC-HAL-INT.NA-PreProd: +- name: CD_ASBC-HAL INT +- tag: ASBC-HAL +- mzId: CD_ASBC-HAL/management-zone/CDASBC-HAL.id +- env: INT +- skipDeployment: "false" +CDASBC-HAL-INT.CN-PreProd: +- name: CD_ASBC-HAL INT +- tag: ASBC-HAL +- mzId: CD_ASBC-HAL/management-zone/CDASBC-HAL.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_Call-Handling-Backends/alerting-profile/Call-Handling-Backends.json b/BMW-Dynatrace-config/CD_ASBC-HAL/alerting-profile/default.json similarity index 66% rename from BMW-Dynatrace-config/CD_Call-Handling-Backends/alerting-profile/Call-Handling-Backends.json rename to BMW-Dynatrace-config/CD_ASBC-HAL/alerting-profile/default.json index d10ad44a..681a4c64 100644 --- a/BMW-Dynatrace-config/CD_Call-Handling-Backends/alerting-profile/Call-Handling-Backends.json +++ b/BMW-Dynatrace-config/CD_ASBC-HAL/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_ASBC-HAL/calculated-metrics-service/README.md b/BMW-Dynatrace-config/CD_ASBC-HAL/calculated-metrics-service/README.md new file mode 100644 index 00000000..0bf8efbc --- /dev/null +++ b/BMW-Dynatrace-config/CD_ASBC-HAL/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-HAL/conditional-naming-processgroup/README.md b/BMW-Dynatrace-config/CD_ASBC-HAL/conditional-naming-processgroup/README.md new file mode 100644 index 00000000..f94196a5 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ASBC-HAL/conditional-naming-processgroup/README.md @@ -0,0 +1,67 @@ +### Process Group Detection Rules and Naming + +#### Detection Rule or Naming? + +For the explanation, we're using a real example of the Infotainment application: + +!(PGNaming1)[../../../../img/PGNaming1.PNG] + +Before working with your dashboards and alerting profiles, an important task to do when working with Dynatrace is checking +the structure of your applications (process groups). You can do that clicking under *technologies* and filter using your +application Management Zone. + +In the picture above, there are two Process Groups called bon-information-prod. **If you see duplicated process groups like in** +**this case, you MUST follow this guideline** + +Next step would be to open both process groups and compare the metadata. In that way, you can identify if all process instances are +part of the same application or not. An easy way to do that is asking yourself: how many instances of my application do i have? + +If you have 4 instances in total and you're able to see 2 in one PG and other 2 in other PG it means that **they are part of the ** +**same application** + +Another situation could be that checking on the metadata, then you see that are **two different application** and Dynatrace is just naming +the process group in the same way + +*Same application* +- Problem: Dynatrace is creating two different process groups, what transalates in two separated services for the same application. Instead of +seeing all the traffic in one service, you will have it splitted and it will complicate your monitoring +- Solution: create a process group detection rule. Contact Dynatrace Expert + +*Different application* +- Problem: Dynatrace is just naming in the same way applications that are different. +- Solution: This case is less severe, since it can be fixed with a process group naming rule. + + +What about our example? +!(PGNaming2)[../../../../img/PGNaming2.PNG] +!(PGNaming3)[../../../../img/PGNaming3.PNG] + +Based on the feedback of the infotaiment team, each process group is a different application (microservice) and it's visible in the kubernetes container/workload +within the metadata of each Process Group. + +#### How to create a Process Group Detection Rule +1. Open the *conditional-naming-processgroup.yaml* file and create a rule that looks like this: +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName} +- tag: Infotainment +- skipDeployment: false +``` +The result of the rule will be renaming the PG to this: +``` +bon-information-prod ipa +bon-information-prod rsl +``` + +Other possible placeholders that you can use are for example: +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName/[^\\-]*$} +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesFullPodName/buffet-(.*?)-} +{ProcessGroup:DetectedName} - {HostGroup:Name/[^\\_]*$} +{ProcessGroup:KubernetesNamespace} +{ProcessGroup:CommandLineArgs/.*?\\-f\\s\\/www\\/(.*?)\\/generated\\/httpd\\.conf.*?} + +You can combine different ones. Check the (documentation)[link] for more \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ASBC-HAL/conditional-naming-processgroup/conditional-naming-processgroup.yaml b/BMW-Dynatrace-config/CD_ASBC-HAL/conditional-naming-processgroup/conditional-naming-processgroup.yaml new file mode 100644 index 00000000..1ad98d46 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ASBC-HAL/conditional-naming-processgroup/conditional-naming-processgroup.yaml @@ -0,0 +1,8 @@ +config: +- CDASBC-HAL: template.json + +CDASBC-HAL: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: ASBC-HAL +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_ASBC-HAL/conditional-naming-processgroup/template.json b/BMW-Dynatrace-config/CD_ASBC-HAL/conditional-naming-processgroup/template.json new file mode 100644 index 00000000..7c039808 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ASBC-HAL/conditional-naming-processgroup/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "type": "PROCESS_GROUP" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ASBC-HAL/conditional-naming-service/README.md b/BMW-Dynatrace-config/CD_ASBC-HAL/conditional-naming-service/README.md new file mode 100644 index 00000000..c34ef308 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ASBC-HAL/conditional-naming-service/README.md @@ -0,0 +1,35 @@ +### Service Naming Rules + +A typical case could be that you access to *Transaction & Services* and you find two services that are exactly the same: +*DataDownloadV1* +*DataDownloadV1* + +If you drilldown into the service and you check in the process group, you may have a PROD and a E2E for each service. + +*Note: if you see that both process group are exactly the same, please contact a Dynatrace expert to create a Process* +*Group detection rule* + +In the case the PG are PROD and E2E, then we need to create a rule that looks like this: + +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {Service:DetectedName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +- tag: Infotainment +- skipDeployment: false +``` + +The rule will get the Service Detected Name (current name) and it will extract (with a regex) the part of the kubernetes namespace after the "-", so -prod or -e2e, resulting in: +*DataDownloadV1 - prod* +*DataDownloadV1 - e2e* + +Now, services will be easy to identify. + +You can create rules based on any property/metadata. Some other placeholder's eamples: +{Service:DatabaseName} - E2E +{Service:WebServiceName} - {ProcessGroup:Kubernetes:microservice} - {ProcessGroup:Kubernetes:environment} +{Service:DetectedName} - {ProcessGroup:KubernetesContainerName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +{Service:DetectedName} - {ProcessGroup:SpringBootProfileName/[^\\-]*$} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ASBC-HAL/conditional-naming-service/conditional-naming-service.yaml b/BMW-Dynatrace-config/CD_ASBC-HAL/conditional-naming-service/conditional-naming-service.yaml new file mode 100644 index 00000000..1ad98d46 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ASBC-HAL/conditional-naming-service/conditional-naming-service.yaml @@ -0,0 +1,8 @@ +config: +- CDASBC-HAL: template.json + +CDASBC-HAL: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: ASBC-HAL +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_ASBC-HAL/conditional-naming-service/template.json b/BMW-Dynatrace-config/CD_ASBC-HAL/conditional-naming-service/template.json new file mode 100644 index 00000000..5d4fac56 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ASBC-HAL/conditional-naming-service/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "type": "SERVICE" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ASBC-HAL/custom-service-java/README.md b/BMW-Dynatrace-config/CD_ASBC-HAL/custom-service-java/README.md new file mode 100644 index 00000000..5f35e5c1 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ASBC-HAL/custom-service-java/README.md @@ -0,0 +1,4 @@ + +### How to configure custom services? + +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Custom+Services) page to configure your custom services. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ASBC-HAL/custom-service-java/custom-service-java.yaml b/BMW-Dynatrace-config/CD_ASBC-HAL/custom-service-java/custom-service-java.yaml new file mode 100644 index 00000000..25f8a028 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ASBC-HAL/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-HAL/custom-service-java/template-1-1.json b/BMW-Dynatrace-config/CD_ASBC-HAL/custom-service-java/template-1-1.json new file mode 100644 index 00000000..b3003515 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ASBC-HAL/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-HAL/dashboard/README.md b/BMW-Dynatrace-config/CD_ASBC-HAL/dashboard/README.md new file mode 100644 index 00000000..dffcdc8a --- /dev/null +++ b/BMW-Dynatrace-config/CD_ASBC-HAL/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-HAL/dashboard/dashboard.yaml b/BMW-Dynatrace-config/CD_ASBC-HAL/dashboard/dashboard.yaml new file mode 100644 index 00000000..c74b54b4 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ASBC-HAL/dashboard/dashboard.yaml @@ -0,0 +1,127 @@ +config: +- CDASBC-HAL-PROD: default.json +- CDASBC-HAL-E2E: default.json +- CDASBC-HAL-INT: default.json +- CDASBC-HAL-TEST: default.json + +#PROD dashboards for EMEA/NA/CN Prod +#Dry-run needed for all hubs +CDASBC-HAL-PROD: +- name: CD_ASBC-HAL PROD +- mzName: CD_ASBC-HAL/management-zone/CDASBC-HAL.name +- mzId: CD_ASBC-HAL/management-zone/CDASBC-HAL.id +- env: PROD +- skipDeployment: "true" +#Configuration +CDASBC-HAL-PROD.EMEA-Prod: +- name: CD_ASBC-HAL PROD +- mzName: CD_ASBC-HAL/management-zone/CDASBC-HAL.name +- mzId: CD_ASBC-HAL/management-zone/CDASBC-HAL.id +- tag: ASBC-HAL +- env: PROD +- skipDeployment: "false" +CDASBC-HAL-PROD.NA-Prod: +- name: CD_ASBC-HAL PROD +- mzName: CD_ASBC-HAL/management-zone/CDASBC-HAL.name +- mzId: CD_ASBC-HAL/management-zone/CDASBC-HAL.id +- tag: ASBC-HAL +- env: PROD +- skipDeployment: "false" +CDASBC-HAL-PROD.CN-Prod: +- name: CD_ASBC-HAL PROD +- mzName: CD_ASBC-HAL/management-zone/CDASBC-HAL.name +- mzId: CD_ASBC-HAL/management-zone/CDASBC-HAL.id +- tag: ASBC-HAL +- env: PROD +- skipDeployment: "false" + +#E2E dashboards for EMEA/NA/CN E2E +#Dry-run needed for all hubs +CDASBC-HAL-E2E: +- name: CD_ASBC-HAL E2E +- mzName: CD_ASBC-HAL/management-zone/CDASBC-HAL.name +- mzId: CD_ASBC-HAL/management-zone/CDASBC-HAL.id +- env: E2E +- skipDeployment: "true" +#Configuration +CDASBC-HAL-E2E.EMEA-Prod: +- name: CD_ASBC-HAL E2E +- mzName: CD_ASBC-HAL/management-zone/CDASBC-HAL.name +- mzId: CD_ASBC-HAL/management-zone/CDASBC-HAL.id +- env: E2E +- tag: ASBC-HAL +- skipDeployment: "true" +CDASBC-HAL-E2E.NA-Prod: +- name: CD_ASBC-HAL E2E +- mzName: CD_ASBC-HAL/management-zone/CDASBC-HAL.name +- mzId: CD_ASBC-HAL/management-zone/CDASBC-HAL.id +- env: E2E +- tag: ASBC-HAL +- skipDeployment: "true" +CDASBC-HAL-E2E.CN-Prod: +- name: CD_ASBC-HAL E2E +- mzName: CD_ASBC-HAL/management-zone/CDASBC-HAL.name +- mzId: CD_ASBC-HAL/management-zone/CDASBC-HAL.id +- env: E2E +- tag: ASBC-HAL +- skipDeployment: "true" + +#INT dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDASBC-HAL-INT: +- name: CD_ASBC-HAL INT +- mzName: CD_ASBC-HAL/management-zone/CDASBC-HAL.name +- mzId: CD_ASBC-HAL/management-zone/CDASBC-HAL.id +- env: INT +- tag: ASBC-HAL +- skipDeployment: "true" +#Configuration +CDASBC-HAL-INT.EMEA-PreProd: +- name: CD_ASBC-HAL INT +- mzName: CD_ASBC-HAL/management-zone/CDASBC-HAL.name +- mzId: CD_ASBC-HAL/management-zone/CDASBC-HAL.id +- env: INT +- tag: ASBC-HAL +- skipDeployment: "false" +CDASBC-HAL-INT.NA-PreProd: +- name: CD_ASBC-HAL INT +- mzName: CD_ASBC-HAL/management-zone/CDASBC-HAL.name +- mzId: CD_ASBC-HAL/management-zone/CDASBC-HAL.id +- env: INT +- skipDeployment: "false" +CDASBC-HAL-INT.CN-PreProd: +- name: CD_ASBC-HAL INT +- mzName: CD_ASBC-HAL/management-zone/CDASBC-HAL.name +- mzId: CD_ASBC-HAL/management-zone/CDASBC-HAL.id +- env: INT +- skipDeployment: "false" + +#TEST dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDASBC-HAL-TEST: +- name: CD_ASBC-HAL TEST +- mzName: CD_ASBC-HAL/management-zone/CDASBC-HAL.name +- mzId: CD_ASBC-HAL/management-zone/CDASBC-HAL.id +- tag: ASBC-HAL +- env: TEST +- skipDeployment: "true" +#Configuration +CDASBC-HAL-TEST.EMEA-PreProd: +- name: CD_ASBC-HAL TEST +- mzName: CD_ASBC-HAL/management-zone/CDASBC-HAL.name +- mzId: CD_ASBC-HAL/management-zone/CDASBC-HAL.id +- tag: ASBC-HAL +- env: TEST +- skipDeployment: "false" +CDASBC-HAL-TEST.NA-PreProd: +- name: CD_ASBC-HAL TEST +- mzName: CD_ASBC-HAL/management-zone/CDASBC-HAL.name +- mzId: CD_ASBC-HAL/management-zone/CDASBC-HAL.id +- env: TEST +- skipDeployment: "false" +CDASBC-HAL-TEST.CN-PreProd: +- name: CD_ASBC-HAL TEST +- mzName: CD_ASBC-HAL/management-zone/CDASBC-HAL.name +- mzId: CD_ASBC-HAL/management-zone/CDASBC-HAL.id +- env: TEST +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ASBC-HAL/dashboard/default.json b/BMW-Dynatrace-config/CD_ASBC-HAL/dashboard/default.json new file mode 100644 index 00000000..6c685810 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ASBC-HAL/dashboard/default.json @@ -0,0 +1,308 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.214.107.20210407-223952" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": true, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "timeframe": "-24h to now" + }, + "tags": [ + "{{.tag}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 228, + "left": 38, + "width": 1064, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Failure rate (HTTP 4xx/5xx errors)", + "defaultName": "Custom chart", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [ + { + "metric": "builtin:service.errors.fourxx.rate", + "aggregation": "AVG", + "type": "BAR", + "entityType": "SERVICE", + "dimensions": [], + "sortAscending": false, + "sortColumn": false, + "aggregationRate": "TOTAL" + }, + { + "metric": "builtin:service.errors.fivexx.rate", + "aggregation": "AVG", + "type": "BAR", + "entityType": "SERVICE", + "dimensions": [], + "sortAscending": false, + "sortColumn": true, + "aggregationRate": "TOTAL" + } + ], + "resultMetadata": { + "nullbuiltin:service.errors.fivexx.rate|AVG|TOTAL|BAR|SERVICE": { + "lastModified": 1617956393463, + "customColor": "#ff0000" + }, + "nullbuiltin:service.errors.fourxx.rate|AVG|TOTAL|BAR|SERVICE": { + "lastModified": 1617956441725, + "customColor": "#fff29a" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:{{.env}}", + "Component:{{.tag}}" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 38, + "left": 950, + "width": 152, + "height": 152 + }, + "tileFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + } + }, + { + "name": "Overall Health", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 0, + "left": 38, + "width": 1064, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 532, + "left": 38, + "width": 1064, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 570, + "left": 38, + "width": 1064, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Request Count and Number of Errors", + "defaultName": "Custom chart", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [ + { + "metric": "builtin:service.response.time", + "aggregation": "AVG", + "type": "LINE", + "entityType": "SERVICE", + "dimensions": [], + "sortAscending": false, + "sortColumn": false, + "aggregationRate": "TOTAL" + }, + { + "metric": "builtin:service.requestCount.total", + "aggregation": "NONE", + "type": "BAR", + "entityType": "SERVICE", + "dimensions": [], + "sortAscending": false, + "sortColumn": false, + "aggregationRate": "TOTAL" + }, + { + "metric": "builtin:service.errors.total.count", + "aggregation": "NONE", + "type": "BAR", + "entityType": "SERVICE", + "dimensions": [], + "sortAscending": false, + "sortColumn": true, + "aggregationRate": "TOTAL" + } + ], + "resultMetadata": { + "nullbuiltin:service.requestCount.total|NONE|TOTAL|BAR|SERVICE": { + "lastModified": 1595275720776, + "customColor": "#008cdb" + }, + "nullbuiltin:service.errors.total.count|NONE|TOTAL|BAR|SERVICE": { + "lastModified": 1595275955999, + "customColor": "#ef651f" + }, + "nullbuiltin:service.response.time|AVG|TOTAL|LINE|SERVICE": { + "lastModified": 1595275686773, + "customColor": "#b4e5f9" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:{{.env}}", + "Component:{{.tag}}" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 190, + "left": 38, + "width": 1064, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 38, + "left": 646, + "width": 190, + "height": 152 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:{{.env}}", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 38, + "left": 342, + "width": 190, + "height": 152 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:{{.env}}", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 190, + "height": 152 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:{{.env}}", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ASBC-HAL/notification/README.md b/BMW-Dynatrace-config/CD_ASBC-HAL/notification/README.md new file mode 100644 index 00000000..e1a6af84 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ASBC-HAL/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-HAL/notification/email.json b/BMW-Dynatrace-config/CD_ASBC-HAL/notification/email.json new file mode 100644 index 00000000..486642a7 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ASBC-HAL/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_Messaging-Services/notification/CDMessaging-Services.json b/BMW-Dynatrace-config/CD_ASBC-HAL/notification/msTeams.json similarity index 72% rename from BMW-Dynatrace-config/CD_Messaging-Services/notification/CDMessaging-Services.json rename to BMW-Dynatrace-config/CD_ASBC-HAL/notification/msTeams.json index b79eab31..33e92cf6 100644 --- a/BMW-Dynatrace-config/CD_Messaging-Services/notification/CDMessaging-Services.json +++ b/BMW-Dynatrace-config/CD_ASBC-HAL/notification/msTeams.json @@ -1,11 +1,11 @@ { "acceptAnyCertificate": false, "active": true, - "alertingProfile": "{{.apid}}", + "alertingProfile": "{{.alertingProfile}}", "headers": [], "name": "{{.name}}", "notifyEventMergesEnabled": false, "payload": "{\n\"title\":\"{ProblemTitle}\",\n\"text\":\"{ProblemDetailsHTML}\",\n\"themeColor\":\"EA4300\"\n}", "type": "WEBHOOK", - "url": "https://msggroup.webhook.office.com/webhookb2/empty" + "url": "{{.webhook}}" } \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ASBC-HAL/notification/notification.yaml b/BMW-Dynatrace-config/CD_ASBC-HAL/notification/notification.yaml new file mode 100644 index 00000000..ec65111c --- /dev/null +++ b/BMW-Dynatrace-config/CD_ASBC-HAL/notification/notification.yaml @@ -0,0 +1,51 @@ +config: +- CDASBC-HAL-PROD: msTeams.json +- CDASBC-HAL-INT: msTeams.json + +#Prod notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDASBC-HAL-PROD: +- name: CD_ASBC-HAL PROD +- alertingProfile: CD_ASBC-HAL/alerting-profile/CDASBC-HAL-PROD.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDASBC-HAL-PROD.EMEA-Prod: +- name: CD_ASBC-HAL PROD +- alertingProfile: CD_ASBC-HAL/alerting-profile/CDASBC-HAL-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDASBC-HAL-PROD.NA-Prod: +- name: CD_ASBC-HAL PROD +- alertingProfile: CD_ASBC-HAL/alerting-profile/CDASBC-HAL-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDASBC-HAL-PROD.CN-Prod: +- name: CD_ASBC-HAL PROD +- alertingProfile: CD_ASBC-HAL/alerting-profile/CDASBC-HAL-PROD.id +- webhook: https://empty +- skipDeployment: "false" + +#INT notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDASBC-HAL-INT: +- name: CD_ASBC-HAL INT +- alertingProfile: CD_ASBC-HAL/alerting-profile/CDASBC-HAL-INT.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDASBC-HAL-INT.EMEA-PreProd: +- name: CD_ASBC-HAL INT +- alertingProfile: CD_ASBC-HAL/alerting-profile/CDASBC-HAL-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDASBC-HAL-INT.NA-PreProd: +- name: CD_ASBC-HAL INT +- alertingProfile: CD_ASBC-HAL/alerting-profile/CDASBC-HAL-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDASBC-HAL-INT.CN-PreProd: +- name: CD_ASBC-HAL INT +- alertingProfile: CD_ASBC-HAL/alerting-profile/CDASBC-HAL-INT.id +- webhook: https://empty +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ASBC-HAL/synthetic-monitor/README.md b/BMW-Dynatrace-config/CD_ASBC-HAL/synthetic-monitor/README.md new file mode 100644 index 00000000..1695924c --- /dev/null +++ b/BMW-Dynatrace-config/CD_ASBC-HAL/synthetic-monitor/README.md @@ -0,0 +1,4 @@ + +### How to configure synthetics? + +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Synthetic+Monitors) page to configure your synthetics. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ASBC-HAL/synthetic-monitor/default.json b/BMW-Dynatrace-config/CD_ASBC-HAL/synthetic-monitor/default.json new file mode 100644 index 00000000..cf83039b --- /dev/null +++ b/BMW-Dynatrace-config/CD_ASBC-HAL/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-HAL/synthetic-monitor/synthetic-monitor.yaml b/BMW-Dynatrace-config/CD_ASBC-HAL/synthetic-monitor/synthetic-monitor.yaml new file mode 100644 index 00000000..7942abdd --- /dev/null +++ b/BMW-Dynatrace-config/CD_ASBC-HAL/synthetic-monitor/synthetic-monitor.yaml @@ -0,0 +1,10 @@ +config: +- ASBC-HAL: default.json + +ASBC-HAL: +- name: CD_ASBC-HAL - +- mzName: CD_ASBC-HAL/management-zone/CDASBC-HAL.name +- mzId: CD_ASBC-HAL/management-zone/CDASBC-HAL.id +- endpoint: +- location: +- skipDeployment: "true" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ASBC-RSU/calculated-metrics-service/README.md b/BMW-Dynatrace-config/CD_ASBC-RSU/calculated-metrics-service/README.md new file mode 100644 index 00000000..0bf8efbc --- /dev/null +++ b/BMW-Dynatrace-config/CD_ASBC-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_ASBC-RSU/conditional-naming-processgroup/README.md b/BMW-Dynatrace-config/CD_ASBC-RSU/conditional-naming-processgroup/README.md new file mode 100644 index 00000000..f94196a5 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ASBC-RSU/conditional-naming-processgroup/README.md @@ -0,0 +1,67 @@ +### Process Group Detection Rules and Naming + +#### Detection Rule or Naming? + +For the explanation, we're using a real example of the Infotainment application: + +!(PGNaming1)[../../../../img/PGNaming1.PNG] + +Before working with your dashboards and alerting profiles, an important task to do when working with Dynatrace is checking +the structure of your applications (process groups). You can do that clicking under *technologies* and filter using your +application Management Zone. + +In the picture above, there are two Process Groups called bon-information-prod. **If you see duplicated process groups like in** +**this case, you MUST follow this guideline** + +Next step would be to open both process groups and compare the metadata. In that way, you can identify if all process instances are +part of the same application or not. An easy way to do that is asking yourself: how many instances of my application do i have? + +If you have 4 instances in total and you're able to see 2 in one PG and other 2 in other PG it means that **they are part of the ** +**same application** + +Another situation could be that checking on the metadata, then you see that are **two different application** and Dynatrace is just naming +the process group in the same way + +*Same application* +- Problem: Dynatrace is creating two different process groups, what transalates in two separated services for the same application. Instead of +seeing all the traffic in one service, you will have it splitted and it will complicate your monitoring +- Solution: create a process group detection rule. Contact Dynatrace Expert + +*Different application* +- Problem: Dynatrace is just naming in the same way applications that are different. +- Solution: This case is less severe, since it can be fixed with a process group naming rule. + + +What about our example? +!(PGNaming2)[../../../../img/PGNaming2.PNG] +!(PGNaming3)[../../../../img/PGNaming3.PNG] + +Based on the feedback of the infotaiment team, each process group is a different application (microservice) and it's visible in the kubernetes container/workload +within the metadata of each Process Group. + +#### How to create a Process Group Detection Rule +1. Open the *conditional-naming-processgroup.yaml* file and create a rule that looks like this: +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName} +- tag: Infotainment +- skipDeployment: false +``` +The result of the rule will be renaming the PG to this: +``` +bon-information-prod ipa +bon-information-prod rsl +``` + +Other possible placeholders that you can use are for example: +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName/[^\\-]*$} +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesFullPodName/buffet-(.*?)-} +{ProcessGroup:DetectedName} - {HostGroup:Name/[^\\_]*$} +{ProcessGroup:KubernetesNamespace} +{ProcessGroup:CommandLineArgs/.*?\\-f\\s\\/www\\/(.*?)\\/generated\\/httpd\\.conf.*?} + +You can combine different ones. Check the (documentation)[link] for more \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ASBC-RSU/conditional-naming-processgroup/conditional-naming-processgroup.yaml b/BMW-Dynatrace-config/CD_ASBC-RSU/conditional-naming-processgroup/conditional-naming-processgroup.yaml new file mode 100644 index 00000000..0edfd5d0 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ASBC-RSU/conditional-naming-processgroup/conditional-naming-processgroup.yaml @@ -0,0 +1,8 @@ +config: +- CDASBC-RSU: template.json + +CDASBC-RSU: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: ASBC-RSU +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_ASBC-RSU/conditional-naming-processgroup/template.json b/BMW-Dynatrace-config/CD_ASBC-RSU/conditional-naming-processgroup/template.json new file mode 100644 index 00000000..7c039808 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ASBC-RSU/conditional-naming-processgroup/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "type": "PROCESS_GROUP" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ASBC-RSU/conditional-naming-service/README.md b/BMW-Dynatrace-config/CD_ASBC-RSU/conditional-naming-service/README.md new file mode 100644 index 00000000..c34ef308 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ASBC-RSU/conditional-naming-service/README.md @@ -0,0 +1,35 @@ +### Service Naming Rules + +A typical case could be that you access to *Transaction & Services* and you find two services that are exactly the same: +*DataDownloadV1* +*DataDownloadV1* + +If you drilldown into the service and you check in the process group, you may have a PROD and a E2E for each service. + +*Note: if you see that both process group are exactly the same, please contact a Dynatrace expert to create a Process* +*Group detection rule* + +In the case the PG are PROD and E2E, then we need to create a rule that looks like this: + +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {Service:DetectedName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +- tag: Infotainment +- skipDeployment: false +``` + +The rule will get the Service Detected Name (current name) and it will extract (with a regex) the part of the kubernetes namespace after the "-", so -prod or -e2e, resulting in: +*DataDownloadV1 - prod* +*DataDownloadV1 - e2e* + +Now, services will be easy to identify. + +You can create rules based on any property/metadata. Some other placeholder's eamples: +{Service:DatabaseName} - E2E +{Service:WebServiceName} - {ProcessGroup:Kubernetes:microservice} - {ProcessGroup:Kubernetes:environment} +{Service:DetectedName} - {ProcessGroup:KubernetesContainerName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +{Service:DetectedName} - {ProcessGroup:SpringBootProfileName/[^\\-]*$} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ASBC-RSU/conditional-naming-service/conditional-naming-service.yaml b/BMW-Dynatrace-config/CD_ASBC-RSU/conditional-naming-service/conditional-naming-service.yaml new file mode 100644 index 00000000..0edfd5d0 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ASBC-RSU/conditional-naming-service/conditional-naming-service.yaml @@ -0,0 +1,8 @@ +config: +- CDASBC-RSU: template.json + +CDASBC-RSU: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: ASBC-RSU +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_ASBC-RSU/conditional-naming-service/template.json b/BMW-Dynatrace-config/CD_ASBC-RSU/conditional-naming-service/template.json new file mode 100644 index 00000000..5d4fac56 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ASBC-RSU/conditional-naming-service/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "type": "SERVICE" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ASBC-RSU/custom-service-java/README.md b/BMW-Dynatrace-config/CD_ASBC-RSU/custom-service-java/README.md new file mode 100644 index 00000000..5f35e5c1 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ASBC-RSU/custom-service-java/README.md @@ -0,0 +1,4 @@ + +### How to configure custom services? + +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Custom+Services) page to configure your custom services. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ASBC-RSU/custom-service-java/custom-service-java.yaml b/BMW-Dynatrace-config/CD_ASBC-RSU/custom-service-java/custom-service-java.yaml new file mode 100644 index 00000000..25f8a028 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ASBC-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_ASBC-RSU/custom-service-java/template-1-1.json b/BMW-Dynatrace-config/CD_ASBC-RSU/custom-service-java/template-1-1.json new file mode 100644 index 00000000..b3003515 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ASBC-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_ASBC-RSU/dashboard/README.md b/BMW-Dynatrace-config/CD_ASBC-RSU/dashboard/README.md new file mode 100644 index 00000000..dffcdc8a --- /dev/null +++ b/BMW-Dynatrace-config/CD_ASBC-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_ASBC-RSU/dashboard/dashboard.yaml b/BMW-Dynatrace-config/CD_ASBC-RSU/dashboard/dashboard.yaml new file mode 100644 index 00000000..6391d12f --- /dev/null +++ b/BMW-Dynatrace-config/CD_ASBC-RSU/dashboard/dashboard.yaml @@ -0,0 +1,127 @@ +config: +- CDASBC-RSU-PROD: default.json +- CDASBC-RSU-E2E: default.json +- CDASBC-RSU-INT: default.json +- CDASBC-RSU-TEST: default.json + +#PROD dashboards for EMEA/NA/CN Prod +#Dry-run needed for all hubs +CDASBC-RSU-PROD: +- name: CD_ASBC-RSU PROD +- mzName: CD_ASBC-RSU/management-zone/CDASBC-RSU.name +- mzId: CD_ASBC-RSU/management-zone/CDASBC-RSU.id +- env: PROD +- skipDeployment: "true" +#Configuration +CDASBC-RSU-PROD.EMEA-Prod: +- name: CD_ASBC-RSU PROD +- mzName: CD_ASBC-RSU/management-zone/CDASBC-RSU.name +- mzId: CD_ASBC-RSU/management-zone/CDASBC-RSU.id +- tag: ASBC-RSU +- env: PROD +- skipDeployment: "false" +CDASBC-RSU-PROD.NA-Prod: +- name: CD_ASBC-RSU PROD +- mzName: CD_ASBC-RSU/management-zone/CDASBC-RSU.name +- mzId: CD_ASBC-RSU/management-zone/CDASBC-RSU.id +- tag: ASBC-RSU +- env: PROD +- skipDeployment: "false" +CDASBC-RSU-PROD.CN-Prod: +- name: CD_ASBC-RSU PROD +- mzName: CD_ASBC-RSU/management-zone/CDASBC-RSU.name +- mzId: CD_ASBC-RSU/management-zone/CDASBC-RSU.id +- tag: ASBC-RSU +- env: PROD +- skipDeployment: "false" + +#E2E dashboards for EMEA/NA/CN E2E +#Dry-run needed for all hubs +CDASBC-RSU-E2E: +- name: CD_ASBC-RSU E2E +- mzName: CD_ASBC-RSU/management-zone/CDASBC-RSU.name +- mzId: CD_ASBC-RSU/management-zone/CDASBC-RSU.id +- env: E2E +- skipDeployment: "true" +#Configuration +CDASBC-RSU-E2E.EMEA-Prod: +- name: CD_ASBC-RSU E2E +- mzName: CD_ASBC-RSU/management-zone/CDASBC-RSU.name +- mzId: CD_ASBC-RSU/management-zone/CDASBC-RSU.id +- env: E2E +- tag: ASBC-RSU +- skipDeployment: "true" +CDASBC-RSU-E2E.NA-Prod: +- name: CD_ASBC-RSU E2E +- mzName: CD_ASBC-RSU/management-zone/CDASBC-RSU.name +- mzId: CD_ASBC-RSU/management-zone/CDASBC-RSU.id +- env: E2E +- tag: ASBC-RSU +- skipDeployment: "true" +CDASBC-RSU-E2E.CN-Prod: +- name: CD_ASBC-RSU E2E +- mzName: CD_ASBC-RSU/management-zone/CDASBC-RSU.name +- mzId: CD_ASBC-RSU/management-zone/CDASBC-RSU.id +- env: E2E +- tag: ASBC-RSU +- skipDeployment: "true" + +#INT dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDASBC-RSU-INT: +- name: CD_ASBC-RSU INT +- mzName: CD_ASBC-RSU/management-zone/CDASBC-RSU.name +- mzId: CD_ASBC-RSU/management-zone/CDASBC-RSU.id +- env: INT +- tag: ASBC-RSU +- skipDeployment: "true" +#Configuration +CDASBC-RSU-INT.EMEA-PreProd: +- name: CD_ASBC-RSU INT +- mzName: CD_ASBC-RSU/management-zone/CDASBC-RSU.name +- mzId: CD_ASBC-RSU/management-zone/CDASBC-RSU.id +- env: INT +- tag: ASBC-RSU +- skipDeployment: "false" +CDASBC-RSU-INT.NA-PreProd: +- name: CD_ASBC-RSU INT +- mzName: CD_ASBC-RSU/management-zone/CDASBC-RSU.name +- mzId: CD_ASBC-RSU/management-zone/CDASBC-RSU.id +- env: INT +- skipDeployment: "false" +CDASBC-RSU-INT.CN-PreProd: +- name: CD_ASBC-RSU INT +- mzName: CD_ASBC-RSU/management-zone/CDASBC-RSU.name +- mzId: CD_ASBC-RSU/management-zone/CDASBC-RSU.id +- env: INT +- skipDeployment: "false" + +#TEST dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDASBC-RSU-TEST: +- name: CD_ASBC-RSU TEST +- mzName: CD_ASBC-RSU/management-zone/CDASBC-RSU.name +- mzId: CD_ASBC-RSU/management-zone/CDASBC-RSU.id +- tag: ASBC-RSU +- env: TEST +- skipDeployment: "true" +#Configuration +CDASBC-RSU-TEST.EMEA-PreProd: +- name: CD_ASBC-RSU TEST +- mzName: CD_ASBC-RSU/management-zone/CDASBC-RSU.name +- mzId: CD_ASBC-RSU/management-zone/CDASBC-RSU.id +- tag: ASBC-RSU +- env: TEST +- skipDeployment: "false" +CDASBC-RSU-TEST.NA-PreProd: +- name: CD_ASBC-RSU TEST +- mzName: CD_ASBC-RSU/management-zone/CDASBC-RSU.name +- mzId: CD_ASBC-RSU/management-zone/CDASBC-RSU.id +- env: TEST +- skipDeployment: "false" +CDASBC-RSU-TEST.CN-PreProd: +- name: CD_ASBC-RSU TEST +- mzName: CD_ASBC-RSU/management-zone/CDASBC-RSU.name +- mzId: CD_ASBC-RSU/management-zone/CDASBC-RSU.id +- env: TEST +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ASBC-RSU/dashboard/default.json b/BMW-Dynatrace-config/CD_ASBC-RSU/dashboard/default.json new file mode 100644 index 00000000..6c685810 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ASBC-RSU/dashboard/default.json @@ -0,0 +1,308 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.214.107.20210407-223952" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": true, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "timeframe": "-24h to now" + }, + "tags": [ + "{{.tag}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 228, + "left": 38, + "width": 1064, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Failure rate (HTTP 4xx/5xx errors)", + "defaultName": "Custom chart", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [ + { + "metric": "builtin:service.errors.fourxx.rate", + "aggregation": "AVG", + "type": "BAR", + "entityType": "SERVICE", + "dimensions": [], + "sortAscending": false, + "sortColumn": false, + "aggregationRate": "TOTAL" + }, + { + "metric": "builtin:service.errors.fivexx.rate", + "aggregation": "AVG", + "type": "BAR", + "entityType": "SERVICE", + "dimensions": [], + "sortAscending": false, + "sortColumn": true, + "aggregationRate": "TOTAL" + } + ], + "resultMetadata": { + "nullbuiltin:service.errors.fivexx.rate|AVG|TOTAL|BAR|SERVICE": { + "lastModified": 1617956393463, + "customColor": "#ff0000" + }, + "nullbuiltin:service.errors.fourxx.rate|AVG|TOTAL|BAR|SERVICE": { + "lastModified": 1617956441725, + "customColor": "#fff29a" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:{{.env}}", + "Component:{{.tag}}" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 38, + "left": 950, + "width": 152, + "height": 152 + }, + "tileFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + } + }, + { + "name": "Overall Health", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 0, + "left": 38, + "width": 1064, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 532, + "left": 38, + "width": 1064, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 570, + "left": 38, + "width": 1064, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Request Count and Number of Errors", + "defaultName": "Custom chart", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [ + { + "metric": "builtin:service.response.time", + "aggregation": "AVG", + "type": "LINE", + "entityType": "SERVICE", + "dimensions": [], + "sortAscending": false, + "sortColumn": false, + "aggregationRate": "TOTAL" + }, + { + "metric": "builtin:service.requestCount.total", + "aggregation": "NONE", + "type": "BAR", + "entityType": "SERVICE", + "dimensions": [], + "sortAscending": false, + "sortColumn": false, + "aggregationRate": "TOTAL" + }, + { + "metric": "builtin:service.errors.total.count", + "aggregation": "NONE", + "type": "BAR", + "entityType": "SERVICE", + "dimensions": [], + "sortAscending": false, + "sortColumn": true, + "aggregationRate": "TOTAL" + } + ], + "resultMetadata": { + "nullbuiltin:service.requestCount.total|NONE|TOTAL|BAR|SERVICE": { + "lastModified": 1595275720776, + "customColor": "#008cdb" + }, + "nullbuiltin:service.errors.total.count|NONE|TOTAL|BAR|SERVICE": { + "lastModified": 1595275955999, + "customColor": "#ef651f" + }, + "nullbuiltin:service.response.time|AVG|TOTAL|LINE|SERVICE": { + "lastModified": 1595275686773, + "customColor": "#b4e5f9" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:{{.env}}", + "Component:{{.tag}}" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 190, + "left": 38, + "width": 1064, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 38, + "left": 646, + "width": 190, + "height": 152 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:{{.env}}", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 38, + "left": 342, + "width": 190, + "height": 152 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:{{.env}}", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 190, + "height": 152 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:{{.env}}", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ASBC-RSU/synthetic-monitor/README.md b/BMW-Dynatrace-config/CD_ASBC-RSU/synthetic-monitor/README.md new file mode 100644 index 00000000..1695924c --- /dev/null +++ b/BMW-Dynatrace-config/CD_ASBC-RSU/synthetic-monitor/README.md @@ -0,0 +1,4 @@ + +### How to configure synthetics? + +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Synthetic+Monitors) page to configure your synthetics. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ASBC-RSU/synthetic-monitor/default.json b/BMW-Dynatrace-config/CD_ASBC-RSU/synthetic-monitor/default.json new file mode 100644 index 00000000..cf83039b --- /dev/null +++ b/BMW-Dynatrace-config/CD_ASBC-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_ASBC-RSU/synthetic-monitor/synthetic-monitor.yaml b/BMW-Dynatrace-config/CD_ASBC-RSU/synthetic-monitor/synthetic-monitor.yaml new file mode 100644 index 00000000..670b4acb --- /dev/null +++ b/BMW-Dynatrace-config/CD_ASBC-RSU/synthetic-monitor/synthetic-monitor.yaml @@ -0,0 +1,10 @@ +config: +- ASBC-RSU: default.json + +ASBC-RSU: +- name: CD_ASBC-RSU - +- mzName: CD_ASBC-RSU/management-zone/CDASBC-RSU.name +- mzId: CD_ASBC-RSU/management-zone/CDASBC-RSU.id +- endpoint: +- location: +- skipDeployment: "true" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ASBC-SMACC/alerting-profile/alerting-profile.yaml b/BMW-Dynatrace-config/CD_ASBC-SMACC/alerting-profile/alerting-profile.yaml index a6d59d6d..abe07d6b 100644 --- a/BMW-Dynatrace-config/CD_ASBC-SMACC/alerting-profile/alerting-profile.yaml +++ b/BMW-Dynatrace-config/CD_ASBC-SMACC/alerting-profile/alerting-profile.yaml @@ -1,4 +1,60 @@ config: -- CDASBC-SMACC: CDASBC-SMACC.json -CDASBC-SMACC: -- name: CD_ASBC-SMACC +- CDASBC-SMACC-PROD: default.json +- CDASBC-SMACC-INT: default.json + +#Prod alerting profiles for EMEA/NA/CN +#Dry-run needed for all hubs +CDASBC-SMACC-PROD: +- name: CD_ASBC-SMACC PROD +- tag: ASBC-SMACC +- mzId: CD_ASBC-SMACC/management-zone/CDASBC-SMACC.id +- env: PROD +- skipDeployment: "true" +#Configuration +CDASBC-SMACC-PROD.EMEA-Prod: +- name: CD_ASBC-SMACC PROD +- tag: ASBC-SMACC +- mzId: CD_ASBC-SMACC/management-zone/CDASBC-SMACC.id +- env: PROD +- skipDeployment: "false" +CDASBC-SMACC-PROD.NA-Prod: +- name: CD_ASBC-SMACC PROD +- tag: ASBC-SMACC +- mzId: CD_ASBC-SMACC/management-zone/CDASBC-SMACC.id +- env: PROD +- skipDeployment: "false" +CDASBC-SMACC-PROD.CN-Prod: +- name: CD_ASBC-SMACC PROD +- tag: ASBC-SMACC +- mzId: CD_ASBC-SMACC/management-zone/CDASBC-SMACC.id +- env: PROD +- skipDeployment: "false" + + +#INT alerting profiles for EMEA/NA/CN +#Dry-run needed for all hubs +CDASBC-SMACC-INT: +- name: CD_ASBC-SMACC INT +- tag: ASBC-SMACC +- mzId: CD_ASBC-SMACC/management-zone/CDASBC-SMACC.id +- env: INT +- skipDeployment: "true" +#Configuration +CDASBC-SMACC-INT.EMEA-PreProd: +- name: CD_ASBC-SMACC INT +- tag: ASBC-SMACC +- mzId: CD_ASBC-SMACC/management-zone/CDASBC-SMACC.id +- env: INT +- skipDeployment: "false" +CDASBC-SMACC-INT.NA-PreProd: +- name: CD_ASBC-SMACC INT +- tag: ASBC-SMACC +- mzId: CD_ASBC-SMACC/management-zone/CDASBC-SMACC.id +- env: INT +- skipDeployment: "false" +CDASBC-SMACC-INT.CN-PreProd: +- name: CD_ASBC-SMACC INT +- tag: ASBC-SMACC +- mzId: CD_ASBC-SMACC/management-zone/CDASBC-SMACC.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_LSC/alerting-profile/LSC-FSU.json b/BMW-Dynatrace-config/CD_ASBC-SMACC/alerting-profile/default.json similarity index 66% rename from BMW-Dynatrace-config/CD_LSC/alerting-profile/LSC-FSU.json rename to BMW-Dynatrace-config/CD_ASBC-SMACC/alerting-profile/default.json index d10ad44a..681a4c64 100644 --- a/BMW-Dynatrace-config/CD_LSC/alerting-profile/LSC-FSU.json +++ b/BMW-Dynatrace-config/CD_ASBC-SMACC/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_ASBC-SMACC/calculated-metrics-service/README.md b/BMW-Dynatrace-config/CD_ASBC-SMACC/calculated-metrics-service/README.md new file mode 100644 index 00000000..0bf8efbc --- /dev/null +++ b/BMW-Dynatrace-config/CD_ASBC-SMACC/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-SMACC/conditional-naming-processgroup/README.md b/BMW-Dynatrace-config/CD_ASBC-SMACC/conditional-naming-processgroup/README.md new file mode 100644 index 00000000..f94196a5 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ASBC-SMACC/conditional-naming-processgroup/README.md @@ -0,0 +1,67 @@ +### Process Group Detection Rules and Naming + +#### Detection Rule or Naming? + +For the explanation, we're using a real example of the Infotainment application: + +!(PGNaming1)[../../../../img/PGNaming1.PNG] + +Before working with your dashboards and alerting profiles, an important task to do when working with Dynatrace is checking +the structure of your applications (process groups). You can do that clicking under *technologies* and filter using your +application Management Zone. + +In the picture above, there are two Process Groups called bon-information-prod. **If you see duplicated process groups like in** +**this case, you MUST follow this guideline** + +Next step would be to open both process groups and compare the metadata. In that way, you can identify if all process instances are +part of the same application or not. An easy way to do that is asking yourself: how many instances of my application do i have? + +If you have 4 instances in total and you're able to see 2 in one PG and other 2 in other PG it means that **they are part of the ** +**same application** + +Another situation could be that checking on the metadata, then you see that are **two different application** and Dynatrace is just naming +the process group in the same way + +*Same application* +- Problem: Dynatrace is creating two different process groups, what transalates in two separated services for the same application. Instead of +seeing all the traffic in one service, you will have it splitted and it will complicate your monitoring +- Solution: create a process group detection rule. Contact Dynatrace Expert + +*Different application* +- Problem: Dynatrace is just naming in the same way applications that are different. +- Solution: This case is less severe, since it can be fixed with a process group naming rule. + + +What about our example? +!(PGNaming2)[../../../../img/PGNaming2.PNG] +!(PGNaming3)[../../../../img/PGNaming3.PNG] + +Based on the feedback of the infotaiment team, each process group is a different application (microservice) and it's visible in the kubernetes container/workload +within the metadata of each Process Group. + +#### How to create a Process Group Detection Rule +1. Open the *conditional-naming-processgroup.yaml* file and create a rule that looks like this: +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName} +- tag: Infotainment +- skipDeployment: false +``` +The result of the rule will be renaming the PG to this: +``` +bon-information-prod ipa +bon-information-prod rsl +``` + +Other possible placeholders that you can use are for example: +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName/[^\\-]*$} +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesFullPodName/buffet-(.*?)-} +{ProcessGroup:DetectedName} - {HostGroup:Name/[^\\_]*$} +{ProcessGroup:KubernetesNamespace} +{ProcessGroup:CommandLineArgs/.*?\\-f\\s\\/www\\/(.*?)\\/generated\\/httpd\\.conf.*?} + +You can combine different ones. Check the (documentation)[link] for more \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ASBC-SMACC/conditional-naming-processgroup/conditional-naming-processgroup.yaml b/BMW-Dynatrace-config/CD_ASBC-SMACC/conditional-naming-processgroup/conditional-naming-processgroup.yaml new file mode 100644 index 00000000..e9eb53e2 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ASBC-SMACC/conditional-naming-processgroup/conditional-naming-processgroup.yaml @@ -0,0 +1,8 @@ +config: +- CDASBC-SMACC: template.json + +CDASBC-SMACC: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: ASBC-SMACC +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_ASBC-SMACC/conditional-naming-processgroup/template.json b/BMW-Dynatrace-config/CD_ASBC-SMACC/conditional-naming-processgroup/template.json new file mode 100644 index 00000000..7c039808 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ASBC-SMACC/conditional-naming-processgroup/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "type": "PROCESS_GROUP" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ASBC-SMACC/conditional-naming-service/README.md b/BMW-Dynatrace-config/CD_ASBC-SMACC/conditional-naming-service/README.md new file mode 100644 index 00000000..c34ef308 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ASBC-SMACC/conditional-naming-service/README.md @@ -0,0 +1,35 @@ +### Service Naming Rules + +A typical case could be that you access to *Transaction & Services* and you find two services that are exactly the same: +*DataDownloadV1* +*DataDownloadV1* + +If you drilldown into the service and you check in the process group, you may have a PROD and a E2E for each service. + +*Note: if you see that both process group are exactly the same, please contact a Dynatrace expert to create a Process* +*Group detection rule* + +In the case the PG are PROD and E2E, then we need to create a rule that looks like this: + +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {Service:DetectedName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +- tag: Infotainment +- skipDeployment: false +``` + +The rule will get the Service Detected Name (current name) and it will extract (with a regex) the part of the kubernetes namespace after the "-", so -prod or -e2e, resulting in: +*DataDownloadV1 - prod* +*DataDownloadV1 - e2e* + +Now, services will be easy to identify. + +You can create rules based on any property/metadata. Some other placeholder's eamples: +{Service:DatabaseName} - E2E +{Service:WebServiceName} - {ProcessGroup:Kubernetes:microservice} - {ProcessGroup:Kubernetes:environment} +{Service:DetectedName} - {ProcessGroup:KubernetesContainerName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +{Service:DetectedName} - {ProcessGroup:SpringBootProfileName/[^\\-]*$} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ASBC-SMACC/conditional-naming-service/conditional-naming-service.yaml b/BMW-Dynatrace-config/CD_ASBC-SMACC/conditional-naming-service/conditional-naming-service.yaml new file mode 100644 index 00000000..e9eb53e2 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ASBC-SMACC/conditional-naming-service/conditional-naming-service.yaml @@ -0,0 +1,8 @@ +config: +- CDASBC-SMACC: template.json + +CDASBC-SMACC: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: ASBC-SMACC +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_ASBC-SMACC/conditional-naming-service/template.json b/BMW-Dynatrace-config/CD_ASBC-SMACC/conditional-naming-service/template.json new file mode 100644 index 00000000..5d4fac56 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ASBC-SMACC/conditional-naming-service/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "type": "SERVICE" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ASBC-SMACC/custom-service-java/README.md b/BMW-Dynatrace-config/CD_ASBC-SMACC/custom-service-java/README.md new file mode 100644 index 00000000..5f35e5c1 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ASBC-SMACC/custom-service-java/README.md @@ -0,0 +1,4 @@ + +### How to configure custom services? + +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Custom+Services) page to configure your custom services. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ASBC-SMACC/custom-service-java/custom-service-java.yaml b/BMW-Dynatrace-config/CD_ASBC-SMACC/custom-service-java/custom-service-java.yaml new file mode 100644 index 00000000..25f8a028 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ASBC-SMACC/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-SMACC/custom-service-java/template-1-1.json b/BMW-Dynatrace-config/CD_ASBC-SMACC/custom-service-java/template-1-1.json new file mode 100644 index 00000000..b3003515 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ASBC-SMACC/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-SMACC/dashboard/README.md b/BMW-Dynatrace-config/CD_ASBC-SMACC/dashboard/README.md new file mode 100644 index 00000000..dffcdc8a --- /dev/null +++ b/BMW-Dynatrace-config/CD_ASBC-SMACC/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-SMACC/dashboard/dashboard.yaml b/BMW-Dynatrace-config/CD_ASBC-SMACC/dashboard/dashboard.yaml new file mode 100644 index 00000000..ce1ec7cd --- /dev/null +++ b/BMW-Dynatrace-config/CD_ASBC-SMACC/dashboard/dashboard.yaml @@ -0,0 +1,127 @@ +config: +- CDASBC-SMACC-PROD: default.json +- CDASBC-SMACC-E2E: default.json +- CDASBC-SMACC-INT: default.json +- CDASBC-SMACC-TEST: default.json + +#PROD dashboards for EMEA/NA/CN Prod +#Dry-run needed for all hubs +CDASBC-SMACC-PROD: +- name: CD_ASBC-SMACC PROD +- mzName: CD_ASBC-SMACC/management-zone/CDASBC-SMACC.name +- mzId: CD_ASBC-SMACC/management-zone/CDASBC-SMACC.id +- env: PROD +- skipDeployment: "true" +#Configuration +CDASBC-SMACC-PROD.EMEA-Prod: +- name: CD_ASBC-SMACC PROD +- mzName: CD_ASBC-SMACC/management-zone/CDASBC-SMACC.name +- mzId: CD_ASBC-SMACC/management-zone/CDASBC-SMACC.id +- tag: ASBC-SMACC +- env: PROD +- skipDeployment: "false" +CDASBC-SMACC-PROD.NA-Prod: +- name: CD_ASBC-SMACC PROD +- mzName: CD_ASBC-SMACC/management-zone/CDASBC-SMACC.name +- mzId: CD_ASBC-SMACC/management-zone/CDASBC-SMACC.id +- tag: ASBC-SMACC +- env: PROD +- skipDeployment: "false" +CDASBC-SMACC-PROD.CN-Prod: +- name: CD_ASBC-SMACC PROD +- mzName: CD_ASBC-SMACC/management-zone/CDASBC-SMACC.name +- mzId: CD_ASBC-SMACC/management-zone/CDASBC-SMACC.id +- tag: ASBC-SMACC +- env: PROD +- skipDeployment: "false" + +#E2E dashboards for EMEA/NA/CN E2E +#Dry-run needed for all hubs +CDASBC-SMACC-E2E: +- name: CD_ASBC-SMACC E2E +- mzName: CD_ASBC-SMACC/management-zone/CDASBC-SMACC.name +- mzId: CD_ASBC-SMACC/management-zone/CDASBC-SMACC.id +- env: E2E +- skipDeployment: "true" +#Configuration +CDASBC-SMACC-E2E.EMEA-Prod: +- name: CD_ASBC-SMACC E2E +- mzName: CD_ASBC-SMACC/management-zone/CDASBC-SMACC.name +- mzId: CD_ASBC-SMACC/management-zone/CDASBC-SMACC.id +- env: E2E +- tag: ASBC-SMACC +- skipDeployment: "true" +CDASBC-SMACC-E2E.NA-Prod: +- name: CD_ASBC-SMACC E2E +- mzName: CD_ASBC-SMACC/management-zone/CDASBC-SMACC.name +- mzId: CD_ASBC-SMACC/management-zone/CDASBC-SMACC.id +- env: E2E +- tag: ASBC-SMACC +- skipDeployment: "true" +CDASBC-SMACC-E2E.CN-Prod: +- name: CD_ASBC-SMACC E2E +- mzName: CD_ASBC-SMACC/management-zone/CDASBC-SMACC.name +- mzId: CD_ASBC-SMACC/management-zone/CDASBC-SMACC.id +- env: E2E +- tag: ASBC-SMACC +- skipDeployment: "true" + +#INT dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDASBC-SMACC-INT: +- name: CD_ASBC-SMACC INT +- mzName: CD_ASBC-SMACC/management-zone/CDASBC-SMACC.name +- mzId: CD_ASBC-SMACC/management-zone/CDASBC-SMACC.id +- env: INT +- tag: ASBC-SMACC +- skipDeployment: "true" +#Configuration +CDASBC-SMACC-INT.EMEA-PreProd: +- name: CD_ASBC-SMACC INT +- mzName: CD_ASBC-SMACC/management-zone/CDASBC-SMACC.name +- mzId: CD_ASBC-SMACC/management-zone/CDASBC-SMACC.id +- env: INT +- tag: ASBC-SMACC +- skipDeployment: "false" +CDASBC-SMACC-INT.NA-PreProd: +- name: CD_ASBC-SMACC INT +- mzName: CD_ASBC-SMACC/management-zone/CDASBC-SMACC.name +- mzId: CD_ASBC-SMACC/management-zone/CDASBC-SMACC.id +- env: INT +- skipDeployment: "false" +CDASBC-SMACC-INT.CN-PreProd: +- name: CD_ASBC-SMACC INT +- mzName: CD_ASBC-SMACC/management-zone/CDASBC-SMACC.name +- mzId: CD_ASBC-SMACC/management-zone/CDASBC-SMACC.id +- env: INT +- skipDeployment: "false" + +#TEST dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDASBC-SMACC-TEST: +- name: CD_ASBC-SMACC TEST +- mzName: CD_ASBC-SMACC/management-zone/CDASBC-SMACC.name +- mzId: CD_ASBC-SMACC/management-zone/CDASBC-SMACC.id +- tag: ASBC-SMACC +- env: TEST +- skipDeployment: "true" +#Configuration +CDASBC-SMACC-TEST.EMEA-PreProd: +- name: CD_ASBC-SMACC TEST +- mzName: CD_ASBC-SMACC/management-zone/CDASBC-SMACC.name +- mzId: CD_ASBC-SMACC/management-zone/CDASBC-SMACC.id +- tag: ASBC-SMACC +- env: TEST +- skipDeployment: "false" +CDASBC-SMACC-TEST.NA-PreProd: +- name: CD_ASBC-SMACC TEST +- mzName: CD_ASBC-SMACC/management-zone/CDASBC-SMACC.name +- mzId: CD_ASBC-SMACC/management-zone/CDASBC-SMACC.id +- env: TEST +- skipDeployment: "false" +CDASBC-SMACC-TEST.CN-PreProd: +- name: CD_ASBC-SMACC TEST +- mzName: CD_ASBC-SMACC/management-zone/CDASBC-SMACC.name +- mzId: CD_ASBC-SMACC/management-zone/CDASBC-SMACC.id +- env: TEST +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ASBC-SMACC/dashboard/default.json b/BMW-Dynatrace-config/CD_ASBC-SMACC/dashboard/default.json new file mode 100644 index 00000000..6c685810 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ASBC-SMACC/dashboard/default.json @@ -0,0 +1,308 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.214.107.20210407-223952" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": true, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "timeframe": "-24h to now" + }, + "tags": [ + "{{.tag}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 228, + "left": 38, + "width": 1064, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Failure rate (HTTP 4xx/5xx errors)", + "defaultName": "Custom chart", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [ + { + "metric": "builtin:service.errors.fourxx.rate", + "aggregation": "AVG", + "type": "BAR", + "entityType": "SERVICE", + "dimensions": [], + "sortAscending": false, + "sortColumn": false, + "aggregationRate": "TOTAL" + }, + { + "metric": "builtin:service.errors.fivexx.rate", + "aggregation": "AVG", + "type": "BAR", + "entityType": "SERVICE", + "dimensions": [], + "sortAscending": false, + "sortColumn": true, + "aggregationRate": "TOTAL" + } + ], + "resultMetadata": { + "nullbuiltin:service.errors.fivexx.rate|AVG|TOTAL|BAR|SERVICE": { + "lastModified": 1617956393463, + "customColor": "#ff0000" + }, + "nullbuiltin:service.errors.fourxx.rate|AVG|TOTAL|BAR|SERVICE": { + "lastModified": 1617956441725, + "customColor": "#fff29a" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:{{.env}}", + "Component:{{.tag}}" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 38, + "left": 950, + "width": 152, + "height": 152 + }, + "tileFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + } + }, + { + "name": "Overall Health", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 0, + "left": 38, + "width": 1064, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 532, + "left": 38, + "width": 1064, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 570, + "left": 38, + "width": 1064, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Request Count and Number of Errors", + "defaultName": "Custom chart", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [ + { + "metric": "builtin:service.response.time", + "aggregation": "AVG", + "type": "LINE", + "entityType": "SERVICE", + "dimensions": [], + "sortAscending": false, + "sortColumn": false, + "aggregationRate": "TOTAL" + }, + { + "metric": "builtin:service.requestCount.total", + "aggregation": "NONE", + "type": "BAR", + "entityType": "SERVICE", + "dimensions": [], + "sortAscending": false, + "sortColumn": false, + "aggregationRate": "TOTAL" + }, + { + "metric": "builtin:service.errors.total.count", + "aggregation": "NONE", + "type": "BAR", + "entityType": "SERVICE", + "dimensions": [], + "sortAscending": false, + "sortColumn": true, + "aggregationRate": "TOTAL" + } + ], + "resultMetadata": { + "nullbuiltin:service.requestCount.total|NONE|TOTAL|BAR|SERVICE": { + "lastModified": 1595275720776, + "customColor": "#008cdb" + }, + "nullbuiltin:service.errors.total.count|NONE|TOTAL|BAR|SERVICE": { + "lastModified": 1595275955999, + "customColor": "#ef651f" + }, + "nullbuiltin:service.response.time|AVG|TOTAL|LINE|SERVICE": { + "lastModified": 1595275686773, + "customColor": "#b4e5f9" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:{{.env}}", + "Component:{{.tag}}" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 190, + "left": 38, + "width": 1064, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 38, + "left": 646, + "width": 190, + "height": 152 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:{{.env}}", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 38, + "left": 342, + "width": 190, + "height": 152 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:{{.env}}", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 190, + "height": 152 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:{{.env}}", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ASBC-SMACC/synthetic-monitor/README.md b/BMW-Dynatrace-config/CD_ASBC-SMACC/synthetic-monitor/README.md new file mode 100644 index 00000000..1695924c --- /dev/null +++ b/BMW-Dynatrace-config/CD_ASBC-SMACC/synthetic-monitor/README.md @@ -0,0 +1,4 @@ + +### How to configure synthetics? + +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Synthetic+Monitors) page to configure your synthetics. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ASBC-SMACC/synthetic-monitor/default.json b/BMW-Dynatrace-config/CD_ASBC-SMACC/synthetic-monitor/default.json new file mode 100644 index 00000000..cf83039b --- /dev/null +++ b/BMW-Dynatrace-config/CD_ASBC-SMACC/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-SMACC/synthetic-monitor/synthetic-monitor.yaml b/BMW-Dynatrace-config/CD_ASBC-SMACC/synthetic-monitor/synthetic-monitor.yaml new file mode 100644 index 00000000..9b4e671f --- /dev/null +++ b/BMW-Dynatrace-config/CD_ASBC-SMACC/synthetic-monitor/synthetic-monitor.yaml @@ -0,0 +1,10 @@ +config: +- ASBC-SMACC: default.json + +ASBC-SMACC: +- name: CD_ASBC-SMACC - +- mzName: CD_ASBC-SMACC/management-zone/CDASBC-SMACC.name +- mzId: CD_ASBC-SMACC/management-zone/CDASBC-SMACC.id +- endpoint: +- location: +- skipDeployment: "true" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_App-Repository/alerting-profile/CDApp-Repository.json b/BMW-Dynatrace-config/CD_App-Repository/alerting-profile/CDApp-Repository.json deleted file mode 100644 index 986436ad..00000000 --- a/BMW-Dynatrace-config/CD_App-Repository/alerting-profile/CDApp-Repository.json +++ /dev/null @@ -1,63 +0,0 @@ -{ - "displayName": "{{.name}}", - "eventTypeFilters": [], - "managementZoneId": 2107206930322242800, - "metadata": { - "clusterVersion": "1.209.98.20210122-102634", - "configurationVersions": [], - "currentConfigurationVersions": [ - "0" - ] - }, - "mzId": "2107206930322242750", - "rules": [ - { - "delayInMinutes": 0, - "severityLevel": "AVAILABILITY", - "tagFilter": { - "includeMode": "NONE", - "tagFilters": [] - } - }, - { - "delayInMinutes": 0, - "severityLevel": "ERROR", - "tagFilter": { - "includeMode": "NONE", - "tagFilters": [] - } - }, - { - "delayInMinutes": 30, - "severityLevel": "PERFORMANCE", - "tagFilter": { - "includeMode": "NONE", - "tagFilters": [] - } - }, - { - "delayInMinutes": 30, - "severityLevel": "RESOURCE_CONTENTION", - "tagFilter": { - "includeMode": "NONE", - "tagFilters": [] - } - }, - { - "delayInMinutes": 0, - "severityLevel": "CUSTOM_ALERT", - "tagFilter": { - "includeMode": "NONE", - "tagFilters": [] - } - }, - { - "delayInMinutes": 0, - "severityLevel": "MONITORING_UNAVAILABLE", - "tagFilter": { - "includeMode": "NONE", - "tagFilters": [] - } - } - ] -} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_App-Repository/alerting-profile/alerting-profile.yaml b/BMW-Dynatrace-config/CD_App-Repository/alerting-profile/alerting-profile.yaml index f496daa6..56f3e123 100644 --- a/BMW-Dynatrace-config/CD_App-Repository/alerting-profile/alerting-profile.yaml +++ b/BMW-Dynatrace-config/CD_App-Repository/alerting-profile/alerting-profile.yaml @@ -1,5 +1,60 @@ config: -- CDApp-Repository: CDApp-Repository.json +- CDApp-Repository-PROD: default.json +- CDApp-Repository-INT: default.json -CDApp-Repository: -- name: CD_App-Repository +#Prod alerting profiles for EMEA/NA/CN +#Dry-run needed for all hubs +CDApp-Repository-PROD: +- name: CD_App-Repository PROD +- tag: App-Repository +- mzId: CD_App-Repository/management-zone/CDApp-Repository.id +- env: PROD +- skipDeployment: "true" +#Configuration +CDApp-Repository-PROD.EMEA-Prod: +- name: CD_App-Repository PROD +- tag: App-Repository +- mzId: CD_App-Repository/management-zone/CDApp-Repository.id +- env: PROD +- skipDeployment: "false" +CDApp-Repository-PROD.NA-Prod: +- name: CD_App-Repository PROD +- tag: App-Repository +- mzId: CD_App-Repository/management-zone/CDApp-Repository.id +- env: PROD +- skipDeployment: "false" +CDApp-Repository-PROD.CN-Prod: +- name: CD_App-Repository PROD +- tag: App-Repository +- mzId: CD_App-Repository/management-zone/CDApp-Repository.id +- env: PROD +- skipDeployment: "false" + + +#INT alerting profiles for EMEA/NA/CN +#Dry-run needed for all hubs +CDApp-Repository-INT: +- name: CD_App-Repository INT +- tag: App-Repository +- mzId: CD_App-Repository/management-zone/CDApp-Repository.id +- env: INT +- skipDeployment: "true" +#Configuration +CDApp-Repository-INT.EMEA-PreProd: +- name: CD_App-Repository INT +- tag: App-Repository +- mzId: CD_App-Repository/management-zone/CDApp-Repository.id +- env: INT +- skipDeployment: "false" +CDApp-Repository-INT.NA-PreProd: +- name: CD_App-Repository INT +- tag: App-Repository +- mzId: CD_App-Repository/management-zone/CDApp-Repository.id +- env: INT +- skipDeployment: "false" +CDApp-Repository-INT.CN-PreProd: +- name: CD_App-Repository INT +- tag: App-Repository +- mzId: CD_App-Repository/management-zone/CDApp-Repository.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_App-Repository/alerting-profile/default.json b/BMW-Dynatrace-config/CD_App-Repository/alerting-profile/default.json new file mode 100644 index 00000000..681a4c64 --- /dev/null +++ b/BMW-Dynatrace-config/CD_App-Repository/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_App-Repository/calculated-metrics-service/README.md b/BMW-Dynatrace-config/CD_App-Repository/calculated-metrics-service/README.md new file mode 100644 index 00000000..0bf8efbc --- /dev/null +++ b/BMW-Dynatrace-config/CD_App-Repository/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_App-Repository/conditional-naming-processgroup/README.md b/BMW-Dynatrace-config/CD_App-Repository/conditional-naming-processgroup/README.md new file mode 100644 index 00000000..f94196a5 --- /dev/null +++ b/BMW-Dynatrace-config/CD_App-Repository/conditional-naming-processgroup/README.md @@ -0,0 +1,67 @@ +### Process Group Detection Rules and Naming + +#### Detection Rule or Naming? + +For the explanation, we're using a real example of the Infotainment application: + +!(PGNaming1)[../../../../img/PGNaming1.PNG] + +Before working with your dashboards and alerting profiles, an important task to do when working with Dynatrace is checking +the structure of your applications (process groups). You can do that clicking under *technologies* and filter using your +application Management Zone. + +In the picture above, there are two Process Groups called bon-information-prod. **If you see duplicated process groups like in** +**this case, you MUST follow this guideline** + +Next step would be to open both process groups and compare the metadata. In that way, you can identify if all process instances are +part of the same application or not. An easy way to do that is asking yourself: how many instances of my application do i have? + +If you have 4 instances in total and you're able to see 2 in one PG and other 2 in other PG it means that **they are part of the ** +**same application** + +Another situation could be that checking on the metadata, then you see that are **two different application** and Dynatrace is just naming +the process group in the same way + +*Same application* +- Problem: Dynatrace is creating two different process groups, what transalates in two separated services for the same application. Instead of +seeing all the traffic in one service, you will have it splitted and it will complicate your monitoring +- Solution: create a process group detection rule. Contact Dynatrace Expert + +*Different application* +- Problem: Dynatrace is just naming in the same way applications that are different. +- Solution: This case is less severe, since it can be fixed with a process group naming rule. + + +What about our example? +!(PGNaming2)[../../../../img/PGNaming2.PNG] +!(PGNaming3)[../../../../img/PGNaming3.PNG] + +Based on the feedback of the infotaiment team, each process group is a different application (microservice) and it's visible in the kubernetes container/workload +within the metadata of each Process Group. + +#### How to create a Process Group Detection Rule +1. Open the *conditional-naming-processgroup.yaml* file and create a rule that looks like this: +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName} +- tag: Infotainment +- skipDeployment: false +``` +The result of the rule will be renaming the PG to this: +``` +bon-information-prod ipa +bon-information-prod rsl +``` + +Other possible placeholders that you can use are for example: +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName/[^\\-]*$} +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesFullPodName/buffet-(.*?)-} +{ProcessGroup:DetectedName} - {HostGroup:Name/[^\\_]*$} +{ProcessGroup:KubernetesNamespace} +{ProcessGroup:CommandLineArgs/.*?\\-f\\s\\/www\\/(.*?)\\/generated\\/httpd\\.conf.*?} + +You can combine different ones. Check the (documentation)[link] for more \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_App-Repository/conditional-naming-processgroup/conditional-naming-processgroup.yaml b/BMW-Dynatrace-config/CD_App-Repository/conditional-naming-processgroup/conditional-naming-processgroup.yaml new file mode 100644 index 00000000..225c42f9 --- /dev/null +++ b/BMW-Dynatrace-config/CD_App-Repository/conditional-naming-processgroup/conditional-naming-processgroup.yaml @@ -0,0 +1,8 @@ +config: +- CDApp-Repository: template.json + +CDApp-Repository: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: App-Repository +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_App-Repository/conditional-naming-processgroup/template.json b/BMW-Dynatrace-config/CD_App-Repository/conditional-naming-processgroup/template.json new file mode 100644 index 00000000..7c039808 --- /dev/null +++ b/BMW-Dynatrace-config/CD_App-Repository/conditional-naming-processgroup/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "type": "PROCESS_GROUP" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_App-Repository/conditional-naming-service/README.md b/BMW-Dynatrace-config/CD_App-Repository/conditional-naming-service/README.md new file mode 100644 index 00000000..c34ef308 --- /dev/null +++ b/BMW-Dynatrace-config/CD_App-Repository/conditional-naming-service/README.md @@ -0,0 +1,35 @@ +### Service Naming Rules + +A typical case could be that you access to *Transaction & Services* and you find two services that are exactly the same: +*DataDownloadV1* +*DataDownloadV1* + +If you drilldown into the service and you check in the process group, you may have a PROD and a E2E for each service. + +*Note: if you see that both process group are exactly the same, please contact a Dynatrace expert to create a Process* +*Group detection rule* + +In the case the PG are PROD and E2E, then we need to create a rule that looks like this: + +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {Service:DetectedName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +- tag: Infotainment +- skipDeployment: false +``` + +The rule will get the Service Detected Name (current name) and it will extract (with a regex) the part of the kubernetes namespace after the "-", so -prod or -e2e, resulting in: +*DataDownloadV1 - prod* +*DataDownloadV1 - e2e* + +Now, services will be easy to identify. + +You can create rules based on any property/metadata. Some other placeholder's eamples: +{Service:DatabaseName} - E2E +{Service:WebServiceName} - {ProcessGroup:Kubernetes:microservice} - {ProcessGroup:Kubernetes:environment} +{Service:DetectedName} - {ProcessGroup:KubernetesContainerName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +{Service:DetectedName} - {ProcessGroup:SpringBootProfileName/[^\\-]*$} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_App-Repository/conditional-naming-service/conditional-naming-service.yaml b/BMW-Dynatrace-config/CD_App-Repository/conditional-naming-service/conditional-naming-service.yaml new file mode 100644 index 00000000..225c42f9 --- /dev/null +++ b/BMW-Dynatrace-config/CD_App-Repository/conditional-naming-service/conditional-naming-service.yaml @@ -0,0 +1,8 @@ +config: +- CDApp-Repository: template.json + +CDApp-Repository: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: App-Repository +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_App-Repository/conditional-naming-service/template.json b/BMW-Dynatrace-config/CD_App-Repository/conditional-naming-service/template.json new file mode 100644 index 00000000..5d4fac56 --- /dev/null +++ b/BMW-Dynatrace-config/CD_App-Repository/conditional-naming-service/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "type": "SERVICE" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_App-Repository/custom-service-java/README.md b/BMW-Dynatrace-config/CD_App-Repository/custom-service-java/README.md new file mode 100644 index 00000000..5f35e5c1 --- /dev/null +++ b/BMW-Dynatrace-config/CD_App-Repository/custom-service-java/README.md @@ -0,0 +1,4 @@ + +### How to configure custom services? + +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Custom+Services) page to configure your custom services. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_App-Repository/custom-service-java/custom-service-java.yaml b/BMW-Dynatrace-config/CD_App-Repository/custom-service-java/custom-service-java.yaml new file mode 100644 index 00000000..25f8a028 --- /dev/null +++ b/BMW-Dynatrace-config/CD_App-Repository/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_App-Repository/custom-service-java/template-1-1.json b/BMW-Dynatrace-config/CD_App-Repository/custom-service-java/template-1-1.json new file mode 100644 index 00000000..b3003515 --- /dev/null +++ b/BMW-Dynatrace-config/CD_App-Repository/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_App-Repository/dashboard/README.md b/BMW-Dynatrace-config/CD_App-Repository/dashboard/README.md new file mode 100644 index 00000000..dffcdc8a --- /dev/null +++ b/BMW-Dynatrace-config/CD_App-Repository/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_App-Repository/dashboard/dashboard.yaml b/BMW-Dynatrace-config/CD_App-Repository/dashboard/dashboard.yaml new file mode 100644 index 00000000..8a09c47b --- /dev/null +++ b/BMW-Dynatrace-config/CD_App-Repository/dashboard/dashboard.yaml @@ -0,0 +1,127 @@ +config: +- CDApp-Repository-PROD: default.json +- CDApp-Repository-E2E: default.json +- CDApp-Repository-INT: default.json +- CDApp-Repository-TEST: default.json + +#PROD dashboards for EMEA/NA/CN Prod +#Dry-run needed for all hubs +CDApp-Repository-PROD: +- name: CD_App-Repository PROD +- mzName: CD_App-Repository/management-zone/CDApp-Repository.name +- mzId: CD_App-Repository/management-zone/CDApp-Repository.id +- env: PROD +- skipDeployment: "true" +#Configuration +CDApp-Repository-PROD.EMEA-Prod: +- name: CD_App-Repository PROD +- mzName: CD_App-Repository/management-zone/CDApp-Repository.name +- mzId: CD_App-Repository/management-zone/CDApp-Repository.id +- tag: App-Repository +- env: PROD +- skipDeployment: "false" +CDApp-Repository-PROD.NA-Prod: +- name: CD_App-Repository PROD +- mzName: CD_App-Repository/management-zone/CDApp-Repository.name +- mzId: CD_App-Repository/management-zone/CDApp-Repository.id +- tag: App-Repository +- env: PROD +- skipDeployment: "false" +CDApp-Repository-PROD.CN-Prod: +- name: CD_App-Repository PROD +- mzName: CD_App-Repository/management-zone/CDApp-Repository.name +- mzId: CD_App-Repository/management-zone/CDApp-Repository.id +- tag: App-Repository +- env: PROD +- skipDeployment: "false" + +#E2E dashboards for EMEA/NA/CN E2E +#Dry-run needed for all hubs +CDApp-Repository-E2E: +- name: CD_App-Repository E2E +- mzName: CD_App-Repository/management-zone/CDApp-Repository.name +- mzId: CD_App-Repository/management-zone/CDApp-Repository.id +- env: E2E +- skipDeployment: "true" +#Configuration +CDApp-Repository-E2E.EMEA-Prod: +- name: CD_App-Repository E2E +- mzName: CD_App-Repository/management-zone/CDApp-Repository.name +- mzId: CD_App-Repository/management-zone/CDApp-Repository.id +- env: E2E +- tag: App-Repository +- skipDeployment: "true" +CDApp-Repository-E2E.NA-Prod: +- name: CD_App-Repository E2E +- mzName: CD_App-Repository/management-zone/CDApp-Repository.name +- mzId: CD_App-Repository/management-zone/CDApp-Repository.id +- env: E2E +- tag: App-Repository +- skipDeployment: "true" +CDApp-Repository-E2E.CN-Prod: +- name: CD_App-Repository E2E +- mzName: CD_App-Repository/management-zone/CDApp-Repository.name +- mzId: CD_App-Repository/management-zone/CDApp-Repository.id +- env: E2E +- tag: App-Repository +- skipDeployment: "true" + +#INT dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDApp-Repository-INT: +- name: CD_App-Repository INT +- mzName: CD_App-Repository/management-zone/CDApp-Repository.name +- mzId: CD_App-Repository/management-zone/CDApp-Repository.id +- env: INT +- tag: App-Repository +- skipDeployment: "true" +#Configuration +CDApp-Repository-INT.EMEA-PreProd: +- name: CD_App-Repository INT +- mzName: CD_App-Repository/management-zone/CDApp-Repository.name +- mzId: CD_App-Repository/management-zone/CDApp-Repository.id +- env: INT +- tag: App-Repository +- skipDeployment: "false" +CDApp-Repository-INT.NA-PreProd: +- name: CD_App-Repository INT +- mzName: CD_App-Repository/management-zone/CDApp-Repository.name +- mzId: CD_App-Repository/management-zone/CDApp-Repository.id +- env: INT +- skipDeployment: "false" +CDApp-Repository-INT.CN-PreProd: +- name: CD_App-Repository INT +- mzName: CD_App-Repository/management-zone/CDApp-Repository.name +- mzId: CD_App-Repository/management-zone/CDApp-Repository.id +- env: INT +- skipDeployment: "false" + +#TEST dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDApp-Repository-TEST: +- name: CD_App-Repository TEST +- mzName: CD_App-Repository/management-zone/CDApp-Repository.name +- mzId: CD_App-Repository/management-zone/CDApp-Repository.id +- tag: App-Repository +- env: TEST +- skipDeployment: "true" +#Configuration +CDApp-Repository-TEST.EMEA-PreProd: +- name: CD_App-Repository TEST +- mzName: CD_App-Repository/management-zone/CDApp-Repository.name +- mzId: CD_App-Repository/management-zone/CDApp-Repository.id +- tag: App-Repository +- env: TEST +- skipDeployment: "false" +CDApp-Repository-TEST.NA-PreProd: +- name: CD_App-Repository TEST +- mzName: CD_App-Repository/management-zone/CDApp-Repository.name +- mzId: CD_App-Repository/management-zone/CDApp-Repository.id +- env: TEST +- skipDeployment: "false" +CDApp-Repository-TEST.CN-PreProd: +- name: CD_App-Repository TEST +- mzName: CD_App-Repository/management-zone/CDApp-Repository.name +- mzId: CD_App-Repository/management-zone/CDApp-Repository.id +- env: TEST +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_App-Repository/dashboard/default.json b/BMW-Dynatrace-config/CD_App-Repository/dashboard/default.json new file mode 100644 index 00000000..6c685810 --- /dev/null +++ b/BMW-Dynatrace-config/CD_App-Repository/dashboard/default.json @@ -0,0 +1,308 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.214.107.20210407-223952" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": true, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "timeframe": "-24h to now" + }, + "tags": [ + "{{.tag}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 228, + "left": 38, + "width": 1064, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Failure rate (HTTP 4xx/5xx errors)", + "defaultName": "Custom chart", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [ + { + "metric": "builtin:service.errors.fourxx.rate", + "aggregation": "AVG", + "type": "BAR", + "entityType": "SERVICE", + "dimensions": [], + "sortAscending": false, + "sortColumn": false, + "aggregationRate": "TOTAL" + }, + { + "metric": "builtin:service.errors.fivexx.rate", + "aggregation": "AVG", + "type": "BAR", + "entityType": "SERVICE", + "dimensions": [], + "sortAscending": false, + "sortColumn": true, + "aggregationRate": "TOTAL" + } + ], + "resultMetadata": { + "nullbuiltin:service.errors.fivexx.rate|AVG|TOTAL|BAR|SERVICE": { + "lastModified": 1617956393463, + "customColor": "#ff0000" + }, + "nullbuiltin:service.errors.fourxx.rate|AVG|TOTAL|BAR|SERVICE": { + "lastModified": 1617956441725, + "customColor": "#fff29a" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:{{.env}}", + "Component:{{.tag}}" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 38, + "left": 950, + "width": 152, + "height": 152 + }, + "tileFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + } + }, + { + "name": "Overall Health", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 0, + "left": 38, + "width": 1064, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 532, + "left": 38, + "width": 1064, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 570, + "left": 38, + "width": 1064, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Request Count and Number of Errors", + "defaultName": "Custom chart", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [ + { + "metric": "builtin:service.response.time", + "aggregation": "AVG", + "type": "LINE", + "entityType": "SERVICE", + "dimensions": [], + "sortAscending": false, + "sortColumn": false, + "aggregationRate": "TOTAL" + }, + { + "metric": "builtin:service.requestCount.total", + "aggregation": "NONE", + "type": "BAR", + "entityType": "SERVICE", + "dimensions": [], + "sortAscending": false, + "sortColumn": false, + "aggregationRate": "TOTAL" + }, + { + "metric": "builtin:service.errors.total.count", + "aggregation": "NONE", + "type": "BAR", + "entityType": "SERVICE", + "dimensions": [], + "sortAscending": false, + "sortColumn": true, + "aggregationRate": "TOTAL" + } + ], + "resultMetadata": { + "nullbuiltin:service.requestCount.total|NONE|TOTAL|BAR|SERVICE": { + "lastModified": 1595275720776, + "customColor": "#008cdb" + }, + "nullbuiltin:service.errors.total.count|NONE|TOTAL|BAR|SERVICE": { + "lastModified": 1595275955999, + "customColor": "#ef651f" + }, + "nullbuiltin:service.response.time|AVG|TOTAL|LINE|SERVICE": { + "lastModified": 1595275686773, + "customColor": "#b4e5f9" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:{{.env}}", + "Component:{{.tag}}" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 190, + "left": 38, + "width": 1064, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 38, + "left": 646, + "width": 190, + "height": 152 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:{{.env}}", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 38, + "left": 342, + "width": 190, + "height": 152 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:{{.env}}", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 190, + "height": 152 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:{{.env}}", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_App-Repository/notification/README.md b/BMW-Dynatrace-config/CD_App-Repository/notification/README.md new file mode 100644 index 00000000..e1a6af84 --- /dev/null +++ b/BMW-Dynatrace-config/CD_App-Repository/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_App-Repository/notification/email.json b/BMW-Dynatrace-config/CD_App-Repository/notification/email.json new file mode 100644 index 00000000..486642a7 --- /dev/null +++ b/BMW-Dynatrace-config/CD_App-Repository/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_PISA/notification/CDPISA-MSTeams.json b/BMW-Dynatrace-config/CD_App-Repository/notification/msTeams.json similarity index 52% rename from BMW-Dynatrace-config/CD_PISA/notification/CDPISA-MSTeams.json rename to BMW-Dynatrace-config/CD_App-Repository/notification/msTeams.json index c80323f9..33e92cf6 100644 --- a/BMW-Dynatrace-config/CD_PISA/notification/CDPISA-MSTeams.json +++ b/BMW-Dynatrace-config/CD_App-Repository/notification/msTeams.json @@ -1,11 +1,11 @@ { "acceptAnyCertificate": false, "active": true, - "alertingProfile": "{{.apid}}", + "alertingProfile": "{{.alertingProfile}}", "headers": [], "name": "{{.name}}", "notifyEventMergesEnabled": false, "payload": "{\n\"title\":\"{ProblemTitle}\",\n\"text\":\"{ProblemDetailsHTML}\",\n\"themeColor\":\"EA4300\"\n}", "type": "WEBHOOK", - "url": "https://teams.microsoft.com/l/channel/19%3a899f8fd03f1c4022a8c4da8606b57487%40thread.tacv2/Allgemein?groupId=4f7ed23e-0574-4df7-82c3-d5101c45a406&tenantId=ce849bab-cc1c-465b-b62e-18f07c9ac198" + "url": "{{.webhook}}" } \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_App-Repository/notification/notification.yaml b/BMW-Dynatrace-config/CD_App-Repository/notification/notification.yaml new file mode 100644 index 00000000..fbb68fb1 --- /dev/null +++ b/BMW-Dynatrace-config/CD_App-Repository/notification/notification.yaml @@ -0,0 +1,51 @@ +config: +- CDApp-Repository-PROD: msTeams.json +- CDApp-Repository-INT: msTeams.json + +#Prod notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDApp-Repository-PROD: +- name: CD_App-Repository PROD +- alertingProfile: CD_App-Repository/alerting-profile/CDApp-Repository-PROD.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDApp-Repository-PROD.EMEA-Prod: +- name: CD_App-Repository PROD +- alertingProfile: CD_App-Repository/alerting-profile/CDApp-Repository-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDApp-Repository-PROD.NA-Prod: +- name: CD_App-Repository PROD +- alertingProfile: CD_App-Repository/alerting-profile/CDApp-Repository-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDApp-Repository-PROD.CN-Prod: +- name: CD_App-Repository PROD +- alertingProfile: CD_App-Repository/alerting-profile/CDApp-Repository-PROD.id +- webhook: https://empty +- skipDeployment: "false" + +#INT notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDApp-Repository-INT: +- name: CD_App-Repository INT +- alertingProfile: CD_App-Repository/alerting-profile/CDApp-Repository-INT.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDApp-Repository-INT.EMEA-PreProd: +- name: CD_App-Repository INT +- alertingProfile: CD_App-Repository/alerting-profile/CDApp-Repository-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDApp-Repository-INT.NA-PreProd: +- name: CD_App-Repository INT +- alertingProfile: CD_App-Repository/alerting-profile/CDApp-Repository-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDApp-Repository-INT.CN-PreProd: +- name: CD_App-Repository INT +- alertingProfile: CD_App-Repository/alerting-profile/CDApp-Repository-INT.id +- webhook: https://empty +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_App-Repository/synthetic-monitor/README.md b/BMW-Dynatrace-config/CD_App-Repository/synthetic-monitor/README.md new file mode 100644 index 00000000..1695924c --- /dev/null +++ b/BMW-Dynatrace-config/CD_App-Repository/synthetic-monitor/README.md @@ -0,0 +1,4 @@ + +### How to configure synthetics? + +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Synthetic+Monitors) page to configure your synthetics. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_App-Repository/synthetic-monitor/default.json b/BMW-Dynatrace-config/CD_App-Repository/synthetic-monitor/default.json new file mode 100644 index 00000000..cf83039b --- /dev/null +++ b/BMW-Dynatrace-config/CD_App-Repository/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_App-Repository/synthetic-monitor/synthetic-monitor.yaml b/BMW-Dynatrace-config/CD_App-Repository/synthetic-monitor/synthetic-monitor.yaml new file mode 100644 index 00000000..3be1b4ca --- /dev/null +++ b/BMW-Dynatrace-config/CD_App-Repository/synthetic-monitor/synthetic-monitor.yaml @@ -0,0 +1,10 @@ +config: +- App-Repository: default.json + +App-Repository: +- name: CD_App-Repository - +- mzName: CD_App-Repository/management-zone/CDApp-Repository.name +- mzId: CD_App-Repository/management-zone/CDApp-Repository.id +- endpoint: +- location: +- skipDeployment: "true" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_BMWPoints/alerting-profile/alerting-profile.yaml b/BMW-Dynatrace-config/CD_BMWPoints/alerting-profile/alerting-profile.yaml new file mode 100644 index 00000000..4a32ea7b --- /dev/null +++ b/BMW-Dynatrace-config/CD_BMWPoints/alerting-profile/alerting-profile.yaml @@ -0,0 +1,60 @@ +config: +- CDBMWPoints-PROD: default.json +- CDBMWPoints-INT: default.json + +#Prod alerting profiles for EMEA/NA/CN +#Dry-run needed for all hubs +CDBMWPoints-PROD: +- name: CD_BMWPoints PROD +- tag: BMWPoints +- mzId: CD_BMWPoints/management-zone/CDBMWPoints.id +- env: PROD +- skipDeployment: "true" +#Configuration +CDBMWPoints-PROD.EMEA-Prod: +- name: CD_BMWPoints PROD +- tag: BMWPoints +- mzId: CD_BMWPoints/management-zone/CDBMWPoints.id +- env: PROD +- skipDeployment: "false" +CDBMWPoints-PROD.NA-Prod: +- name: CD_BMWPoints PROD +- tag: BMWPoints +- mzId: CD_BMWPoints/management-zone/CDBMWPoints.id +- env: PROD +- skipDeployment: "false" +CDBMWPoints-PROD.CN-Prod: +- name: CD_BMWPoints PROD +- tag: BMWPoints +- mzId: CD_BMWPoints/management-zone/CDBMWPoints.id +- env: PROD +- skipDeployment: "false" + + +#INT alerting profiles for EMEA/NA/CN +#Dry-run needed for all hubs +CDBMWPoints-INT: +- name: CD_BMWPoints INT +- tag: BMWPoints +- mzId: CD_BMWPoints/management-zone/CDBMWPoints.id +- env: INT +- skipDeployment: "true" +#Configuration +CDBMWPoints-INT.EMEA-PreProd: +- name: CD_BMWPoints INT +- tag: BMWPoints +- mzId: CD_BMWPoints/management-zone/CDBMWPoints.id +- env: INT +- skipDeployment: "false" +CDBMWPoints-INT.NA-PreProd: +- name: CD_BMWPoints INT +- tag: BMWPoints +- mzId: CD_BMWPoints/management-zone/CDBMWPoints.id +- env: INT +- skipDeployment: "false" +CDBMWPoints-INT.CN-PreProd: +- name: CD_BMWPoints INT +- tag: BMWPoints +- mzId: CD_BMWPoints/management-zone/CDBMWPoints.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_BMWPoints/alerting-profile/default.json b/BMW-Dynatrace-config/CD_BMWPoints/alerting-profile/default.json new file mode 100644 index 00000000..681a4c64 --- /dev/null +++ b/BMW-Dynatrace-config/CD_BMWPoints/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_BMWPoints/calculated-metrics-service/README.md b/BMW-Dynatrace-config/CD_BMWPoints/calculated-metrics-service/README.md new file mode 100644 index 00000000..0bf8efbc --- /dev/null +++ b/BMW-Dynatrace-config/CD_BMWPoints/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_BMWPoints/conditional-naming-processgroup/README.md b/BMW-Dynatrace-config/CD_BMWPoints/conditional-naming-processgroup/README.md new file mode 100644 index 00000000..f94196a5 --- /dev/null +++ b/BMW-Dynatrace-config/CD_BMWPoints/conditional-naming-processgroup/README.md @@ -0,0 +1,67 @@ +### Process Group Detection Rules and Naming + +#### Detection Rule or Naming? + +For the explanation, we're using a real example of the Infotainment application: + +!(PGNaming1)[../../../../img/PGNaming1.PNG] + +Before working with your dashboards and alerting profiles, an important task to do when working with Dynatrace is checking +the structure of your applications (process groups). You can do that clicking under *technologies* and filter using your +application Management Zone. + +In the picture above, there are two Process Groups called bon-information-prod. **If you see duplicated process groups like in** +**this case, you MUST follow this guideline** + +Next step would be to open both process groups and compare the metadata. In that way, you can identify if all process instances are +part of the same application or not. An easy way to do that is asking yourself: how many instances of my application do i have? + +If you have 4 instances in total and you're able to see 2 in one PG and other 2 in other PG it means that **they are part of the ** +**same application** + +Another situation could be that checking on the metadata, then you see that are **two different application** and Dynatrace is just naming +the process group in the same way + +*Same application* +- Problem: Dynatrace is creating two different process groups, what transalates in two separated services for the same application. Instead of +seeing all the traffic in one service, you will have it splitted and it will complicate your monitoring +- Solution: create a process group detection rule. Contact Dynatrace Expert + +*Different application* +- Problem: Dynatrace is just naming in the same way applications that are different. +- Solution: This case is less severe, since it can be fixed with a process group naming rule. + + +What about our example? +!(PGNaming2)[../../../../img/PGNaming2.PNG] +!(PGNaming3)[../../../../img/PGNaming3.PNG] + +Based on the feedback of the infotaiment team, each process group is a different application (microservice) and it's visible in the kubernetes container/workload +within the metadata of each Process Group. + +#### How to create a Process Group Detection Rule +1. Open the *conditional-naming-processgroup.yaml* file and create a rule that looks like this: +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName} +- tag: Infotainment +- skipDeployment: false +``` +The result of the rule will be renaming the PG to this: +``` +bon-information-prod ipa +bon-information-prod rsl +``` + +Other possible placeholders that you can use are for example: +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName/[^\\-]*$} +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesFullPodName/buffet-(.*?)-} +{ProcessGroup:DetectedName} - {HostGroup:Name/[^\\_]*$} +{ProcessGroup:KubernetesNamespace} +{ProcessGroup:CommandLineArgs/.*?\\-f\\s\\/www\\/(.*?)\\/generated\\/httpd\\.conf.*?} + +You can combine different ones. Check the (documentation)[link] for more \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_BMWPoints/conditional-naming-processgroup/conditional-naming-processgroup.yaml b/BMW-Dynatrace-config/CD_BMWPoints/conditional-naming-processgroup/conditional-naming-processgroup.yaml new file mode 100644 index 00000000..f78f0ab4 --- /dev/null +++ b/BMW-Dynatrace-config/CD_BMWPoints/conditional-naming-processgroup/conditional-naming-processgroup.yaml @@ -0,0 +1,8 @@ +config: +- CDBMWPoints: template.json + +CDBMWPoints: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: BMWPoints +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_BMWPoints/conditional-naming-processgroup/template.json b/BMW-Dynatrace-config/CD_BMWPoints/conditional-naming-processgroup/template.json new file mode 100644 index 00000000..7c039808 --- /dev/null +++ b/BMW-Dynatrace-config/CD_BMWPoints/conditional-naming-processgroup/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "type": "PROCESS_GROUP" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_BMWPoints/conditional-naming-service/README.md b/BMW-Dynatrace-config/CD_BMWPoints/conditional-naming-service/README.md new file mode 100644 index 00000000..c34ef308 --- /dev/null +++ b/BMW-Dynatrace-config/CD_BMWPoints/conditional-naming-service/README.md @@ -0,0 +1,35 @@ +### Service Naming Rules + +A typical case could be that you access to *Transaction & Services* and you find two services that are exactly the same: +*DataDownloadV1* +*DataDownloadV1* + +If you drilldown into the service and you check in the process group, you may have a PROD and a E2E for each service. + +*Note: if you see that both process group are exactly the same, please contact a Dynatrace expert to create a Process* +*Group detection rule* + +In the case the PG are PROD and E2E, then we need to create a rule that looks like this: + +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {Service:DetectedName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +- tag: Infotainment +- skipDeployment: false +``` + +The rule will get the Service Detected Name (current name) and it will extract (with a regex) the part of the kubernetes namespace after the "-", so -prod or -e2e, resulting in: +*DataDownloadV1 - prod* +*DataDownloadV1 - e2e* + +Now, services will be easy to identify. + +You can create rules based on any property/metadata. Some other placeholder's eamples: +{Service:DatabaseName} - E2E +{Service:WebServiceName} - {ProcessGroup:Kubernetes:microservice} - {ProcessGroup:Kubernetes:environment} +{Service:DetectedName} - {ProcessGroup:KubernetesContainerName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +{Service:DetectedName} - {ProcessGroup:SpringBootProfileName/[^\\-]*$} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_BMWPoints/conditional-naming-service/conditional-naming-service.yaml b/BMW-Dynatrace-config/CD_BMWPoints/conditional-naming-service/conditional-naming-service.yaml new file mode 100644 index 00000000..f78f0ab4 --- /dev/null +++ b/BMW-Dynatrace-config/CD_BMWPoints/conditional-naming-service/conditional-naming-service.yaml @@ -0,0 +1,8 @@ +config: +- CDBMWPoints: template.json + +CDBMWPoints: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: BMWPoints +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_BMWPoints/conditional-naming-service/template.json b/BMW-Dynatrace-config/CD_BMWPoints/conditional-naming-service/template.json new file mode 100644 index 00000000..5d4fac56 --- /dev/null +++ b/BMW-Dynatrace-config/CD_BMWPoints/conditional-naming-service/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "type": "SERVICE" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_BMWPoints/custom-service-java/README.md b/BMW-Dynatrace-config/CD_BMWPoints/custom-service-java/README.md new file mode 100644 index 00000000..5f35e5c1 --- /dev/null +++ b/BMW-Dynatrace-config/CD_BMWPoints/custom-service-java/README.md @@ -0,0 +1,4 @@ + +### How to configure custom services? + +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Custom+Services) page to configure your custom services. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_BMWPoints/custom-service-java/custom-service-java.yaml b/BMW-Dynatrace-config/CD_BMWPoints/custom-service-java/custom-service-java.yaml new file mode 100644 index 00000000..25f8a028 --- /dev/null +++ b/BMW-Dynatrace-config/CD_BMWPoints/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_BMWPoints/custom-service-java/template-1-1.json b/BMW-Dynatrace-config/CD_BMWPoints/custom-service-java/template-1-1.json new file mode 100644 index 00000000..b3003515 --- /dev/null +++ b/BMW-Dynatrace-config/CD_BMWPoints/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_BMWPoints/dashboard/README.md b/BMW-Dynatrace-config/CD_BMWPoints/dashboard/README.md new file mode 100644 index 00000000..dffcdc8a --- /dev/null +++ b/BMW-Dynatrace-config/CD_BMWPoints/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_BMWPoints/dashboard/dashboard.yaml b/BMW-Dynatrace-config/CD_BMWPoints/dashboard/dashboard.yaml new file mode 100644 index 00000000..99a0583d --- /dev/null +++ b/BMW-Dynatrace-config/CD_BMWPoints/dashboard/dashboard.yaml @@ -0,0 +1,127 @@ +config: +- CDBMWPoints-PROD: default.json +- CDBMWPoints-E2E: default.json +- CDBMWPoints-INT: default.json +- CDBMWPoints-TEST: default.json + +#PROD dashboards for EMEA/NA/CN Prod +#Dry-run needed for all hubs +CDBMWPoints-PROD: +- name: CD_BMWPoints PROD +- mzName: CD_BMWPoints/management-zone/CDBMWPoints.name +- mzId: CD_BMWPoints/management-zone/CDBMWPoints.id +- env: PROD +- skipDeployment: "true" +#Configuration +CDBMWPoints-PROD.EMEA-Prod: +- name: CD_BMWPoints PROD +- mzName: CD_BMWPoints/management-zone/CDBMWPoints.name +- mzId: CD_BMWPoints/management-zone/CDBMWPoints.id +- tag: BMWPoints +- env: PROD +- skipDeployment: "false" +CDBMWPoints-PROD.NA-Prod: +- name: CD_BMWPoints PROD +- mzName: CD_BMWPoints/management-zone/CDBMWPoints.name +- mzId: CD_BMWPoints/management-zone/CDBMWPoints.id +- tag: BMWPoints +- env: PROD +- skipDeployment: "false" +CDBMWPoints-PROD.CN-Prod: +- name: CD_BMWPoints PROD +- mzName: CD_BMWPoints/management-zone/CDBMWPoints.name +- mzId: CD_BMWPoints/management-zone/CDBMWPoints.id +- tag: BMWPoints +- env: PROD +- skipDeployment: "false" + +#E2E dashboards for EMEA/NA/CN E2E +#Dry-run needed for all hubs +CDBMWPoints-E2E: +- name: CD_BMWPoints E2E +- mzName: CD_BMWPoints/management-zone/CDBMWPoints.name +- mzId: CD_BMWPoints/management-zone/CDBMWPoints.id +- env: E2E +- skipDeployment: "true" +#Configuration +CDBMWPoints-E2E.EMEA-Prod: +- name: CD_BMWPoints E2E +- mzName: CD_BMWPoints/management-zone/CDBMWPoints.name +- mzId: CD_BMWPoints/management-zone/CDBMWPoints.id +- env: E2E +- tag: BMWPoints +- skipDeployment: "true" +CDBMWPoints-E2E.NA-Prod: +- name: CD_BMWPoints E2E +- mzName: CD_BMWPoints/management-zone/CDBMWPoints.name +- mzId: CD_BMWPoints/management-zone/CDBMWPoints.id +- env: E2E +- tag: BMWPoints +- skipDeployment: "true" +CDBMWPoints-E2E.CN-Prod: +- name: CD_BMWPoints E2E +- mzName: CD_BMWPoints/management-zone/CDBMWPoints.name +- mzId: CD_BMWPoints/management-zone/CDBMWPoints.id +- env: E2E +- tag: BMWPoints +- skipDeployment: "true" + +#INT dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDBMWPoints-INT: +- name: CD_BMWPoints INT +- mzName: CD_BMWPoints/management-zone/CDBMWPoints.name +- mzId: CD_BMWPoints/management-zone/CDBMWPoints.id +- env: INT +- tag: BMWPoints +- skipDeployment: "true" +#Configuration +CDBMWPoints-INT.EMEA-PreProd: +- name: CD_BMWPoints INT +- mzName: CD_BMWPoints/management-zone/CDBMWPoints.name +- mzId: CD_BMWPoints/management-zone/CDBMWPoints.id +- env: INT +- tag: BMWPoints +- skipDeployment: "false" +CDBMWPoints-INT.NA-PreProd: +- name: CD_BMWPoints INT +- mzName: CD_BMWPoints/management-zone/CDBMWPoints.name +- mzId: CD_BMWPoints/management-zone/CDBMWPoints.id +- env: INT +- skipDeployment: "false" +CDBMWPoints-INT.CN-PreProd: +- name: CD_BMWPoints INT +- mzName: CD_BMWPoints/management-zone/CDBMWPoints.name +- mzId: CD_BMWPoints/management-zone/CDBMWPoints.id +- env: INT +- skipDeployment: "false" + +#TEST dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDBMWPoints-TEST: +- name: CD_BMWPoints TEST +- mzName: CD_BMWPoints/management-zone/CDBMWPoints.name +- mzId: CD_BMWPoints/management-zone/CDBMWPoints.id +- tag: BMWPoints +- env: TEST +- skipDeployment: "true" +#Configuration +CDBMWPoints-TEST.EMEA-PreProd: +- name: CD_BMWPoints TEST +- mzName: CD_BMWPoints/management-zone/CDBMWPoints.name +- mzId: CD_BMWPoints/management-zone/CDBMWPoints.id +- tag: BMWPoints +- env: TEST +- skipDeployment: "false" +CDBMWPoints-TEST.NA-PreProd: +- name: CD_BMWPoints TEST +- mzName: CD_BMWPoints/management-zone/CDBMWPoints.name +- mzId: CD_BMWPoints/management-zone/CDBMWPoints.id +- env: TEST +- skipDeployment: "false" +CDBMWPoints-TEST.CN-PreProd: +- name: CD_BMWPoints TEST +- mzName: CD_BMWPoints/management-zone/CDBMWPoints.name +- mzId: CD_BMWPoints/management-zone/CDBMWPoints.id +- env: TEST +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_BMWPoints/dashboard/default.json b/BMW-Dynatrace-config/CD_BMWPoints/dashboard/default.json new file mode 100644 index 00000000..6c685810 --- /dev/null +++ b/BMW-Dynatrace-config/CD_BMWPoints/dashboard/default.json @@ -0,0 +1,308 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.214.107.20210407-223952" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": true, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "timeframe": "-24h to now" + }, + "tags": [ + "{{.tag}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 228, + "left": 38, + "width": 1064, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Failure rate (HTTP 4xx/5xx errors)", + "defaultName": "Custom chart", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [ + { + "metric": "builtin:service.errors.fourxx.rate", + "aggregation": "AVG", + "type": "BAR", + "entityType": "SERVICE", + "dimensions": [], + "sortAscending": false, + "sortColumn": false, + "aggregationRate": "TOTAL" + }, + { + "metric": "builtin:service.errors.fivexx.rate", + "aggregation": "AVG", + "type": "BAR", + "entityType": "SERVICE", + "dimensions": [], + "sortAscending": false, + "sortColumn": true, + "aggregationRate": "TOTAL" + } + ], + "resultMetadata": { + "nullbuiltin:service.errors.fivexx.rate|AVG|TOTAL|BAR|SERVICE": { + "lastModified": 1617956393463, + "customColor": "#ff0000" + }, + "nullbuiltin:service.errors.fourxx.rate|AVG|TOTAL|BAR|SERVICE": { + "lastModified": 1617956441725, + "customColor": "#fff29a" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:{{.env}}", + "Component:{{.tag}}" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 38, + "left": 950, + "width": 152, + "height": 152 + }, + "tileFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + } + }, + { + "name": "Overall Health", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 0, + "left": 38, + "width": 1064, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 532, + "left": 38, + "width": 1064, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 570, + "left": 38, + "width": 1064, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Request Count and Number of Errors", + "defaultName": "Custom chart", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [ + { + "metric": "builtin:service.response.time", + "aggregation": "AVG", + "type": "LINE", + "entityType": "SERVICE", + "dimensions": [], + "sortAscending": false, + "sortColumn": false, + "aggregationRate": "TOTAL" + }, + { + "metric": "builtin:service.requestCount.total", + "aggregation": "NONE", + "type": "BAR", + "entityType": "SERVICE", + "dimensions": [], + "sortAscending": false, + "sortColumn": false, + "aggregationRate": "TOTAL" + }, + { + "metric": "builtin:service.errors.total.count", + "aggregation": "NONE", + "type": "BAR", + "entityType": "SERVICE", + "dimensions": [], + "sortAscending": false, + "sortColumn": true, + "aggregationRate": "TOTAL" + } + ], + "resultMetadata": { + "nullbuiltin:service.requestCount.total|NONE|TOTAL|BAR|SERVICE": { + "lastModified": 1595275720776, + "customColor": "#008cdb" + }, + "nullbuiltin:service.errors.total.count|NONE|TOTAL|BAR|SERVICE": { + "lastModified": 1595275955999, + "customColor": "#ef651f" + }, + "nullbuiltin:service.response.time|AVG|TOTAL|LINE|SERVICE": { + "lastModified": 1595275686773, + "customColor": "#b4e5f9" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:{{.env}}", + "Component:{{.tag}}" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 190, + "left": 38, + "width": 1064, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 38, + "left": 646, + "width": 190, + "height": 152 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:{{.env}}", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 38, + "left": 342, + "width": 190, + "height": 152 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:{{.env}}", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 190, + "height": 152 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:{{.env}}", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_BMWPoints/management-zone/CDBMWPoints.json b/BMW-Dynatrace-config/CD_BMWPoints/management-zone/CDBMWPoints.json deleted file mode 100644 index 8c0ffb4c..00000000 --- a/BMW-Dynatrace-config/CD_BMWPoints/management-zone/CDBMWPoints.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "dimensionalRules": [], - "metadata": { - "clusterVersion": "1.209.98.20210122-102634", - "configurationVersions": [ - 0 - ] - }, - "name": "{{.name}}", - "rules": [ - { - "conditions": [ - { - "comparisonInfo": { - "caseSensitive": true, - "negate": false, - "operator": "BEGINS_WITH", - "type": "STRING", - "value": "empty" - }, - "key": { - "attribute": "SERVICE_AKKA_ACTOR_SYSTEM" - } - } - ], - "enabled": true, - "propagationTypes": [], - "type": "SERVICE" - } - ] -} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_BMWPoints/management-zone/README.md b/BMW-Dynatrace-config/CD_BMWPoints/management-zone/README.md new file mode 100644 index 00000000..3244b3e6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_BMWPoints/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/management-zone/CDLSC-FSU.json b/BMW-Dynatrace-config/CD_BMWPoints/management-zone/default.json similarity index 63% rename from BMW-Dynatrace-config/CD_LSC/management-zone/CDLSC-FSU.json rename to BMW-Dynatrace-config/CD_BMWPoints/management-zone/default.json index b2a9367b..bffa0c3b 100644 --- a/BMW-Dynatrace-config/CD_LSC/management-zone/CDLSC-FSU.json +++ b/BMW-Dynatrace-config/CD_BMWPoints/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,65 @@ "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" + }, + { + "conditions": [ + { + "comparisonInfo": { + "caseSensitive": true, + "negate": false, + "operator": "CONTAINS", + "type": "STRING", + "value": "{{.tag}}" + }, + "key": { + "attribute": "CLOUD_APPLICATION_NAMESPACE_NAME" + } + } + ], + "enabled": true, + "propagationTypes": [], + "type": "CLOUD_APPLICATION_NAMESPACE" + }, + { + "conditions": [ + { + "comparisonInfo": { + "caseSensitive": true, + "negate": false, + "operator": "CONTAINS", + "type": "STRING", + "value": "{{.tag}}" + }, + "key": { + "attribute": "CLOUD_APPLICATION_NAME" + } + } + ], + "enabled": true, + "propagationTypes": [], + "type": "CLOUD_APPLICATION" } ] } \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_BMWPoints/management-zone/management-zone.yaml b/BMW-Dynatrace-config/CD_BMWPoints/management-zone/management-zone.yaml index 4c222660..53cc82e3 100644 --- a/BMW-Dynatrace-config/CD_BMWPoints/management-zone/management-zone.yaml +++ b/BMW-Dynatrace-config/CD_BMWPoints/management-zone/management-zone.yaml @@ -1,5 +1,6 @@ config: -- CDBMWPoints: CDBMWPoints.json +- CDBMWPoints: default.json CDBMWPoints: - name: CD_BMWPoints +- tag: BMWPoints diff --git a/BMW-Dynatrace-config/CD_BMWPoints/notification/README.md b/BMW-Dynatrace-config/CD_BMWPoints/notification/README.md new file mode 100644 index 00000000..e1a6af84 --- /dev/null +++ b/BMW-Dynatrace-config/CD_BMWPoints/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_BMWPoints/notification/email.json b/BMW-Dynatrace-config/CD_BMWPoints/notification/email.json new file mode 100644 index 00000000..486642a7 --- /dev/null +++ b/BMW-Dynatrace-config/CD_BMWPoints/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_Speech/notification/CDSpeech-MSTeams.json b/BMW-Dynatrace-config/CD_BMWPoints/notification/msTeams.json similarity index 50% rename from BMW-Dynatrace-config/CD_Speech/notification/CDSpeech-MSTeams.json rename to BMW-Dynatrace-config/CD_BMWPoints/notification/msTeams.json index a2340c17..33e92cf6 100644 --- a/BMW-Dynatrace-config/CD_Speech/notification/CDSpeech-MSTeams.json +++ b/BMW-Dynatrace-config/CD_BMWPoints/notification/msTeams.json @@ -1,11 +1,11 @@ { "acceptAnyCertificate": false, "active": true, - "alertingProfile": "{{.apid}}", + "alertingProfile": "{{.alertingProfile}}", "headers": [], "name": "{{.name}}", "notifyEventMergesEnabled": false, "payload": "{\n\"title\":\"{ProblemTitle}\",\n\"text\":\"{ProblemDetailsHTML}\",\n\"themeColor\":\"EA4300\"\n}", "type": "WEBHOOK", - "url": "https://bmwgroup.webhook.office.com/webhookb2/9929d783-6cb1-4ffd-9898-7a2791bb13df@ce849bab-cc1c-465b-b62e-18f07c9ac198/IncomingWebhook/e1adb221aa514b7dabd458f86eecc63d/75ab85c6-38f4-47df-9871-8b4c46852181" + "url": "{{.webhook}}" } \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_BMWPoints/notification/notification.yaml b/BMW-Dynatrace-config/CD_BMWPoints/notification/notification.yaml new file mode 100644 index 00000000..d999a719 --- /dev/null +++ b/BMW-Dynatrace-config/CD_BMWPoints/notification/notification.yaml @@ -0,0 +1,51 @@ +config: +- CDBMWPoints-PROD: msTeams.json +- CDBMWPoints-INT: msTeams.json + +#Prod notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDBMWPoints-PROD: +- name: CD_BMWPoints PROD +- alertingProfile: CD_BMWPoints/alerting-profile/CDBMWPoints-PROD.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDBMWPoints-PROD.EMEA-Prod: +- name: CD_BMWPoints PROD +- alertingProfile: CD_BMWPoints/alerting-profile/CDBMWPoints-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDBMWPoints-PROD.NA-Prod: +- name: CD_BMWPoints PROD +- alertingProfile: CD_BMWPoints/alerting-profile/CDBMWPoints-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDBMWPoints-PROD.CN-Prod: +- name: CD_BMWPoints PROD +- alertingProfile: CD_BMWPoints/alerting-profile/CDBMWPoints-PROD.id +- webhook: https://empty +- skipDeployment: "false" + +#INT notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDBMWPoints-INT: +- name: CD_BMWPoints INT +- alertingProfile: CD_BMWPoints/alerting-profile/CDBMWPoints-INT.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDBMWPoints-INT.EMEA-PreProd: +- name: CD_BMWPoints INT +- alertingProfile: CD_BMWPoints/alerting-profile/CDBMWPoints-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDBMWPoints-INT.NA-PreProd: +- name: CD_BMWPoints INT +- alertingProfile: CD_BMWPoints/alerting-profile/CDBMWPoints-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDBMWPoints-INT.CN-PreProd: +- name: CD_BMWPoints INT +- alertingProfile: CD_BMWPoints/alerting-profile/CDBMWPoints-INT.id +- webhook: https://empty +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_BMWPoints/synthetic-monitor/README.md b/BMW-Dynatrace-config/CD_BMWPoints/synthetic-monitor/README.md new file mode 100644 index 00000000..1695924c --- /dev/null +++ b/BMW-Dynatrace-config/CD_BMWPoints/synthetic-monitor/README.md @@ -0,0 +1,4 @@ + +### How to configure synthetics? + +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Synthetic+Monitors) page to configure your synthetics. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_BMWPoints/synthetic-monitor/default.json b/BMW-Dynatrace-config/CD_BMWPoints/synthetic-monitor/default.json new file mode 100644 index 00000000..cf83039b --- /dev/null +++ b/BMW-Dynatrace-config/CD_BMWPoints/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_BMWPoints/synthetic-monitor/synthetic-monitor.yaml b/BMW-Dynatrace-config/CD_BMWPoints/synthetic-monitor/synthetic-monitor.yaml new file mode 100644 index 00000000..73e8a8c5 --- /dev/null +++ b/BMW-Dynatrace-config/CD_BMWPoints/synthetic-monitor/synthetic-monitor.yaml @@ -0,0 +1,10 @@ +config: +- BMWPoints: default.json + +BMWPoints: +- name: CD_BMWPoints - +- mzName: CD_BMWPoints/management-zone/CDBMWPoints.name +- mzId: CD_BMWPoints/management-zone/CDBMWPoints.id +- endpoint: +- location: +- skipDeployment: "true" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_Billing_Buffet/alerting-profile/Buffet.json b/BMW-Dynatrace-config/CD_Billing_Buffet/alerting-profile/Buffet.json deleted file mode 100644 index ed911afd..00000000 --- a/BMW-Dynatrace-config/CD_Billing_Buffet/alerting-profile/Buffet.json +++ /dev/null @@ -1,183 +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}}" - } - ] - } - } - ] -}{ - "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_Billing_Buffet/alerting-profile/alerting-profile.yaml b/BMW-Dynatrace-config/CD_Billing_Buffet/alerting-profile/alerting-profile.yaml index e3180775..1747e35b 100644 --- a/BMW-Dynatrace-config/CD_Billing_Buffet/alerting-profile/alerting-profile.yaml +++ b/BMW-Dynatrace-config/CD_Billing_Buffet/alerting-profile/alerting-profile.yaml @@ -1,6 +1,60 @@ -CDBuffet: -- name: CD_Billing_Buffet/management-zone/CDBuffet.name -- tag: Buffet -- mzId: CD_Billing_Buffet/management-zone/CDBuffet.id config: -- CDBuffet: Buffet.json +- CDBilling_Buffet-PROD: default.json +- CDBilling_Buffet-INT: default.json + +#Prod alerting profiles for EMEA/NA/CN +#Dry-run needed for all hubs +CDBilling_Buffet-PROD: +- name: CD_Billing_Buffet PROD +- tag: Billing_Buffet +- mzId: CD_Billing_Buffet/management-zone/CDBilling_Buffet.id +- env: PROD +- skipDeployment: "true" +#Configuration +CDBilling_Buffet-PROD.EMEA-Prod: +- name: CD_Billing_Buffet PROD +- tag: Billing_Buffet +- mzId: CD_Billing_Buffet/management-zone/CDBilling_Buffet.id +- env: PROD +- skipDeployment: "false" +CDBilling_Buffet-PROD.NA-Prod: +- name: CD_Billing_Buffet PROD +- tag: Billing_Buffet +- mzId: CD_Billing_Buffet/management-zone/CDBilling_Buffet.id +- env: PROD +- skipDeployment: "false" +CDBilling_Buffet-PROD.CN-Prod: +- name: CD_Billing_Buffet PROD +- tag: Billing_Buffet +- mzId: CD_Billing_Buffet/management-zone/CDBilling_Buffet.id +- env: PROD +- skipDeployment: "false" + + +#INT alerting profiles for EMEA/NA/CN +#Dry-run needed for all hubs +CDBilling_Buffet-INT: +- name: CD_Billing_Buffet INT +- tag: Billing_Buffet +- mzId: CD_Billing_Buffet/management-zone/CDBilling_Buffet.id +- env: INT +- skipDeployment: "true" +#Configuration +CDBilling_Buffet-INT.EMEA-PreProd: +- name: CD_Billing_Buffet INT +- tag: Billing_Buffet +- mzId: CD_Billing_Buffet/management-zone/CDBilling_Buffet.id +- env: INT +- skipDeployment: "false" +CDBilling_Buffet-INT.NA-PreProd: +- name: CD_Billing_Buffet INT +- tag: Billing_Buffet +- mzId: CD_Billing_Buffet/management-zone/CDBilling_Buffet.id +- env: INT +- skipDeployment: "false" +CDBilling_Buffet-INT.CN-PreProd: +- name: CD_Billing_Buffet INT +- tag: Billing_Buffet +- mzId: CD_Billing_Buffet/management-zone/CDBilling_Buffet.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_Billing_Buffet/alerting-profile/default.json b/BMW-Dynatrace-config/CD_Billing_Buffet/alerting-profile/default.json new file mode 100644 index 00000000..681a4c64 --- /dev/null +++ b/BMW-Dynatrace-config/CD_Billing_Buffet/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_Billing_Buffet/calculated-metrics-service/README.md b/BMW-Dynatrace-config/CD_Billing_Buffet/calculated-metrics-service/README.md new file mode 100644 index 00000000..0bf8efbc --- /dev/null +++ b/BMW-Dynatrace-config/CD_Billing_Buffet/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_Billing_Buffet/conditional-naming-processgroup/README.md b/BMW-Dynatrace-config/CD_Billing_Buffet/conditional-naming-processgroup/README.md new file mode 100644 index 00000000..f94196a5 --- /dev/null +++ b/BMW-Dynatrace-config/CD_Billing_Buffet/conditional-naming-processgroup/README.md @@ -0,0 +1,67 @@ +### Process Group Detection Rules and Naming + +#### Detection Rule or Naming? + +For the explanation, we're using a real example of the Infotainment application: + +!(PGNaming1)[../../../../img/PGNaming1.PNG] + +Before working with your dashboards and alerting profiles, an important task to do when working with Dynatrace is checking +the structure of your applications (process groups). You can do that clicking under *technologies* and filter using your +application Management Zone. + +In the picture above, there are two Process Groups called bon-information-prod. **If you see duplicated process groups like in** +**this case, you MUST follow this guideline** + +Next step would be to open both process groups and compare the metadata. In that way, you can identify if all process instances are +part of the same application or not. An easy way to do that is asking yourself: how many instances of my application do i have? + +If you have 4 instances in total and you're able to see 2 in one PG and other 2 in other PG it means that **they are part of the ** +**same application** + +Another situation could be that checking on the metadata, then you see that are **two different application** and Dynatrace is just naming +the process group in the same way + +*Same application* +- Problem: Dynatrace is creating two different process groups, what transalates in two separated services for the same application. Instead of +seeing all the traffic in one service, you will have it splitted and it will complicate your monitoring +- Solution: create a process group detection rule. Contact Dynatrace Expert + +*Different application* +- Problem: Dynatrace is just naming in the same way applications that are different. +- Solution: This case is less severe, since it can be fixed with a process group naming rule. + + +What about our example? +!(PGNaming2)[../../../../img/PGNaming2.PNG] +!(PGNaming3)[../../../../img/PGNaming3.PNG] + +Based on the feedback of the infotaiment team, each process group is a different application (microservice) and it's visible in the kubernetes container/workload +within the metadata of each Process Group. + +#### How to create a Process Group Detection Rule +1. Open the *conditional-naming-processgroup.yaml* file and create a rule that looks like this: +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName} +- tag: Infotainment +- skipDeployment: false +``` +The result of the rule will be renaming the PG to this: +``` +bon-information-prod ipa +bon-information-prod rsl +``` + +Other possible placeholders that you can use are for example: +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName/[^\\-]*$} +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesFullPodName/buffet-(.*?)-} +{ProcessGroup:DetectedName} - {HostGroup:Name/[^\\_]*$} +{ProcessGroup:KubernetesNamespace} +{ProcessGroup:CommandLineArgs/.*?\\-f\\s\\/www\\/(.*?)\\/generated\\/httpd\\.conf.*?} + +You can combine different ones. Check the (documentation)[link] for more \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_Billing_Buffet/conditional-naming-processgroup/conditional-naming-processgroup.yaml b/BMW-Dynatrace-config/CD_Billing_Buffet/conditional-naming-processgroup/conditional-naming-processgroup.yaml new file mode 100644 index 00000000..3c23865b --- /dev/null +++ b/BMW-Dynatrace-config/CD_Billing_Buffet/conditional-naming-processgroup/conditional-naming-processgroup.yaml @@ -0,0 +1,8 @@ +config: +- CDBilling_Buffet: template.json + +CDBilling_Buffet: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: Billing_Buffet +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_Billing_Buffet/conditional-naming-processgroup/template.json b/BMW-Dynatrace-config/CD_Billing_Buffet/conditional-naming-processgroup/template.json new file mode 100644 index 00000000..7c039808 --- /dev/null +++ b/BMW-Dynatrace-config/CD_Billing_Buffet/conditional-naming-processgroup/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "type": "PROCESS_GROUP" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_Billing_Buffet/conditional-naming-service/README.md b/BMW-Dynatrace-config/CD_Billing_Buffet/conditional-naming-service/README.md new file mode 100644 index 00000000..c34ef308 --- /dev/null +++ b/BMW-Dynatrace-config/CD_Billing_Buffet/conditional-naming-service/README.md @@ -0,0 +1,35 @@ +### Service Naming Rules + +A typical case could be that you access to *Transaction & Services* and you find two services that are exactly the same: +*DataDownloadV1* +*DataDownloadV1* + +If you drilldown into the service and you check in the process group, you may have a PROD and a E2E for each service. + +*Note: if you see that both process group are exactly the same, please contact a Dynatrace expert to create a Process* +*Group detection rule* + +In the case the PG are PROD and E2E, then we need to create a rule that looks like this: + +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {Service:DetectedName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +- tag: Infotainment +- skipDeployment: false +``` + +The rule will get the Service Detected Name (current name) and it will extract (with a regex) the part of the kubernetes namespace after the "-", so -prod or -e2e, resulting in: +*DataDownloadV1 - prod* +*DataDownloadV1 - e2e* + +Now, services will be easy to identify. + +You can create rules based on any property/metadata. Some other placeholder's eamples: +{Service:DatabaseName} - E2E +{Service:WebServiceName} - {ProcessGroup:Kubernetes:microservice} - {ProcessGroup:Kubernetes:environment} +{Service:DetectedName} - {ProcessGroup:KubernetesContainerName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +{Service:DetectedName} - {ProcessGroup:SpringBootProfileName/[^\\-]*$} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_Billing_Buffet/conditional-naming-service/conditional-naming-service.yaml b/BMW-Dynatrace-config/CD_Billing_Buffet/conditional-naming-service/conditional-naming-service.yaml new file mode 100644 index 00000000..3c23865b --- /dev/null +++ b/BMW-Dynatrace-config/CD_Billing_Buffet/conditional-naming-service/conditional-naming-service.yaml @@ -0,0 +1,8 @@ +config: +- CDBilling_Buffet: template.json + +CDBilling_Buffet: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: Billing_Buffet +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_Billing_Buffet/conditional-naming-service/template.json b/BMW-Dynatrace-config/CD_Billing_Buffet/conditional-naming-service/template.json new file mode 100644 index 00000000..5d4fac56 --- /dev/null +++ b/BMW-Dynatrace-config/CD_Billing_Buffet/conditional-naming-service/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "type": "SERVICE" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_Billing_Buffet/custom-service-java/README.md b/BMW-Dynatrace-config/CD_Billing_Buffet/custom-service-java/README.md new file mode 100644 index 00000000..5f35e5c1 --- /dev/null +++ b/BMW-Dynatrace-config/CD_Billing_Buffet/custom-service-java/README.md @@ -0,0 +1,4 @@ + +### How to configure custom services? + +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Custom+Services) page to configure your custom services. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_Billing_Buffet/custom-service-java/custom-service-java.yaml b/BMW-Dynatrace-config/CD_Billing_Buffet/custom-service-java/custom-service-java.yaml new file mode 100644 index 00000000..25f8a028 --- /dev/null +++ b/BMW-Dynatrace-config/CD_Billing_Buffet/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_Billing_Buffet/custom-service-java/template-1-1.json b/BMW-Dynatrace-config/CD_Billing_Buffet/custom-service-java/template-1-1.json new file mode 100644 index 00000000..b3003515 --- /dev/null +++ b/BMW-Dynatrace-config/CD_Billing_Buffet/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_Billing_Buffet/dashboard/README.md b/BMW-Dynatrace-config/CD_Billing_Buffet/dashboard/README.md new file mode 100644 index 00000000..dffcdc8a --- /dev/null +++ b/BMW-Dynatrace-config/CD_Billing_Buffet/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_Billing_Buffet/dashboard/dashboard.yaml b/BMW-Dynatrace-config/CD_Billing_Buffet/dashboard/dashboard.yaml new file mode 100644 index 00000000..e7d5ef5c --- /dev/null +++ b/BMW-Dynatrace-config/CD_Billing_Buffet/dashboard/dashboard.yaml @@ -0,0 +1,127 @@ +config: +- CDBilling_Buffet-PROD: default.json +- CDBilling_Buffet-E2E: default.json +- CDBilling_Buffet-INT: default.json +- CDBilling_Buffet-TEST: default.json + +#PROD dashboards for EMEA/NA/CN Prod +#Dry-run needed for all hubs +CDBilling_Buffet-PROD: +- name: CD_Billing_Buffet PROD +- mzName: CD_Billing_Buffet/management-zone/CDBilling_Buffet.name +- mzId: CD_Billing_Buffet/management-zone/CDBilling_Buffet.id +- env: PROD +- skipDeployment: "true" +#Configuration +CDBilling_Buffet-PROD.EMEA-Prod: +- name: CD_Billing_Buffet PROD +- mzName: CD_Billing_Buffet/management-zone/CDBilling_Buffet.name +- mzId: CD_Billing_Buffet/management-zone/CDBilling_Buffet.id +- tag: Billing_Buffet +- env: PROD +- skipDeployment: "false" +CDBilling_Buffet-PROD.NA-Prod: +- name: CD_Billing_Buffet PROD +- mzName: CD_Billing_Buffet/management-zone/CDBilling_Buffet.name +- mzId: CD_Billing_Buffet/management-zone/CDBilling_Buffet.id +- tag: Billing_Buffet +- env: PROD +- skipDeployment: "false" +CDBilling_Buffet-PROD.CN-Prod: +- name: CD_Billing_Buffet PROD +- mzName: CD_Billing_Buffet/management-zone/CDBilling_Buffet.name +- mzId: CD_Billing_Buffet/management-zone/CDBilling_Buffet.id +- tag: Billing_Buffet +- env: PROD +- skipDeployment: "false" + +#E2E dashboards for EMEA/NA/CN E2E +#Dry-run needed for all hubs +CDBilling_Buffet-E2E: +- name: CD_Billing_Buffet E2E +- mzName: CD_Billing_Buffet/management-zone/CDBilling_Buffet.name +- mzId: CD_Billing_Buffet/management-zone/CDBilling_Buffet.id +- env: E2E +- skipDeployment: "true" +#Configuration +CDBilling_Buffet-E2E.EMEA-Prod: +- name: CD_Billing_Buffet E2E +- mzName: CD_Billing_Buffet/management-zone/CDBilling_Buffet.name +- mzId: CD_Billing_Buffet/management-zone/CDBilling_Buffet.id +- env: E2E +- tag: Billing_Buffet +- skipDeployment: "true" +CDBilling_Buffet-E2E.NA-Prod: +- name: CD_Billing_Buffet E2E +- mzName: CD_Billing_Buffet/management-zone/CDBilling_Buffet.name +- mzId: CD_Billing_Buffet/management-zone/CDBilling_Buffet.id +- env: E2E +- tag: Billing_Buffet +- skipDeployment: "true" +CDBilling_Buffet-E2E.CN-Prod: +- name: CD_Billing_Buffet E2E +- mzName: CD_Billing_Buffet/management-zone/CDBilling_Buffet.name +- mzId: CD_Billing_Buffet/management-zone/CDBilling_Buffet.id +- env: E2E +- tag: Billing_Buffet +- skipDeployment: "true" + +#INT dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDBilling_Buffet-INT: +- name: CD_Billing_Buffet INT +- mzName: CD_Billing_Buffet/management-zone/CDBilling_Buffet.name +- mzId: CD_Billing_Buffet/management-zone/CDBilling_Buffet.id +- env: INT +- tag: Billing_Buffet +- skipDeployment: "true" +#Configuration +CDBilling_Buffet-INT.EMEA-PreProd: +- name: CD_Billing_Buffet INT +- mzName: CD_Billing_Buffet/management-zone/CDBilling_Buffet.name +- mzId: CD_Billing_Buffet/management-zone/CDBilling_Buffet.id +- env: INT +- tag: Billing_Buffet +- skipDeployment: "false" +CDBilling_Buffet-INT.NA-PreProd: +- name: CD_Billing_Buffet INT +- mzName: CD_Billing_Buffet/management-zone/CDBilling_Buffet.name +- mzId: CD_Billing_Buffet/management-zone/CDBilling_Buffet.id +- env: INT +- skipDeployment: "false" +CDBilling_Buffet-INT.CN-PreProd: +- name: CD_Billing_Buffet INT +- mzName: CD_Billing_Buffet/management-zone/CDBilling_Buffet.name +- mzId: CD_Billing_Buffet/management-zone/CDBilling_Buffet.id +- env: INT +- skipDeployment: "false" + +#TEST dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDBilling_Buffet-TEST: +- name: CD_Billing_Buffet TEST +- mzName: CD_Billing_Buffet/management-zone/CDBilling_Buffet.name +- mzId: CD_Billing_Buffet/management-zone/CDBilling_Buffet.id +- tag: Billing_Buffet +- env: TEST +- skipDeployment: "true" +#Configuration +CDBilling_Buffet-TEST.EMEA-PreProd: +- name: CD_Billing_Buffet TEST +- mzName: CD_Billing_Buffet/management-zone/CDBilling_Buffet.name +- mzId: CD_Billing_Buffet/management-zone/CDBilling_Buffet.id +- tag: Billing_Buffet +- env: TEST +- skipDeployment: "false" +CDBilling_Buffet-TEST.NA-PreProd: +- name: CD_Billing_Buffet TEST +- mzName: CD_Billing_Buffet/management-zone/CDBilling_Buffet.name +- mzId: CD_Billing_Buffet/management-zone/CDBilling_Buffet.id +- env: TEST +- skipDeployment: "false" +CDBilling_Buffet-TEST.CN-PreProd: +- name: CD_Billing_Buffet TEST +- mzName: CD_Billing_Buffet/management-zone/CDBilling_Buffet.name +- mzId: CD_Billing_Buffet/management-zone/CDBilling_Buffet.id +- env: TEST +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_Billing_Buffet/dashboard/default.json b/BMW-Dynatrace-config/CD_Billing_Buffet/dashboard/default.json new file mode 100644 index 00000000..6c685810 --- /dev/null +++ b/BMW-Dynatrace-config/CD_Billing_Buffet/dashboard/default.json @@ -0,0 +1,308 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.214.107.20210407-223952" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": true, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "timeframe": "-24h to now" + }, + "tags": [ + "{{.tag}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 228, + "left": 38, + "width": 1064, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Failure rate (HTTP 4xx/5xx errors)", + "defaultName": "Custom chart", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [ + { + "metric": "builtin:service.errors.fourxx.rate", + "aggregation": "AVG", + "type": "BAR", + "entityType": "SERVICE", + "dimensions": [], + "sortAscending": false, + "sortColumn": false, + "aggregationRate": "TOTAL" + }, + { + "metric": "builtin:service.errors.fivexx.rate", + "aggregation": "AVG", + "type": "BAR", + "entityType": "SERVICE", + "dimensions": [], + "sortAscending": false, + "sortColumn": true, + "aggregationRate": "TOTAL" + } + ], + "resultMetadata": { + "nullbuiltin:service.errors.fivexx.rate|AVG|TOTAL|BAR|SERVICE": { + "lastModified": 1617956393463, + "customColor": "#ff0000" + }, + "nullbuiltin:service.errors.fourxx.rate|AVG|TOTAL|BAR|SERVICE": { + "lastModified": 1617956441725, + "customColor": "#fff29a" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:{{.env}}", + "Component:{{.tag}}" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 38, + "left": 950, + "width": 152, + "height": 152 + }, + "tileFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + } + }, + { + "name": "Overall Health", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 0, + "left": 38, + "width": 1064, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 532, + "left": 38, + "width": 1064, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 570, + "left": 38, + "width": 1064, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Request Count and Number of Errors", + "defaultName": "Custom chart", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [ + { + "metric": "builtin:service.response.time", + "aggregation": "AVG", + "type": "LINE", + "entityType": "SERVICE", + "dimensions": [], + "sortAscending": false, + "sortColumn": false, + "aggregationRate": "TOTAL" + }, + { + "metric": "builtin:service.requestCount.total", + "aggregation": "NONE", + "type": "BAR", + "entityType": "SERVICE", + "dimensions": [], + "sortAscending": false, + "sortColumn": false, + "aggregationRate": "TOTAL" + }, + { + "metric": "builtin:service.errors.total.count", + "aggregation": "NONE", + "type": "BAR", + "entityType": "SERVICE", + "dimensions": [], + "sortAscending": false, + "sortColumn": true, + "aggregationRate": "TOTAL" + } + ], + "resultMetadata": { + "nullbuiltin:service.requestCount.total|NONE|TOTAL|BAR|SERVICE": { + "lastModified": 1595275720776, + "customColor": "#008cdb" + }, + "nullbuiltin:service.errors.total.count|NONE|TOTAL|BAR|SERVICE": { + "lastModified": 1595275955999, + "customColor": "#ef651f" + }, + "nullbuiltin:service.response.time|AVG|TOTAL|LINE|SERVICE": { + "lastModified": 1595275686773, + "customColor": "#b4e5f9" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:{{.env}}", + "Component:{{.tag}}" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 190, + "left": 38, + "width": 1064, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 38, + "left": 646, + "width": 190, + "height": 152 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:{{.env}}", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 38, + "left": 342, + "width": 190, + "height": 152 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:{{.env}}", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 190, + "height": 152 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:{{.env}}", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_Billing_Buffet/management-zone/README.md b/BMW-Dynatrace-config/CD_Billing_Buffet/management-zone/README.md new file mode 100644 index 00000000..3244b3e6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_Billing_Buffet/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_Perseus/management-zone/CDPerseus.json b/BMW-Dynatrace-config/CD_Billing_Buffet/management-zone/default.json similarity index 63% rename from BMW-Dynatrace-config/CD_Perseus/management-zone/CDPerseus.json rename to BMW-Dynatrace-config/CD_Billing_Buffet/management-zone/default.json index ecdb80fc..bffa0c3b 100644 --- a/BMW-Dynatrace-config/CD_Perseus/management-zone/CDPerseus.json +++ b/BMW-Dynatrace-config/CD_Billing_Buffet/management-zone/default.json @@ -18,54 +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" - } - }, - { - "key": { - "attribute": "PROCESS_GROUP_NAME" - }, - "comparisonInfo": { - "type": "STRING", - "operator": "CONTAINS", - "value": "clusterDomain", - "negate": true, - "caseSensitive": true - } } ], "enabled": true, @@ -98,6 +50,65 @@ "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" + }, + { + "conditions": [ + { + "comparisonInfo": { + "caseSensitive": true, + "negate": false, + "operator": "CONTAINS", + "type": "STRING", + "value": "{{.tag}}" + }, + "key": { + "attribute": "CLOUD_APPLICATION_NAMESPACE_NAME" + } + } + ], + "enabled": true, + "propagationTypes": [], + "type": "CLOUD_APPLICATION_NAMESPACE" + }, + { + "conditions": [ + { + "comparisonInfo": { + "caseSensitive": true, + "negate": false, + "operator": "CONTAINS", + "type": "STRING", + "value": "{{.tag}}" + }, + "key": { + "attribute": "CLOUD_APPLICATION_NAME" + } + } + ], + "enabled": true, + "propagationTypes": [], + "type": "CLOUD_APPLICATION" } ] } \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_Billing_Buffet/management-zone/management-zone.yaml b/BMW-Dynatrace-config/CD_Billing_Buffet/management-zone/management-zone.yaml index b6265209..4fbbdf95 100644 --- a/BMW-Dynatrace-config/CD_Billing_Buffet/management-zone/management-zone.yaml +++ b/BMW-Dynatrace-config/CD_Billing_Buffet/management-zone/management-zone.yaml @@ -1,20 +1,6 @@ -CDBuffet.CN-PreProd: -- name: CD_Billing_Buffet -- tag: Buffet -CDBuffet.CN-Prod: -- name: CD_Billing_Buffet -- tag: Buffet -CDBuffet.EMEA-PreProd: -- name: CD_Billing_Buffet -- tag: Buffet -CDBuffet.EMEA-Prod: -- name: CD_Billing_Buffet -- tag: Buffet -CDBuffet.NA-PreProd: -- name: CD_Billing_Buffet -- tag: Buffet -CDBuffet.NA-Prod: -- name: CD_Billing_Buffet -- tag: Buffet config: -- CDBuffet: CDBuffet.json +- CDBilling_Buffet: default.json + +CDBilling_Buffet: +- name: CD_Billing_Buffet +- tag: Billing_Buffet diff --git a/BMW-Dynatrace-config/CD_Billing_Buffet/notification/README.md b/BMW-Dynatrace-config/CD_Billing_Buffet/notification/README.md new file mode 100644 index 00000000..e1a6af84 --- /dev/null +++ b/BMW-Dynatrace-config/CD_Billing_Buffet/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_Billing_Buffet/notification/email.json b/BMW-Dynatrace-config/CD_Billing_Buffet/notification/email.json new file mode 100644 index 00000000..486642a7 --- /dev/null +++ b/BMW-Dynatrace-config/CD_Billing_Buffet/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_Billing_Buffet/notification/msTeams.json b/BMW-Dynatrace-config/CD_Billing_Buffet/notification/msTeams.json new file mode 100644 index 00000000..33e92cf6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_Billing_Buffet/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_Billing_Buffet/notification/notification.yaml b/BMW-Dynatrace-config/CD_Billing_Buffet/notification/notification.yaml new file mode 100644 index 00000000..99bbb90f --- /dev/null +++ b/BMW-Dynatrace-config/CD_Billing_Buffet/notification/notification.yaml @@ -0,0 +1,51 @@ +config: +- CDBilling_Buffet-PROD: msTeams.json +- CDBilling_Buffet-INT: msTeams.json + +#Prod notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDBilling_Buffet-PROD: +- name: CD_Billing_Buffet PROD +- alertingProfile: CD_Billing_Buffet/alerting-profile/CDBilling_Buffet-PROD.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDBilling_Buffet-PROD.EMEA-Prod: +- name: CD_Billing_Buffet PROD +- alertingProfile: CD_Billing_Buffet/alerting-profile/CDBilling_Buffet-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDBilling_Buffet-PROD.NA-Prod: +- name: CD_Billing_Buffet PROD +- alertingProfile: CD_Billing_Buffet/alerting-profile/CDBilling_Buffet-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDBilling_Buffet-PROD.CN-Prod: +- name: CD_Billing_Buffet PROD +- alertingProfile: CD_Billing_Buffet/alerting-profile/CDBilling_Buffet-PROD.id +- webhook: https://empty +- skipDeployment: "false" + +#INT notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDBilling_Buffet-INT: +- name: CD_Billing_Buffet INT +- alertingProfile: CD_Billing_Buffet/alerting-profile/CDBilling_Buffet-INT.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDBilling_Buffet-INT.EMEA-PreProd: +- name: CD_Billing_Buffet INT +- alertingProfile: CD_Billing_Buffet/alerting-profile/CDBilling_Buffet-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDBilling_Buffet-INT.NA-PreProd: +- name: CD_Billing_Buffet INT +- alertingProfile: CD_Billing_Buffet/alerting-profile/CDBilling_Buffet-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDBilling_Buffet-INT.CN-PreProd: +- name: CD_Billing_Buffet INT +- alertingProfile: CD_Billing_Buffet/alerting-profile/CDBilling_Buffet-INT.id +- webhook: https://empty +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_Billing_Buffet/synthetic-monitor/README.md b/BMW-Dynatrace-config/CD_Billing_Buffet/synthetic-monitor/README.md new file mode 100644 index 00000000..1695924c --- /dev/null +++ b/BMW-Dynatrace-config/CD_Billing_Buffet/synthetic-monitor/README.md @@ -0,0 +1,4 @@ + +### How to configure synthetics? + +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Synthetic+Monitors) page to configure your synthetics. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_Billing_Buffet/synthetic-monitor/default.json b/BMW-Dynatrace-config/CD_Billing_Buffet/synthetic-monitor/default.json new file mode 100644 index 00000000..cf83039b --- /dev/null +++ b/BMW-Dynatrace-config/CD_Billing_Buffet/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_Billing_Buffet/synthetic-monitor/synthetic-monitor.yaml b/BMW-Dynatrace-config/CD_Billing_Buffet/synthetic-monitor/synthetic-monitor.yaml new file mode 100644 index 00000000..afb4382b --- /dev/null +++ b/BMW-Dynatrace-config/CD_Billing_Buffet/synthetic-monitor/synthetic-monitor.yaml @@ -0,0 +1,10 @@ +config: +- Billing_Buffet: default.json + +Billing_Buffet: +- name: CD_Billing_Buffet - +- mzName: CD_Billing_Buffet/management-zone/CDBilling_Buffet.name +- mzId: CD_Billing_Buffet/management-zone/CDBilling_Buffet.id +- endpoint: +- location: +- skipDeployment: "true" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_CCG/alerting-profile/CDCCG.json b/BMW-Dynatrace-config/CD_CCG/alerting-profile/CDCCG.json deleted file mode 100644 index 665a1466..00000000 --- a/BMW-Dynatrace-config/CD_CCG/alerting-profile/CDCCG.json +++ /dev/null @@ -1,63 +0,0 @@ -{ - "displayName": "{{.name}}", - "eventTypeFilters": [], - "managementZoneId": 1580439820202177300, - "metadata": { - "clusterVersion": "1.209.98.20210122-102634", - "configurationVersions": [], - "currentConfigurationVersions": [ - "0" - ] - }, - "mzId": "1580439820202177380", - "rules": [ - { - "delayInMinutes": 0, - "severityLevel": "AVAILABILITY", - "tagFilter": { - "includeMode": "NONE", - "tagFilters": [] - } - }, - { - "delayInMinutes": 0, - "severityLevel": "ERROR", - "tagFilter": { - "includeMode": "NONE", - "tagFilters": [] - } - }, - { - "delayInMinutes": 30, - "severityLevel": "PERFORMANCE", - "tagFilter": { - "includeMode": "NONE", - "tagFilters": [] - } - }, - { - "delayInMinutes": 30, - "severityLevel": "RESOURCE_CONTENTION", - "tagFilter": { - "includeMode": "NONE", - "tagFilters": [] - } - }, - { - "delayInMinutes": 0, - "severityLevel": "CUSTOM_ALERT", - "tagFilter": { - "includeMode": "NONE", - "tagFilters": [] - } - }, - { - "delayInMinutes": 0, - "severityLevel": "MONITORING_UNAVAILABLE", - "tagFilter": { - "includeMode": "NONE", - "tagFilters": [] - } - } - ] -} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_CCG/alerting-profile/alerting-profile.yaml b/BMW-Dynatrace-config/CD_CCG/alerting-profile/alerting-profile.yaml index b1b256bc..19515fa7 100644 --- a/BMW-Dynatrace-config/CD_CCG/alerting-profile/alerting-profile.yaml +++ b/BMW-Dynatrace-config/CD_CCG/alerting-profile/alerting-profile.yaml @@ -1,5 +1,60 @@ config: -- CDCCG: CDCCG.json +- CDCCG-PROD: default.json +- CDCCG-INT: default.json -CDCCG: -- name: CD_CCG +#Prod alerting profiles for EMEA/NA/CN +#Dry-run needed for all hubs +CDCCG-PROD: +- name: CD_CCG PROD +- tag: CCG +- mzId: CD_CCG/management-zone/CDCCG.id +- env: PROD +- skipDeployment: "true" +#Configuration +CDCCG-PROD.EMEA-Prod: +- name: CD_CCG PROD +- tag: CCG +- mzId: CD_CCG/management-zone/CDCCG.id +- env: PROD +- skipDeployment: "false" +CDCCG-PROD.NA-Prod: +- name: CD_CCG PROD +- tag: CCG +- mzId: CD_CCG/management-zone/CDCCG.id +- env: PROD +- skipDeployment: "false" +CDCCG-PROD.CN-Prod: +- name: CD_CCG PROD +- tag: CCG +- mzId: CD_CCG/management-zone/CDCCG.id +- env: PROD +- skipDeployment: "false" + + +#INT alerting profiles for EMEA/NA/CN +#Dry-run needed for all hubs +CDCCG-INT: +- name: CD_CCG INT +- tag: CCG +- mzId: CD_CCG/management-zone/CDCCG.id +- env: INT +- skipDeployment: "true" +#Configuration +CDCCG-INT.EMEA-PreProd: +- name: CD_CCG INT +- tag: CCG +- mzId: CD_CCG/management-zone/CDCCG.id +- env: INT +- skipDeployment: "false" +CDCCG-INT.NA-PreProd: +- name: CD_CCG INT +- tag: CCG +- mzId: CD_CCG/management-zone/CDCCG.id +- env: INT +- skipDeployment: "false" +CDCCG-INT.CN-PreProd: +- name: CD_CCG INT +- tag: CCG +- mzId: CD_CCG/management-zone/CDCCG.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_CCG/alerting-profile/default.json b/BMW-Dynatrace-config/CD_CCG/alerting-profile/default.json new file mode 100644 index 00000000..681a4c64 --- /dev/null +++ b/BMW-Dynatrace-config/CD_CCG/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_CCG/calculated-metrics-service/README.md b/BMW-Dynatrace-config/CD_CCG/calculated-metrics-service/README.md new file mode 100644 index 00000000..0bf8efbc --- /dev/null +++ b/BMW-Dynatrace-config/CD_CCG/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_CCG/conditional-naming-processgroup/README.md b/BMW-Dynatrace-config/CD_CCG/conditional-naming-processgroup/README.md new file mode 100644 index 00000000..f94196a5 --- /dev/null +++ b/BMW-Dynatrace-config/CD_CCG/conditional-naming-processgroup/README.md @@ -0,0 +1,67 @@ +### Process Group Detection Rules and Naming + +#### Detection Rule or Naming? + +For the explanation, we're using a real example of the Infotainment application: + +!(PGNaming1)[../../../../img/PGNaming1.PNG] + +Before working with your dashboards and alerting profiles, an important task to do when working with Dynatrace is checking +the structure of your applications (process groups). You can do that clicking under *technologies* and filter using your +application Management Zone. + +In the picture above, there are two Process Groups called bon-information-prod. **If you see duplicated process groups like in** +**this case, you MUST follow this guideline** + +Next step would be to open both process groups and compare the metadata. In that way, you can identify if all process instances are +part of the same application or not. An easy way to do that is asking yourself: how many instances of my application do i have? + +If you have 4 instances in total and you're able to see 2 in one PG and other 2 in other PG it means that **they are part of the ** +**same application** + +Another situation could be that checking on the metadata, then you see that are **two different application** and Dynatrace is just naming +the process group in the same way + +*Same application* +- Problem: Dynatrace is creating two different process groups, what transalates in two separated services for the same application. Instead of +seeing all the traffic in one service, you will have it splitted and it will complicate your monitoring +- Solution: create a process group detection rule. Contact Dynatrace Expert + +*Different application* +- Problem: Dynatrace is just naming in the same way applications that are different. +- Solution: This case is less severe, since it can be fixed with a process group naming rule. + + +What about our example? +!(PGNaming2)[../../../../img/PGNaming2.PNG] +!(PGNaming3)[../../../../img/PGNaming3.PNG] + +Based on the feedback of the infotaiment team, each process group is a different application (microservice) and it's visible in the kubernetes container/workload +within the metadata of each Process Group. + +#### How to create a Process Group Detection Rule +1. Open the *conditional-naming-processgroup.yaml* file and create a rule that looks like this: +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName} +- tag: Infotainment +- skipDeployment: false +``` +The result of the rule will be renaming the PG to this: +``` +bon-information-prod ipa +bon-information-prod rsl +``` + +Other possible placeholders that you can use are for example: +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName/[^\\-]*$} +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesFullPodName/buffet-(.*?)-} +{ProcessGroup:DetectedName} - {HostGroup:Name/[^\\_]*$} +{ProcessGroup:KubernetesNamespace} +{ProcessGroup:CommandLineArgs/.*?\\-f\\s\\/www\\/(.*?)\\/generated\\/httpd\\.conf.*?} + +You can combine different ones. Check the (documentation)[link] for more \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_CCG/conditional-naming-processgroup/conditional-naming-processgroup.yaml b/BMW-Dynatrace-config/CD_CCG/conditional-naming-processgroup/conditional-naming-processgroup.yaml new file mode 100644 index 00000000..e1a2e77e --- /dev/null +++ b/BMW-Dynatrace-config/CD_CCG/conditional-naming-processgroup/conditional-naming-processgroup.yaml @@ -0,0 +1,8 @@ +config: +- CDCCG: template.json + +CDCCG: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: CCG +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_CCG/conditional-naming-processgroup/template.json b/BMW-Dynatrace-config/CD_CCG/conditional-naming-processgroup/template.json new file mode 100644 index 00000000..7c039808 --- /dev/null +++ b/BMW-Dynatrace-config/CD_CCG/conditional-naming-processgroup/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "type": "PROCESS_GROUP" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_CCG/conditional-naming-service/README.md b/BMW-Dynatrace-config/CD_CCG/conditional-naming-service/README.md new file mode 100644 index 00000000..c34ef308 --- /dev/null +++ b/BMW-Dynatrace-config/CD_CCG/conditional-naming-service/README.md @@ -0,0 +1,35 @@ +### Service Naming Rules + +A typical case could be that you access to *Transaction & Services* and you find two services that are exactly the same: +*DataDownloadV1* +*DataDownloadV1* + +If you drilldown into the service and you check in the process group, you may have a PROD and a E2E for each service. + +*Note: if you see that both process group are exactly the same, please contact a Dynatrace expert to create a Process* +*Group detection rule* + +In the case the PG are PROD and E2E, then we need to create a rule that looks like this: + +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {Service:DetectedName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +- tag: Infotainment +- skipDeployment: false +``` + +The rule will get the Service Detected Name (current name) and it will extract (with a regex) the part of the kubernetes namespace after the "-", so -prod or -e2e, resulting in: +*DataDownloadV1 - prod* +*DataDownloadV1 - e2e* + +Now, services will be easy to identify. + +You can create rules based on any property/metadata. Some other placeholder's eamples: +{Service:DatabaseName} - E2E +{Service:WebServiceName} - {ProcessGroup:Kubernetes:microservice} - {ProcessGroup:Kubernetes:environment} +{Service:DetectedName} - {ProcessGroup:KubernetesContainerName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +{Service:DetectedName} - {ProcessGroup:SpringBootProfileName/[^\\-]*$} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_CCG/conditional-naming-service/conditional-naming-service.yaml b/BMW-Dynatrace-config/CD_CCG/conditional-naming-service/conditional-naming-service.yaml new file mode 100644 index 00000000..e1a2e77e --- /dev/null +++ b/BMW-Dynatrace-config/CD_CCG/conditional-naming-service/conditional-naming-service.yaml @@ -0,0 +1,8 @@ +config: +- CDCCG: template.json + +CDCCG: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: CCG +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_CCG/conditional-naming-service/template.json b/BMW-Dynatrace-config/CD_CCG/conditional-naming-service/template.json new file mode 100644 index 00000000..5d4fac56 --- /dev/null +++ b/BMW-Dynatrace-config/CD_CCG/conditional-naming-service/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "type": "SERVICE" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_CCG/custom-service-java/README.md b/BMW-Dynatrace-config/CD_CCG/custom-service-java/README.md new file mode 100644 index 00000000..5f35e5c1 --- /dev/null +++ b/BMW-Dynatrace-config/CD_CCG/custom-service-java/README.md @@ -0,0 +1,4 @@ + +### How to configure custom services? + +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Custom+Services) page to configure your custom services. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_CCG/custom-service-java/custom-service-java.yaml b/BMW-Dynatrace-config/CD_CCG/custom-service-java/custom-service-java.yaml new file mode 100644 index 00000000..25f8a028 --- /dev/null +++ b/BMW-Dynatrace-config/CD_CCG/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_CCG/custom-service-java/template-1-1.json b/BMW-Dynatrace-config/CD_CCG/custom-service-java/template-1-1.json new file mode 100644 index 00000000..b3003515 --- /dev/null +++ b/BMW-Dynatrace-config/CD_CCG/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_CCG/dashboard/README.md b/BMW-Dynatrace-config/CD_CCG/dashboard/README.md new file mode 100644 index 00000000..dffcdc8a --- /dev/null +++ b/BMW-Dynatrace-config/CD_CCG/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_CCG/dashboard/dashboard.yaml b/BMW-Dynatrace-config/CD_CCG/dashboard/dashboard.yaml new file mode 100644 index 00000000..caf92033 --- /dev/null +++ b/BMW-Dynatrace-config/CD_CCG/dashboard/dashboard.yaml @@ -0,0 +1,127 @@ +config: +- CDCCG-PROD: default.json +- CDCCG-E2E: default.json +- CDCCG-INT: default.json +- CDCCG-TEST: default.json + +#PROD dashboards for EMEA/NA/CN Prod +#Dry-run needed for all hubs +CDCCG-PROD: +- name: CD_CCG PROD +- mzName: CD_CCG/management-zone/CDCCG.name +- mzId: CD_CCG/management-zone/CDCCG.id +- env: PROD +- skipDeployment: "true" +#Configuration +CDCCG-PROD.EMEA-Prod: +- name: CD_CCG PROD +- mzName: CD_CCG/management-zone/CDCCG.name +- mzId: CD_CCG/management-zone/CDCCG.id +- tag: CCG +- env: PROD +- skipDeployment: "false" +CDCCG-PROD.NA-Prod: +- name: CD_CCG PROD +- mzName: CD_CCG/management-zone/CDCCG.name +- mzId: CD_CCG/management-zone/CDCCG.id +- tag: CCG +- env: PROD +- skipDeployment: "false" +CDCCG-PROD.CN-Prod: +- name: CD_CCG PROD +- mzName: CD_CCG/management-zone/CDCCG.name +- mzId: CD_CCG/management-zone/CDCCG.id +- tag: CCG +- env: PROD +- skipDeployment: "false" + +#E2E dashboards for EMEA/NA/CN E2E +#Dry-run needed for all hubs +CDCCG-E2E: +- name: CD_CCG E2E +- mzName: CD_CCG/management-zone/CDCCG.name +- mzId: CD_CCG/management-zone/CDCCG.id +- env: E2E +- skipDeployment: "true" +#Configuration +CDCCG-E2E.EMEA-Prod: +- name: CD_CCG E2E +- mzName: CD_CCG/management-zone/CDCCG.name +- mzId: CD_CCG/management-zone/CDCCG.id +- env: E2E +- tag: CCG +- skipDeployment: "true" +CDCCG-E2E.NA-Prod: +- name: CD_CCG E2E +- mzName: CD_CCG/management-zone/CDCCG.name +- mzId: CD_CCG/management-zone/CDCCG.id +- env: E2E +- tag: CCG +- skipDeployment: "true" +CDCCG-E2E.CN-Prod: +- name: CD_CCG E2E +- mzName: CD_CCG/management-zone/CDCCG.name +- mzId: CD_CCG/management-zone/CDCCG.id +- env: E2E +- tag: CCG +- skipDeployment: "true" + +#INT dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDCCG-INT: +- name: CD_CCG INT +- mzName: CD_CCG/management-zone/CDCCG.name +- mzId: CD_CCG/management-zone/CDCCG.id +- env: INT +- tag: CCG +- skipDeployment: "true" +#Configuration +CDCCG-INT.EMEA-PreProd: +- name: CD_CCG INT +- mzName: CD_CCG/management-zone/CDCCG.name +- mzId: CD_CCG/management-zone/CDCCG.id +- env: INT +- tag: CCG +- skipDeployment: "false" +CDCCG-INT.NA-PreProd: +- name: CD_CCG INT +- mzName: CD_CCG/management-zone/CDCCG.name +- mzId: CD_CCG/management-zone/CDCCG.id +- env: INT +- skipDeployment: "false" +CDCCG-INT.CN-PreProd: +- name: CD_CCG INT +- mzName: CD_CCG/management-zone/CDCCG.name +- mzId: CD_CCG/management-zone/CDCCG.id +- env: INT +- skipDeployment: "false" + +#TEST dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDCCG-TEST: +- name: CD_CCG TEST +- mzName: CD_CCG/management-zone/CDCCG.name +- mzId: CD_CCG/management-zone/CDCCG.id +- tag: CCG +- env: TEST +- skipDeployment: "true" +#Configuration +CDCCG-TEST.EMEA-PreProd: +- name: CD_CCG TEST +- mzName: CD_CCG/management-zone/CDCCG.name +- mzId: CD_CCG/management-zone/CDCCG.id +- tag: CCG +- env: TEST +- skipDeployment: "false" +CDCCG-TEST.NA-PreProd: +- name: CD_CCG TEST +- mzName: CD_CCG/management-zone/CDCCG.name +- mzId: CD_CCG/management-zone/CDCCG.id +- env: TEST +- skipDeployment: "false" +CDCCG-TEST.CN-PreProd: +- name: CD_CCG TEST +- mzName: CD_CCG/management-zone/CDCCG.name +- mzId: CD_CCG/management-zone/CDCCG.id +- env: TEST +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_CCG/dashboard/default.json b/BMW-Dynatrace-config/CD_CCG/dashboard/default.json new file mode 100644 index 00000000..6c685810 --- /dev/null +++ b/BMW-Dynatrace-config/CD_CCG/dashboard/default.json @@ -0,0 +1,308 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.214.107.20210407-223952" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": true, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "timeframe": "-24h to now" + }, + "tags": [ + "{{.tag}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 228, + "left": 38, + "width": 1064, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Failure rate (HTTP 4xx/5xx errors)", + "defaultName": "Custom chart", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [ + { + "metric": "builtin:service.errors.fourxx.rate", + "aggregation": "AVG", + "type": "BAR", + "entityType": "SERVICE", + "dimensions": [], + "sortAscending": false, + "sortColumn": false, + "aggregationRate": "TOTAL" + }, + { + "metric": "builtin:service.errors.fivexx.rate", + "aggregation": "AVG", + "type": "BAR", + "entityType": "SERVICE", + "dimensions": [], + "sortAscending": false, + "sortColumn": true, + "aggregationRate": "TOTAL" + } + ], + "resultMetadata": { + "nullbuiltin:service.errors.fivexx.rate|AVG|TOTAL|BAR|SERVICE": { + "lastModified": 1617956393463, + "customColor": "#ff0000" + }, + "nullbuiltin:service.errors.fourxx.rate|AVG|TOTAL|BAR|SERVICE": { + "lastModified": 1617956441725, + "customColor": "#fff29a" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:{{.env}}", + "Component:{{.tag}}" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 38, + "left": 950, + "width": 152, + "height": 152 + }, + "tileFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + } + }, + { + "name": "Overall Health", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 0, + "left": 38, + "width": 1064, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 532, + "left": 38, + "width": 1064, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 570, + "left": 38, + "width": 1064, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Request Count and Number of Errors", + "defaultName": "Custom chart", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [ + { + "metric": "builtin:service.response.time", + "aggregation": "AVG", + "type": "LINE", + "entityType": "SERVICE", + "dimensions": [], + "sortAscending": false, + "sortColumn": false, + "aggregationRate": "TOTAL" + }, + { + "metric": "builtin:service.requestCount.total", + "aggregation": "NONE", + "type": "BAR", + "entityType": "SERVICE", + "dimensions": [], + "sortAscending": false, + "sortColumn": false, + "aggregationRate": "TOTAL" + }, + { + "metric": "builtin:service.errors.total.count", + "aggregation": "NONE", + "type": "BAR", + "entityType": "SERVICE", + "dimensions": [], + "sortAscending": false, + "sortColumn": true, + "aggregationRate": "TOTAL" + } + ], + "resultMetadata": { + "nullbuiltin:service.requestCount.total|NONE|TOTAL|BAR|SERVICE": { + "lastModified": 1595275720776, + "customColor": "#008cdb" + }, + "nullbuiltin:service.errors.total.count|NONE|TOTAL|BAR|SERVICE": { + "lastModified": 1595275955999, + "customColor": "#ef651f" + }, + "nullbuiltin:service.response.time|AVG|TOTAL|LINE|SERVICE": { + "lastModified": 1595275686773, + "customColor": "#b4e5f9" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:{{.env}}", + "Component:{{.tag}}" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 190, + "left": 38, + "width": 1064, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 38, + "left": 646, + "width": 190, + "height": 152 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:{{.env}}", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 38, + "left": 342, + "width": 190, + "height": 152 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:{{.env}}", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 190, + "height": 152 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:{{.env}}", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_CCG/management-zone/CDCCG.json b/BMW-Dynatrace-config/CD_CCG/management-zone/CDCCG.json deleted file mode 100644 index a39009de..00000000 --- a/BMW-Dynatrace-config/CD_CCG/management-zone/CDCCG.json +++ /dev/null @@ -1,73 +0,0 @@ -{ - "dimensionalRules": [], - "metadata": { - "clusterVersion": "1.209.98.20210122-102634", - "configurationVersions": [ - 0 - ] - }, - "name": "{{.name}}", - "rules": [ - { - "conditions": [ - { - "comparisonInfo": { - "negate": false, - "operator": "EQUALS", - "type": "TAG", - "value": { - "context": "CONTEXTLESS", - "key": "Component", - "value": "CCG" - } - }, - "key": { - "attribute": "SERVICE_TAGS" - } - }, - { - "comparisonInfo": { - "caseSensitive": false, - "negate": true, - "operator": "CONTAINS", - "type": "STRING", - "value": "Resource" - }, - "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": "CCG" - } - }, - "key": { - "attribute": "HOST_TAGS" - } - } - ], - "enabled": true, - "propagationTypes": [ - "HOST_TO_PROCESS_GROUP_INSTANCE" - ], - "type": "HOST" - } - ] -} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_CCG/management-zone/README.md b/BMW-Dynatrace-config/CD_CCG/management-zone/README.md new file mode 100644 index 00000000..3244b3e6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_CCG/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_Billing_Buffet/management-zone/CDBuffet.json b/BMW-Dynatrace-config/CD_CCG/management-zone/default.json similarity index 63% rename from BMW-Dynatrace-config/CD_Billing_Buffet/management-zone/CDBuffet.json rename to BMW-Dynatrace-config/CD_CCG/management-zone/default.json index b2a9367b..bffa0c3b 100644 --- a/BMW-Dynatrace-config/CD_Billing_Buffet/management-zone/CDBuffet.json +++ b/BMW-Dynatrace-config/CD_CCG/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,65 @@ "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" + }, + { + "conditions": [ + { + "comparisonInfo": { + "caseSensitive": true, + "negate": false, + "operator": "CONTAINS", + "type": "STRING", + "value": "{{.tag}}" + }, + "key": { + "attribute": "CLOUD_APPLICATION_NAMESPACE_NAME" + } + } + ], + "enabled": true, + "propagationTypes": [], + "type": "CLOUD_APPLICATION_NAMESPACE" + }, + { + "conditions": [ + { + "comparisonInfo": { + "caseSensitive": true, + "negate": false, + "operator": "CONTAINS", + "type": "STRING", + "value": "{{.tag}}" + }, + "key": { + "attribute": "CLOUD_APPLICATION_NAME" + } + } + ], + "enabled": true, + "propagationTypes": [], + "type": "CLOUD_APPLICATION" } ] } \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_CCG/management-zone/management-zone.yaml b/BMW-Dynatrace-config/CD_CCG/management-zone/management-zone.yaml index b1b256bc..51c630dd 100644 --- a/BMW-Dynatrace-config/CD_CCG/management-zone/management-zone.yaml +++ b/BMW-Dynatrace-config/CD_CCG/management-zone/management-zone.yaml @@ -1,5 +1,6 @@ config: -- CDCCG: CDCCG.json +- CDCCG: default.json CDCCG: - name: CD_CCG +- tag: CCG diff --git a/BMW-Dynatrace-config/CD_CCG/notification/README.md b/BMW-Dynatrace-config/CD_CCG/notification/README.md new file mode 100644 index 00000000..e1a6af84 --- /dev/null +++ b/BMW-Dynatrace-config/CD_CCG/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_CCG/notification/email.json b/BMW-Dynatrace-config/CD_CCG/notification/email.json new file mode 100644 index 00000000..486642a7 --- /dev/null +++ b/BMW-Dynatrace-config/CD_CCG/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_CCG/notification/msTeams.json b/BMW-Dynatrace-config/CD_CCG/notification/msTeams.json new file mode 100644 index 00000000..33e92cf6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_CCG/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_CCG/notification/notification.yaml b/BMW-Dynatrace-config/CD_CCG/notification/notification.yaml new file mode 100644 index 00000000..45e19660 --- /dev/null +++ b/BMW-Dynatrace-config/CD_CCG/notification/notification.yaml @@ -0,0 +1,51 @@ +config: +- CDCCG-PROD: msTeams.json +- CDCCG-INT: msTeams.json + +#Prod notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDCCG-PROD: +- name: CD_CCG PROD +- alertingProfile: CD_CCG/alerting-profile/CDCCG-PROD.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDCCG-PROD.EMEA-Prod: +- name: CD_CCG PROD +- alertingProfile: CD_CCG/alerting-profile/CDCCG-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDCCG-PROD.NA-Prod: +- name: CD_CCG PROD +- alertingProfile: CD_CCG/alerting-profile/CDCCG-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDCCG-PROD.CN-Prod: +- name: CD_CCG PROD +- alertingProfile: CD_CCG/alerting-profile/CDCCG-PROD.id +- webhook: https://empty +- skipDeployment: "false" + +#INT notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDCCG-INT: +- name: CD_CCG INT +- alertingProfile: CD_CCG/alerting-profile/CDCCG-INT.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDCCG-INT.EMEA-PreProd: +- name: CD_CCG INT +- alertingProfile: CD_CCG/alerting-profile/CDCCG-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDCCG-INT.NA-PreProd: +- name: CD_CCG INT +- alertingProfile: CD_CCG/alerting-profile/CDCCG-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDCCG-INT.CN-PreProd: +- name: CD_CCG INT +- alertingProfile: CD_CCG/alerting-profile/CDCCG-INT.id +- webhook: https://empty +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_CCG/synthetic-monitor/README.md b/BMW-Dynatrace-config/CD_CCG/synthetic-monitor/README.md new file mode 100644 index 00000000..1695924c --- /dev/null +++ b/BMW-Dynatrace-config/CD_CCG/synthetic-monitor/README.md @@ -0,0 +1,4 @@ + +### How to configure synthetics? + +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Synthetic+Monitors) page to configure your synthetics. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_CCG/synthetic-monitor/default.json b/BMW-Dynatrace-config/CD_CCG/synthetic-monitor/default.json new file mode 100644 index 00000000..cf83039b --- /dev/null +++ b/BMW-Dynatrace-config/CD_CCG/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_CCG/synthetic-monitor/synthetic-monitor.yaml b/BMW-Dynatrace-config/CD_CCG/synthetic-monitor/synthetic-monitor.yaml new file mode 100644 index 00000000..15218446 --- /dev/null +++ b/BMW-Dynatrace-config/CD_CCG/synthetic-monitor/synthetic-monitor.yaml @@ -0,0 +1,10 @@ +config: +- CCG: default.json + +CCG: +- name: CD_CCG - +- mzName: CD_CCG/management-zone/CDCCG.name +- mzId: CD_CCG/management-zone/CDCCG.id +- endpoint: +- location: +- skipDeployment: "true" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_CSI/alerting-profile/CDCSI.json b/BMW-Dynatrace-config/CD_CSI/alerting-profile/CDCSI.json deleted file mode 100644 index 3aab2a4c..00000000 --- a/BMW-Dynatrace-config/CD_CSI/alerting-profile/CDCSI.json +++ /dev/null @@ -1,63 +0,0 @@ -{ - "displayName": "{{.name}}", - "eventTypeFilters": [], - "managementZoneId": 8356220544719609000, - "metadata": { - "clusterVersion": "1.209.98.20210122-102634", - "configurationVersions": [], - "currentConfigurationVersions": [ - "0" - ] - }, - "mzId": "8356220544719609273", - "rules": [ - { - "delayInMinutes": 0, - "severityLevel": "AVAILABILITY", - "tagFilter": { - "includeMode": "NONE", - "tagFilters": [] - } - }, - { - "delayInMinutes": 0, - "severityLevel": "ERROR", - "tagFilter": { - "includeMode": "NONE", - "tagFilters": [] - } - }, - { - "delayInMinutes": 30, - "severityLevel": "PERFORMANCE", - "tagFilter": { - "includeMode": "NONE", - "tagFilters": [] - } - }, - { - "delayInMinutes": 30, - "severityLevel": "RESOURCE_CONTENTION", - "tagFilter": { - "includeMode": "NONE", - "tagFilters": [] - } - }, - { - "delayInMinutes": 0, - "severityLevel": "CUSTOM_ALERT", - "tagFilter": { - "includeMode": "NONE", - "tagFilters": [] - } - }, - { - "delayInMinutes": 0, - "severityLevel": "MONITORING_UNAVAILABLE", - "tagFilter": { - "includeMode": "NONE", - "tagFilters": [] - } - } - ] -} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_CSI/alerting-profile/alerting-profile.yaml b/BMW-Dynatrace-config/CD_CSI/alerting-profile/alerting-profile.yaml index 11789c17..3f69cfd7 100644 --- a/BMW-Dynatrace-config/CD_CSI/alerting-profile/alerting-profile.yaml +++ b/BMW-Dynatrace-config/CD_CSI/alerting-profile/alerting-profile.yaml @@ -1,5 +1,60 @@ config: -- CDCSI: CDCSI.json +- CDCSI-PROD: default.json +- CDCSI-INT: default.json -CDCSI: -- name: CD_CSI +#Prod alerting profiles for EMEA/NA/CN +#Dry-run needed for all hubs +CDCSI-PROD: +- name: CD_CSI PROD +- tag: CSI +- mzId: CD_CSI/management-zone/CDCSI.id +- env: PROD +- skipDeployment: "true" +#Configuration +CDCSI-PROD.EMEA-Prod: +- name: CD_CSI PROD +- tag: CSI +- mzId: CD_CSI/management-zone/CDCSI.id +- env: PROD +- skipDeployment: "false" +CDCSI-PROD.NA-Prod: +- name: CD_CSI PROD +- tag: CSI +- mzId: CD_CSI/management-zone/CDCSI.id +- env: PROD +- skipDeployment: "false" +CDCSI-PROD.CN-Prod: +- name: CD_CSI PROD +- tag: CSI +- mzId: CD_CSI/management-zone/CDCSI.id +- env: PROD +- skipDeployment: "false" + + +#INT alerting profiles for EMEA/NA/CN +#Dry-run needed for all hubs +CDCSI-INT: +- name: CD_CSI INT +- tag: CSI +- mzId: CD_CSI/management-zone/CDCSI.id +- env: INT +- skipDeployment: "true" +#Configuration +CDCSI-INT.EMEA-PreProd: +- name: CD_CSI INT +- tag: CSI +- mzId: CD_CSI/management-zone/CDCSI.id +- env: INT +- skipDeployment: "false" +CDCSI-INT.NA-PreProd: +- name: CD_CSI INT +- tag: CSI +- mzId: CD_CSI/management-zone/CDCSI.id +- env: INT +- skipDeployment: "false" +CDCSI-INT.CN-PreProd: +- name: CD_CSI INT +- tag: CSI +- mzId: CD_CSI/management-zone/CDCSI.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_CSI/alerting-profile/default.json b/BMW-Dynatrace-config/CD_CSI/alerting-profile/default.json new file mode 100644 index 00000000..681a4c64 --- /dev/null +++ b/BMW-Dynatrace-config/CD_CSI/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_CSI/calculated-metrics-service/README.md b/BMW-Dynatrace-config/CD_CSI/calculated-metrics-service/README.md new file mode 100644 index 00000000..0bf8efbc --- /dev/null +++ b/BMW-Dynatrace-config/CD_CSI/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_CSI/conditional-naming-processgroup/README.md b/BMW-Dynatrace-config/CD_CSI/conditional-naming-processgroup/README.md new file mode 100644 index 00000000..f94196a5 --- /dev/null +++ b/BMW-Dynatrace-config/CD_CSI/conditional-naming-processgroup/README.md @@ -0,0 +1,67 @@ +### Process Group Detection Rules and Naming + +#### Detection Rule or Naming? + +For the explanation, we're using a real example of the Infotainment application: + +!(PGNaming1)[../../../../img/PGNaming1.PNG] + +Before working with your dashboards and alerting profiles, an important task to do when working with Dynatrace is checking +the structure of your applications (process groups). You can do that clicking under *technologies* and filter using your +application Management Zone. + +In the picture above, there are two Process Groups called bon-information-prod. **If you see duplicated process groups like in** +**this case, you MUST follow this guideline** + +Next step would be to open both process groups and compare the metadata. In that way, you can identify if all process instances are +part of the same application or not. An easy way to do that is asking yourself: how many instances of my application do i have? + +If you have 4 instances in total and you're able to see 2 in one PG and other 2 in other PG it means that **they are part of the ** +**same application** + +Another situation could be that checking on the metadata, then you see that are **two different application** and Dynatrace is just naming +the process group in the same way + +*Same application* +- Problem: Dynatrace is creating two different process groups, what transalates in two separated services for the same application. Instead of +seeing all the traffic in one service, you will have it splitted and it will complicate your monitoring +- Solution: create a process group detection rule. Contact Dynatrace Expert + +*Different application* +- Problem: Dynatrace is just naming in the same way applications that are different. +- Solution: This case is less severe, since it can be fixed with a process group naming rule. + + +What about our example? +!(PGNaming2)[../../../../img/PGNaming2.PNG] +!(PGNaming3)[../../../../img/PGNaming3.PNG] + +Based on the feedback of the infotaiment team, each process group is a different application (microservice) and it's visible in the kubernetes container/workload +within the metadata of each Process Group. + +#### How to create a Process Group Detection Rule +1. Open the *conditional-naming-processgroup.yaml* file and create a rule that looks like this: +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName} +- tag: Infotainment +- skipDeployment: false +``` +The result of the rule will be renaming the PG to this: +``` +bon-information-prod ipa +bon-information-prod rsl +``` + +Other possible placeholders that you can use are for example: +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName/[^\\-]*$} +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesFullPodName/buffet-(.*?)-} +{ProcessGroup:DetectedName} - {HostGroup:Name/[^\\_]*$} +{ProcessGroup:KubernetesNamespace} +{ProcessGroup:CommandLineArgs/.*?\\-f\\s\\/www\\/(.*?)\\/generated\\/httpd\\.conf.*?} + +You can combine different ones. Check the (documentation)[link] for more \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_CSI/conditional-naming-processgroup/conditional-naming-processgroup.yaml b/BMW-Dynatrace-config/CD_CSI/conditional-naming-processgroup/conditional-naming-processgroup.yaml new file mode 100644 index 00000000..5ba3c19b --- /dev/null +++ b/BMW-Dynatrace-config/CD_CSI/conditional-naming-processgroup/conditional-naming-processgroup.yaml @@ -0,0 +1,8 @@ +config: +- CDCSI: template.json + +CDCSI: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: CSI +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_CSI/conditional-naming-processgroup/template.json b/BMW-Dynatrace-config/CD_CSI/conditional-naming-processgroup/template.json new file mode 100644 index 00000000..7c039808 --- /dev/null +++ b/BMW-Dynatrace-config/CD_CSI/conditional-naming-processgroup/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "type": "PROCESS_GROUP" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_CSI/conditional-naming-service/README.md b/BMW-Dynatrace-config/CD_CSI/conditional-naming-service/README.md new file mode 100644 index 00000000..c34ef308 --- /dev/null +++ b/BMW-Dynatrace-config/CD_CSI/conditional-naming-service/README.md @@ -0,0 +1,35 @@ +### Service Naming Rules + +A typical case could be that you access to *Transaction & Services* and you find two services that are exactly the same: +*DataDownloadV1* +*DataDownloadV1* + +If you drilldown into the service and you check in the process group, you may have a PROD and a E2E for each service. + +*Note: if you see that both process group are exactly the same, please contact a Dynatrace expert to create a Process* +*Group detection rule* + +In the case the PG are PROD and E2E, then we need to create a rule that looks like this: + +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {Service:DetectedName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +- tag: Infotainment +- skipDeployment: false +``` + +The rule will get the Service Detected Name (current name) and it will extract (with a regex) the part of the kubernetes namespace after the "-", so -prod or -e2e, resulting in: +*DataDownloadV1 - prod* +*DataDownloadV1 - e2e* + +Now, services will be easy to identify. + +You can create rules based on any property/metadata. Some other placeholder's eamples: +{Service:DatabaseName} - E2E +{Service:WebServiceName} - {ProcessGroup:Kubernetes:microservice} - {ProcessGroup:Kubernetes:environment} +{Service:DetectedName} - {ProcessGroup:KubernetesContainerName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +{Service:DetectedName} - {ProcessGroup:SpringBootProfileName/[^\\-]*$} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_CSI/conditional-naming-service/conditional-naming-service.yaml b/BMW-Dynatrace-config/CD_CSI/conditional-naming-service/conditional-naming-service.yaml new file mode 100644 index 00000000..5ba3c19b --- /dev/null +++ b/BMW-Dynatrace-config/CD_CSI/conditional-naming-service/conditional-naming-service.yaml @@ -0,0 +1,8 @@ +config: +- CDCSI: template.json + +CDCSI: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: CSI +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_CSI/conditional-naming-service/template.json b/BMW-Dynatrace-config/CD_CSI/conditional-naming-service/template.json new file mode 100644 index 00000000..5d4fac56 --- /dev/null +++ b/BMW-Dynatrace-config/CD_CSI/conditional-naming-service/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "type": "SERVICE" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_CSI/custom-service-java/README.md b/BMW-Dynatrace-config/CD_CSI/custom-service-java/README.md new file mode 100644 index 00000000..5f35e5c1 --- /dev/null +++ b/BMW-Dynatrace-config/CD_CSI/custom-service-java/README.md @@ -0,0 +1,4 @@ + +### How to configure custom services? + +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Custom+Services) page to configure your custom services. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_CSI/custom-service-java/custom-service-java.yaml b/BMW-Dynatrace-config/CD_CSI/custom-service-java/custom-service-java.yaml new file mode 100644 index 00000000..25f8a028 --- /dev/null +++ b/BMW-Dynatrace-config/CD_CSI/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_CSI/custom-service-java/template-1-1.json b/BMW-Dynatrace-config/CD_CSI/custom-service-java/template-1-1.json new file mode 100644 index 00000000..b3003515 --- /dev/null +++ b/BMW-Dynatrace-config/CD_CSI/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_CSI/dashboard/README.md b/BMW-Dynatrace-config/CD_CSI/dashboard/README.md new file mode 100644 index 00000000..dffcdc8a --- /dev/null +++ b/BMW-Dynatrace-config/CD_CSI/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_CSI/dashboard/dashboard.yaml b/BMW-Dynatrace-config/CD_CSI/dashboard/dashboard.yaml new file mode 100644 index 00000000..a3f389b7 --- /dev/null +++ b/BMW-Dynatrace-config/CD_CSI/dashboard/dashboard.yaml @@ -0,0 +1,127 @@ +config: +- CDCSI-PROD: default.json +- CDCSI-E2E: default.json +- CDCSI-INT: default.json +- CDCSI-TEST: default.json + +#PROD dashboards for EMEA/NA/CN Prod +#Dry-run needed for all hubs +CDCSI-PROD: +- name: CD_CSI PROD +- mzName: CD_CSI/management-zone/CDCSI.name +- mzId: CD_CSI/management-zone/CDCSI.id +- env: PROD +- skipDeployment: "true" +#Configuration +CDCSI-PROD.EMEA-Prod: +- name: CD_CSI PROD +- mzName: CD_CSI/management-zone/CDCSI.name +- mzId: CD_CSI/management-zone/CDCSI.id +- tag: CSI +- env: PROD +- skipDeployment: "false" +CDCSI-PROD.NA-Prod: +- name: CD_CSI PROD +- mzName: CD_CSI/management-zone/CDCSI.name +- mzId: CD_CSI/management-zone/CDCSI.id +- tag: CSI +- env: PROD +- skipDeployment: "false" +CDCSI-PROD.CN-Prod: +- name: CD_CSI PROD +- mzName: CD_CSI/management-zone/CDCSI.name +- mzId: CD_CSI/management-zone/CDCSI.id +- tag: CSI +- env: PROD +- skipDeployment: "false" + +#E2E dashboards for EMEA/NA/CN E2E +#Dry-run needed for all hubs +CDCSI-E2E: +- name: CD_CSI E2E +- mzName: CD_CSI/management-zone/CDCSI.name +- mzId: CD_CSI/management-zone/CDCSI.id +- env: E2E +- skipDeployment: "true" +#Configuration +CDCSI-E2E.EMEA-Prod: +- name: CD_CSI E2E +- mzName: CD_CSI/management-zone/CDCSI.name +- mzId: CD_CSI/management-zone/CDCSI.id +- env: E2E +- tag: CSI +- skipDeployment: "true" +CDCSI-E2E.NA-Prod: +- name: CD_CSI E2E +- mzName: CD_CSI/management-zone/CDCSI.name +- mzId: CD_CSI/management-zone/CDCSI.id +- env: E2E +- tag: CSI +- skipDeployment: "true" +CDCSI-E2E.CN-Prod: +- name: CD_CSI E2E +- mzName: CD_CSI/management-zone/CDCSI.name +- mzId: CD_CSI/management-zone/CDCSI.id +- env: E2E +- tag: CSI +- skipDeployment: "true" + +#INT dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDCSI-INT: +- name: CD_CSI INT +- mzName: CD_CSI/management-zone/CDCSI.name +- mzId: CD_CSI/management-zone/CDCSI.id +- env: INT +- tag: CSI +- skipDeployment: "true" +#Configuration +CDCSI-INT.EMEA-PreProd: +- name: CD_CSI INT +- mzName: CD_CSI/management-zone/CDCSI.name +- mzId: CD_CSI/management-zone/CDCSI.id +- env: INT +- tag: CSI +- skipDeployment: "false" +CDCSI-INT.NA-PreProd: +- name: CD_CSI INT +- mzName: CD_CSI/management-zone/CDCSI.name +- mzId: CD_CSI/management-zone/CDCSI.id +- env: INT +- skipDeployment: "false" +CDCSI-INT.CN-PreProd: +- name: CD_CSI INT +- mzName: CD_CSI/management-zone/CDCSI.name +- mzId: CD_CSI/management-zone/CDCSI.id +- env: INT +- skipDeployment: "false" + +#TEST dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDCSI-TEST: +- name: CD_CSI TEST +- mzName: CD_CSI/management-zone/CDCSI.name +- mzId: CD_CSI/management-zone/CDCSI.id +- tag: CSI +- env: TEST +- skipDeployment: "true" +#Configuration +CDCSI-TEST.EMEA-PreProd: +- name: CD_CSI TEST +- mzName: CD_CSI/management-zone/CDCSI.name +- mzId: CD_CSI/management-zone/CDCSI.id +- tag: CSI +- env: TEST +- skipDeployment: "false" +CDCSI-TEST.NA-PreProd: +- name: CD_CSI TEST +- mzName: CD_CSI/management-zone/CDCSI.name +- mzId: CD_CSI/management-zone/CDCSI.id +- env: TEST +- skipDeployment: "false" +CDCSI-TEST.CN-PreProd: +- name: CD_CSI TEST +- mzName: CD_CSI/management-zone/CDCSI.name +- mzId: CD_CSI/management-zone/CDCSI.id +- env: TEST +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_CSI/dashboard/default.json b/BMW-Dynatrace-config/CD_CSI/dashboard/default.json new file mode 100644 index 00000000..6c685810 --- /dev/null +++ b/BMW-Dynatrace-config/CD_CSI/dashboard/default.json @@ -0,0 +1,308 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.214.107.20210407-223952" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": true, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "timeframe": "-24h to now" + }, + "tags": [ + "{{.tag}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 228, + "left": 38, + "width": 1064, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Failure rate (HTTP 4xx/5xx errors)", + "defaultName": "Custom chart", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [ + { + "metric": "builtin:service.errors.fourxx.rate", + "aggregation": "AVG", + "type": "BAR", + "entityType": "SERVICE", + "dimensions": [], + "sortAscending": false, + "sortColumn": false, + "aggregationRate": "TOTAL" + }, + { + "metric": "builtin:service.errors.fivexx.rate", + "aggregation": "AVG", + "type": "BAR", + "entityType": "SERVICE", + "dimensions": [], + "sortAscending": false, + "sortColumn": true, + "aggregationRate": "TOTAL" + } + ], + "resultMetadata": { + "nullbuiltin:service.errors.fivexx.rate|AVG|TOTAL|BAR|SERVICE": { + "lastModified": 1617956393463, + "customColor": "#ff0000" + }, + "nullbuiltin:service.errors.fourxx.rate|AVG|TOTAL|BAR|SERVICE": { + "lastModified": 1617956441725, + "customColor": "#fff29a" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:{{.env}}", + "Component:{{.tag}}" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 38, + "left": 950, + "width": 152, + "height": 152 + }, + "tileFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + } + }, + { + "name": "Overall Health", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 0, + "left": 38, + "width": 1064, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 532, + "left": 38, + "width": 1064, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 570, + "left": 38, + "width": 1064, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Request Count and Number of Errors", + "defaultName": "Custom chart", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [ + { + "metric": "builtin:service.response.time", + "aggregation": "AVG", + "type": "LINE", + "entityType": "SERVICE", + "dimensions": [], + "sortAscending": false, + "sortColumn": false, + "aggregationRate": "TOTAL" + }, + { + "metric": "builtin:service.requestCount.total", + "aggregation": "NONE", + "type": "BAR", + "entityType": "SERVICE", + "dimensions": [], + "sortAscending": false, + "sortColumn": false, + "aggregationRate": "TOTAL" + }, + { + "metric": "builtin:service.errors.total.count", + "aggregation": "NONE", + "type": "BAR", + "entityType": "SERVICE", + "dimensions": [], + "sortAscending": false, + "sortColumn": true, + "aggregationRate": "TOTAL" + } + ], + "resultMetadata": { + "nullbuiltin:service.requestCount.total|NONE|TOTAL|BAR|SERVICE": { + "lastModified": 1595275720776, + "customColor": "#008cdb" + }, + "nullbuiltin:service.errors.total.count|NONE|TOTAL|BAR|SERVICE": { + "lastModified": 1595275955999, + "customColor": "#ef651f" + }, + "nullbuiltin:service.response.time|AVG|TOTAL|LINE|SERVICE": { + "lastModified": 1595275686773, + "customColor": "#b4e5f9" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:{{.env}}", + "Component:{{.tag}}" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 190, + "left": 38, + "width": 1064, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 38, + "left": 646, + "width": 190, + "height": 152 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:{{.env}}", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 38, + "left": 342, + "width": 190, + "height": 152 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:{{.env}}", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 190, + "height": 152 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:{{.env}}", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_CSI/management-zone/CDCSI.json b/BMW-Dynatrace-config/CD_CSI/management-zone/CDCSI.json deleted file mode 100644 index 9b39c21e..00000000 --- a/BMW-Dynatrace-config/CD_CSI/management-zone/CDCSI.json +++ /dev/null @@ -1,73 +0,0 @@ -{ - "dimensionalRules": [], - "metadata": { - "clusterVersion": "1.209.98.20210122-102634", - "configurationVersions": [ - 0 - ] - }, - "name": "{{.name}}", - "rules": [ - { - "conditions": [ - { - "comparisonInfo": { - "negate": false, - "operator": "EQUALS", - "type": "TAG", - "value": { - "context": "CONTEXTLESS", - "key": "Component", - "value": "CSI" - } - }, - "key": { - "attribute": "SERVICE_TAGS" - } - }, - { - "comparisonInfo": { - "caseSensitive": false, - "negate": true, - "operator": "CONTAINS", - "type": "STRING", - "value": "Resource" - }, - "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": "CSI" - } - }, - "key": { - "attribute": "HOST_TAGS" - } - } - ], - "enabled": true, - "propagationTypes": [ - "HOST_TO_PROCESS_GROUP_INSTANCE" - ], - "type": "HOST" - } - ] -} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_CSI/management-zone/README.md b/BMW-Dynatrace-config/CD_CSI/management-zone/README.md new file mode 100644 index 00000000..3244b3e6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_CSI/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_PISA/management-zone/CDTemplate.json b/BMW-Dynatrace-config/CD_CSI/management-zone/default.json similarity index 63% rename from BMW-Dynatrace-config/CD_PISA/management-zone/CDTemplate.json rename to BMW-Dynatrace-config/CD_CSI/management-zone/default.json index b2a9367b..bffa0c3b 100644 --- a/BMW-Dynatrace-config/CD_PISA/management-zone/CDTemplate.json +++ b/BMW-Dynatrace-config/CD_CSI/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,65 @@ "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" + }, + { + "conditions": [ + { + "comparisonInfo": { + "caseSensitive": true, + "negate": false, + "operator": "CONTAINS", + "type": "STRING", + "value": "{{.tag}}" + }, + "key": { + "attribute": "CLOUD_APPLICATION_NAMESPACE_NAME" + } + } + ], + "enabled": true, + "propagationTypes": [], + "type": "CLOUD_APPLICATION_NAMESPACE" + }, + { + "conditions": [ + { + "comparisonInfo": { + "caseSensitive": true, + "negate": false, + "operator": "CONTAINS", + "type": "STRING", + "value": "{{.tag}}" + }, + "key": { + "attribute": "CLOUD_APPLICATION_NAME" + } + } + ], + "enabled": true, + "propagationTypes": [], + "type": "CLOUD_APPLICATION" } ] } \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_CSI/management-zone/management-zone.yaml b/BMW-Dynatrace-config/CD_CSI/management-zone/management-zone.yaml index 11789c17..8217cef3 100644 --- a/BMW-Dynatrace-config/CD_CSI/management-zone/management-zone.yaml +++ b/BMW-Dynatrace-config/CD_CSI/management-zone/management-zone.yaml @@ -1,5 +1,6 @@ config: -- CDCSI: CDCSI.json +- CDCSI: default.json CDCSI: - name: CD_CSI +- tag: CSI diff --git a/BMW-Dynatrace-config/CD_CSI/notification/README.md b/BMW-Dynatrace-config/CD_CSI/notification/README.md new file mode 100644 index 00000000..e1a6af84 --- /dev/null +++ b/BMW-Dynatrace-config/CD_CSI/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_CSI/notification/email.json b/BMW-Dynatrace-config/CD_CSI/notification/email.json new file mode 100644 index 00000000..486642a7 --- /dev/null +++ b/BMW-Dynatrace-config/CD_CSI/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_CSI/notification/msTeams.json b/BMW-Dynatrace-config/CD_CSI/notification/msTeams.json new file mode 100644 index 00000000..33e92cf6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_CSI/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_CSI/notification/notification.yaml b/BMW-Dynatrace-config/CD_CSI/notification/notification.yaml new file mode 100644 index 00000000..db71fb78 --- /dev/null +++ b/BMW-Dynatrace-config/CD_CSI/notification/notification.yaml @@ -0,0 +1,51 @@ +config: +- CDCSI-PROD: msTeams.json +- CDCSI-INT: msTeams.json + +#Prod notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDCSI-PROD: +- name: CD_CSI PROD +- alertingProfile: CD_CSI/alerting-profile/CDCSI-PROD.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDCSI-PROD.EMEA-Prod: +- name: CD_CSI PROD +- alertingProfile: CD_CSI/alerting-profile/CDCSI-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDCSI-PROD.NA-Prod: +- name: CD_CSI PROD +- alertingProfile: CD_CSI/alerting-profile/CDCSI-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDCSI-PROD.CN-Prod: +- name: CD_CSI PROD +- alertingProfile: CD_CSI/alerting-profile/CDCSI-PROD.id +- webhook: https://empty +- skipDeployment: "false" + +#INT notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDCSI-INT: +- name: CD_CSI INT +- alertingProfile: CD_CSI/alerting-profile/CDCSI-INT.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDCSI-INT.EMEA-PreProd: +- name: CD_CSI INT +- alertingProfile: CD_CSI/alerting-profile/CDCSI-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDCSI-INT.NA-PreProd: +- name: CD_CSI INT +- alertingProfile: CD_CSI/alerting-profile/CDCSI-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDCSI-INT.CN-PreProd: +- name: CD_CSI INT +- alertingProfile: CD_CSI/alerting-profile/CDCSI-INT.id +- webhook: https://empty +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_CSI/synthetic-monitor/README.md b/BMW-Dynatrace-config/CD_CSI/synthetic-monitor/README.md new file mode 100644 index 00000000..1695924c --- /dev/null +++ b/BMW-Dynatrace-config/CD_CSI/synthetic-monitor/README.md @@ -0,0 +1,4 @@ + +### How to configure synthetics? + +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Synthetic+Monitors) page to configure your synthetics. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_CSI/synthetic-monitor/default.json b/BMW-Dynatrace-config/CD_CSI/synthetic-monitor/default.json new file mode 100644 index 00000000..cf83039b --- /dev/null +++ b/BMW-Dynatrace-config/CD_CSI/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_CSI/synthetic-monitor/synthetic-monitor.yaml b/BMW-Dynatrace-config/CD_CSI/synthetic-monitor/synthetic-monitor.yaml new file mode 100644 index 00000000..c01286b5 --- /dev/null +++ b/BMW-Dynatrace-config/CD_CSI/synthetic-monitor/synthetic-monitor.yaml @@ -0,0 +1,10 @@ +config: +- CSI: default.json + +CSI: +- name: CD_CSI - +- mzName: CD_CSI/management-zone/CDCSI.name +- mzId: CD_CSI/management-zone/CDCSI.id +- endpoint: +- location: +- skipDeployment: "true" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_Call-Handling-Backends/alerting-profile/NGTP.json b/BMW-Dynatrace-config/CD_Call-Handling-Backends/alerting-profile/NGTP.json deleted file mode 100644 index 711d97dc..00000000 --- a/BMW-Dynatrace-config/CD_Call-Handling-Backends/alerting-profile/NGTP.json +++ /dev/null @@ -1,122 +0,0 @@ -{ - "displayName": "{{.name}}", - "eventTypeFilters": [], - "managementZoneId": "{{.mzId}}", - "mzId": "{{.mzId}}", - "rules": [ - { - "delayInMinutes": 0, - "severityLevel": "AVAILABILITY", - "tagFilter": { - "includeMode": "INCLUDE_ANY", - "tagFilters": [ - { - "context": "CONTEXTLESS", - "key": "Component", - "value": "NGTP" - }, - { - "context": "CONTEXTLESS", - "key": "Component", - "value": "NGTP-CS" - } - ] - } - }, - { - "delayInMinutes": 10, - "severityLevel": "ERROR", - "tagFilter": { - "includeMode": "INCLUDE_ANY", - "tagFilters": [ - { - "context": "CONTEXTLESS", - "key": "Component", - "value": "NGTP" - }, - { - "context": "CONTEXTLESS", - "key": "Component", - "value": "NGTP-CS" - } - ] - } - }, - { - "delayInMinutes": 30, - "severityLevel": "PERFORMANCE", - "tagFilter": { - "includeMode": "INCLUDE_ANY", - "tagFilters": [ - { - "context": "CONTEXTLESS", - "key": "Component", - "value": "NGTP" - }, - { - "context": "CONTEXTLESS", - "key": "Component", - "value": "NGTP-CS" - } - ] - } - }, - { - "delayInMinutes": 30, - "severityLevel": "RESOURCE_CONTENTION", - "tagFilter": { - "includeMode": "INCLUDE_ANY", - "tagFilters": [ - { - "context": "CONTEXTLESS", - "key": "Component", - "value": "NGTP" - }, - { - "context": "CONTEXTLESS", - "key": "Component", - "value": "NGTP-CS" - } - ] - } - }, - { - "delayInMinutes": 10, - "severityLevel": "CUSTOM_ALERT", - "tagFilter": { - "includeMode": "INCLUDE_ANY", - "tagFilters": [ - { - "context": "CONTEXTLESS", - "key": "Component", - "value": "NGTP" - }, - { - "context": "CONTEXTLESS", - "key": "Component", - "value": "NGTP-CS" - } - ] - } - }, - { - "delayInMinutes": 0, - "severityLevel": "MONITORING_UNAVAILABLE", - "tagFilter": { - "includeMode": "INCLUDE_ANY", - "tagFilters": [ - { - "context": "CONTEXTLESS", - "key": "Component", - "value": "NGTP" - }, - { - "context": "CONTEXTLESS", - "key": "Component", - "value": "NGTP-CS" - } - ] - } - } - ] -} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_Call-Handling-Backends/alerting-profile/alerting-profile.yaml b/BMW-Dynatrace-config/CD_Call-Handling-Backends/alerting-profile/alerting-profile.yaml index 9016db4b..26decee1 100644 --- a/BMW-Dynatrace-config/CD_Call-Handling-Backends/alerting-profile/alerting-profile.yaml +++ b/BMW-Dynatrace-config/CD_Call-Handling-Backends/alerting-profile/alerting-profile.yaml @@ -1,12 +1,60 @@ config: -- CDCall-Handling-Backends: Call-Handling-Backends.json -- NGTP: NGTP.json +- CDCall-Handling-Backends-PROD: default.json +- CDCall-Handling-Backends-INT: default.json -CDCall-Handling-Backends: -- name: CD_Call-Handling-Backends/management-zone/CDCall-Handling-Backends.name +#Prod alerting profiles for EMEA/NA/CN +#Dry-run needed for all hubs +CDCall-Handling-Backends-PROD: +- name: CD_Call-Handling-Backends PROD - tag: Call-Handling-Backends - mzId: CD_Call-Handling-Backends/management-zone/CDCall-Handling-Backends.id +- env: PROD +- skipDeployment: "true" +#Configuration +CDCall-Handling-Backends-PROD.EMEA-Prod: +- name: CD_Call-Handling-Backends PROD +- tag: Call-Handling-Backends +- mzId: CD_Call-Handling-Backends/management-zone/CDCall-Handling-Backends.id +- env: PROD +- skipDeployment: "false" +CDCall-Handling-Backends-PROD.NA-Prod: +- name: CD_Call-Handling-Backends PROD +- tag: Call-Handling-Backends +- mzId: CD_Call-Handling-Backends/management-zone/CDCall-Handling-Backends.id +- env: PROD +- skipDeployment: "false" +CDCall-Handling-Backends-PROD.CN-Prod: +- name: CD_Call-Handling-Backends PROD +- tag: Call-Handling-Backends +- mzId: CD_Call-Handling-Backends/management-zone/CDCall-Handling-Backends.id +- env: PROD +- skipDeployment: "false" -NGTP: -- name: CD_Call-Handling-Backends NGTP/NGTP-CS -- mzId: CD_Call-Handling-Backends/management-zone/CDCall-Handling-Backends.id \ No newline at end of file + +#INT alerting profiles for EMEA/NA/CN +#Dry-run needed for all hubs +CDCall-Handling-Backends-INT: +- name: CD_Call-Handling-Backends INT +- tag: Call-Handling-Backends +- mzId: CD_Call-Handling-Backends/management-zone/CDCall-Handling-Backends.id +- env: INT +- skipDeployment: "true" +#Configuration +CDCall-Handling-Backends-INT.EMEA-PreProd: +- name: CD_Call-Handling-Backends INT +- tag: Call-Handling-Backends +- mzId: CD_Call-Handling-Backends/management-zone/CDCall-Handling-Backends.id +- env: INT +- skipDeployment: "false" +CDCall-Handling-Backends-INT.NA-PreProd: +- name: CD_Call-Handling-Backends INT +- tag: Call-Handling-Backends +- mzId: CD_Call-Handling-Backends/management-zone/CDCall-Handling-Backends.id +- env: INT +- skipDeployment: "false" +CDCall-Handling-Backends-INT.CN-PreProd: +- name: CD_Call-Handling-Backends INT +- tag: Call-Handling-Backends +- mzId: CD_Call-Handling-Backends/management-zone/CDCall-Handling-Backends.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_Call-Handling-Backends/alerting-profile/default.json b/BMW-Dynatrace-config/CD_Call-Handling-Backends/alerting-profile/default.json new file mode 100644 index 00000000..681a4c64 --- /dev/null +++ b/BMW-Dynatrace-config/CD_Call-Handling-Backends/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_Call-Handling-Backends/calculated-metrics-service/README.md b/BMW-Dynatrace-config/CD_Call-Handling-Backends/calculated-metrics-service/README.md new file mode 100644 index 00000000..0bf8efbc --- /dev/null +++ b/BMW-Dynatrace-config/CD_Call-Handling-Backends/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_Call-Handling-Backends/conditional-naming-processgroup/README.md b/BMW-Dynatrace-config/CD_Call-Handling-Backends/conditional-naming-processgroup/README.md new file mode 100644 index 00000000..f94196a5 --- /dev/null +++ b/BMW-Dynatrace-config/CD_Call-Handling-Backends/conditional-naming-processgroup/README.md @@ -0,0 +1,67 @@ +### Process Group Detection Rules and Naming + +#### Detection Rule or Naming? + +For the explanation, we're using a real example of the Infotainment application: + +!(PGNaming1)[../../../../img/PGNaming1.PNG] + +Before working with your dashboards and alerting profiles, an important task to do when working with Dynatrace is checking +the structure of your applications (process groups). You can do that clicking under *technologies* and filter using your +application Management Zone. + +In the picture above, there are two Process Groups called bon-information-prod. **If you see duplicated process groups like in** +**this case, you MUST follow this guideline** + +Next step would be to open both process groups and compare the metadata. In that way, you can identify if all process instances are +part of the same application or not. An easy way to do that is asking yourself: how many instances of my application do i have? + +If you have 4 instances in total and you're able to see 2 in one PG and other 2 in other PG it means that **they are part of the ** +**same application** + +Another situation could be that checking on the metadata, then you see that are **two different application** and Dynatrace is just naming +the process group in the same way + +*Same application* +- Problem: Dynatrace is creating two different process groups, what transalates in two separated services for the same application. Instead of +seeing all the traffic in one service, you will have it splitted and it will complicate your monitoring +- Solution: create a process group detection rule. Contact Dynatrace Expert + +*Different application* +- Problem: Dynatrace is just naming in the same way applications that are different. +- Solution: This case is less severe, since it can be fixed with a process group naming rule. + + +What about our example? +!(PGNaming2)[../../../../img/PGNaming2.PNG] +!(PGNaming3)[../../../../img/PGNaming3.PNG] + +Based on the feedback of the infotaiment team, each process group is a different application (microservice) and it's visible in the kubernetes container/workload +within the metadata of each Process Group. + +#### How to create a Process Group Detection Rule +1. Open the *conditional-naming-processgroup.yaml* file and create a rule that looks like this: +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName} +- tag: Infotainment +- skipDeployment: false +``` +The result of the rule will be renaming the PG to this: +``` +bon-information-prod ipa +bon-information-prod rsl +``` + +Other possible placeholders that you can use are for example: +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName/[^\\-]*$} +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesFullPodName/buffet-(.*?)-} +{ProcessGroup:DetectedName} - {HostGroup:Name/[^\\_]*$} +{ProcessGroup:KubernetesNamespace} +{ProcessGroup:CommandLineArgs/.*?\\-f\\s\\/www\\/(.*?)\\/generated\\/httpd\\.conf.*?} + +You can combine different ones. Check the (documentation)[link] for more \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_Call-Handling-Backends/conditional-naming-processgroup/conditional-naming-processgroup.yaml b/BMW-Dynatrace-config/CD_Call-Handling-Backends/conditional-naming-processgroup/conditional-naming-processgroup.yaml new file mode 100644 index 00000000..a879b07b --- /dev/null +++ b/BMW-Dynatrace-config/CD_Call-Handling-Backends/conditional-naming-processgroup/conditional-naming-processgroup.yaml @@ -0,0 +1,8 @@ +config: +- CDCall-Handling-Backends: template.json + +CDCall-Handling-Backends: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: Call-Handling-Backends +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_Call-Handling-Backends/conditional-naming-processgroup/template.json b/BMW-Dynatrace-config/CD_Call-Handling-Backends/conditional-naming-processgroup/template.json new file mode 100644 index 00000000..7c039808 --- /dev/null +++ b/BMW-Dynatrace-config/CD_Call-Handling-Backends/conditional-naming-processgroup/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "type": "PROCESS_GROUP" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_Call-Handling-Backends/conditional-naming-service/README.md b/BMW-Dynatrace-config/CD_Call-Handling-Backends/conditional-naming-service/README.md new file mode 100644 index 00000000..c34ef308 --- /dev/null +++ b/BMW-Dynatrace-config/CD_Call-Handling-Backends/conditional-naming-service/README.md @@ -0,0 +1,35 @@ +### Service Naming Rules + +A typical case could be that you access to *Transaction & Services* and you find two services that are exactly the same: +*DataDownloadV1* +*DataDownloadV1* + +If you drilldown into the service and you check in the process group, you may have a PROD and a E2E for each service. + +*Note: if you see that both process group are exactly the same, please contact a Dynatrace expert to create a Process* +*Group detection rule* + +In the case the PG are PROD and E2E, then we need to create a rule that looks like this: + +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {Service:DetectedName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +- tag: Infotainment +- skipDeployment: false +``` + +The rule will get the Service Detected Name (current name) and it will extract (with a regex) the part of the kubernetes namespace after the "-", so -prod or -e2e, resulting in: +*DataDownloadV1 - prod* +*DataDownloadV1 - e2e* + +Now, services will be easy to identify. + +You can create rules based on any property/metadata. Some other placeholder's eamples: +{Service:DatabaseName} - E2E +{Service:WebServiceName} - {ProcessGroup:Kubernetes:microservice} - {ProcessGroup:Kubernetes:environment} +{Service:DetectedName} - {ProcessGroup:KubernetesContainerName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +{Service:DetectedName} - {ProcessGroup:SpringBootProfileName/[^\\-]*$} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_Call-Handling-Backends/conditional-naming-service/conditional-naming-service.yaml b/BMW-Dynatrace-config/CD_Call-Handling-Backends/conditional-naming-service/conditional-naming-service.yaml new file mode 100644 index 00000000..a879b07b --- /dev/null +++ b/BMW-Dynatrace-config/CD_Call-Handling-Backends/conditional-naming-service/conditional-naming-service.yaml @@ -0,0 +1,8 @@ +config: +- CDCall-Handling-Backends: template.json + +CDCall-Handling-Backends: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: Call-Handling-Backends +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_Call-Handling-Backends/conditional-naming-service/template.json b/BMW-Dynatrace-config/CD_Call-Handling-Backends/conditional-naming-service/template.json new file mode 100644 index 00000000..5d4fac56 --- /dev/null +++ b/BMW-Dynatrace-config/CD_Call-Handling-Backends/conditional-naming-service/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "type": "SERVICE" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_Call-Handling-Backends/custom-service-java/README.md b/BMW-Dynatrace-config/CD_Call-Handling-Backends/custom-service-java/README.md new file mode 100644 index 00000000..5f35e5c1 --- /dev/null +++ b/BMW-Dynatrace-config/CD_Call-Handling-Backends/custom-service-java/README.md @@ -0,0 +1,4 @@ + +### How to configure custom services? + +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Custom+Services) page to configure your custom services. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_Call-Handling-Backends/custom-service-java/custom-service-java.yaml b/BMW-Dynatrace-config/CD_Call-Handling-Backends/custom-service-java/custom-service-java.yaml new file mode 100644 index 00000000..25f8a028 --- /dev/null +++ b/BMW-Dynatrace-config/CD_Call-Handling-Backends/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_Call-Handling-Backends/custom-service-java/template-1-1.json b/BMW-Dynatrace-config/CD_Call-Handling-Backends/custom-service-java/template-1-1.json new file mode 100644 index 00000000..b3003515 --- /dev/null +++ b/BMW-Dynatrace-config/CD_Call-Handling-Backends/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_Call-Handling-Backends/dashboard/README.md b/BMW-Dynatrace-config/CD_Call-Handling-Backends/dashboard/README.md new file mode 100644 index 00000000..dffcdc8a --- /dev/null +++ b/BMW-Dynatrace-config/CD_Call-Handling-Backends/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_Call-Handling-Backends/dashboard/dashboard.yaml b/BMW-Dynatrace-config/CD_Call-Handling-Backends/dashboard/dashboard.yaml new file mode 100644 index 00000000..366b2653 --- /dev/null +++ b/BMW-Dynatrace-config/CD_Call-Handling-Backends/dashboard/dashboard.yaml @@ -0,0 +1,127 @@ +config: +- CDCall-Handling-Backends-PROD: default.json +- CDCall-Handling-Backends-E2E: default.json +- CDCall-Handling-Backends-INT: default.json +- CDCall-Handling-Backends-TEST: default.json + +#PROD dashboards for EMEA/NA/CN Prod +#Dry-run needed for all hubs +CDCall-Handling-Backends-PROD: +- name: CD_Call-Handling-Backends PROD +- mzName: CD_Call-Handling-Backends/management-zone/CDCall-Handling-Backends.name +- mzId: CD_Call-Handling-Backends/management-zone/CDCall-Handling-Backends.id +- env: PROD +- skipDeployment: "true" +#Configuration +CDCall-Handling-Backends-PROD.EMEA-Prod: +- name: CD_Call-Handling-Backends PROD +- mzName: CD_Call-Handling-Backends/management-zone/CDCall-Handling-Backends.name +- mzId: CD_Call-Handling-Backends/management-zone/CDCall-Handling-Backends.id +- tag: Call-Handling-Backends +- env: PROD +- skipDeployment: "false" +CDCall-Handling-Backends-PROD.NA-Prod: +- name: CD_Call-Handling-Backends PROD +- mzName: CD_Call-Handling-Backends/management-zone/CDCall-Handling-Backends.name +- mzId: CD_Call-Handling-Backends/management-zone/CDCall-Handling-Backends.id +- tag: Call-Handling-Backends +- env: PROD +- skipDeployment: "false" +CDCall-Handling-Backends-PROD.CN-Prod: +- name: CD_Call-Handling-Backends PROD +- mzName: CD_Call-Handling-Backends/management-zone/CDCall-Handling-Backends.name +- mzId: CD_Call-Handling-Backends/management-zone/CDCall-Handling-Backends.id +- tag: Call-Handling-Backends +- env: PROD +- skipDeployment: "false" + +#E2E dashboards for EMEA/NA/CN E2E +#Dry-run needed for all hubs +CDCall-Handling-Backends-E2E: +- name: CD_Call-Handling-Backends E2E +- mzName: CD_Call-Handling-Backends/management-zone/CDCall-Handling-Backends.name +- mzId: CD_Call-Handling-Backends/management-zone/CDCall-Handling-Backends.id +- env: E2E +- skipDeployment: "true" +#Configuration +CDCall-Handling-Backends-E2E.EMEA-Prod: +- name: CD_Call-Handling-Backends E2E +- mzName: CD_Call-Handling-Backends/management-zone/CDCall-Handling-Backends.name +- mzId: CD_Call-Handling-Backends/management-zone/CDCall-Handling-Backends.id +- env: E2E +- tag: Call-Handling-Backends +- skipDeployment: "true" +CDCall-Handling-Backends-E2E.NA-Prod: +- name: CD_Call-Handling-Backends E2E +- mzName: CD_Call-Handling-Backends/management-zone/CDCall-Handling-Backends.name +- mzId: CD_Call-Handling-Backends/management-zone/CDCall-Handling-Backends.id +- env: E2E +- tag: Call-Handling-Backends +- skipDeployment: "true" +CDCall-Handling-Backends-E2E.CN-Prod: +- name: CD_Call-Handling-Backends E2E +- mzName: CD_Call-Handling-Backends/management-zone/CDCall-Handling-Backends.name +- mzId: CD_Call-Handling-Backends/management-zone/CDCall-Handling-Backends.id +- env: E2E +- tag: Call-Handling-Backends +- skipDeployment: "true" + +#INT dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDCall-Handling-Backends-INT: +- name: CD_Call-Handling-Backends INT +- mzName: CD_Call-Handling-Backends/management-zone/CDCall-Handling-Backends.name +- mzId: CD_Call-Handling-Backends/management-zone/CDCall-Handling-Backends.id +- env: INT +- tag: Call-Handling-Backends +- skipDeployment: "true" +#Configuration +CDCall-Handling-Backends-INT.EMEA-PreProd: +- name: CD_Call-Handling-Backends INT +- mzName: CD_Call-Handling-Backends/management-zone/CDCall-Handling-Backends.name +- mzId: CD_Call-Handling-Backends/management-zone/CDCall-Handling-Backends.id +- env: INT +- tag: Call-Handling-Backends +- skipDeployment: "false" +CDCall-Handling-Backends-INT.NA-PreProd: +- name: CD_Call-Handling-Backends INT +- mzName: CD_Call-Handling-Backends/management-zone/CDCall-Handling-Backends.name +- mzId: CD_Call-Handling-Backends/management-zone/CDCall-Handling-Backends.id +- env: INT +- skipDeployment: "false" +CDCall-Handling-Backends-INT.CN-PreProd: +- name: CD_Call-Handling-Backends INT +- mzName: CD_Call-Handling-Backends/management-zone/CDCall-Handling-Backends.name +- mzId: CD_Call-Handling-Backends/management-zone/CDCall-Handling-Backends.id +- env: INT +- skipDeployment: "false" + +#TEST dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDCall-Handling-Backends-TEST: +- name: CD_Call-Handling-Backends TEST +- mzName: CD_Call-Handling-Backends/management-zone/CDCall-Handling-Backends.name +- mzId: CD_Call-Handling-Backends/management-zone/CDCall-Handling-Backends.id +- tag: Call-Handling-Backends +- env: TEST +- skipDeployment: "true" +#Configuration +CDCall-Handling-Backends-TEST.EMEA-PreProd: +- name: CD_Call-Handling-Backends TEST +- mzName: CD_Call-Handling-Backends/management-zone/CDCall-Handling-Backends.name +- mzId: CD_Call-Handling-Backends/management-zone/CDCall-Handling-Backends.id +- tag: Call-Handling-Backends +- env: TEST +- skipDeployment: "false" +CDCall-Handling-Backends-TEST.NA-PreProd: +- name: CD_Call-Handling-Backends TEST +- mzName: CD_Call-Handling-Backends/management-zone/CDCall-Handling-Backends.name +- mzId: CD_Call-Handling-Backends/management-zone/CDCall-Handling-Backends.id +- env: TEST +- skipDeployment: "false" +CDCall-Handling-Backends-TEST.CN-PreProd: +- name: CD_Call-Handling-Backends TEST +- mzName: CD_Call-Handling-Backends/management-zone/CDCall-Handling-Backends.name +- mzId: CD_Call-Handling-Backends/management-zone/CDCall-Handling-Backends.id +- env: TEST +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_Call-Handling-Backends/dashboard/default.json b/BMW-Dynatrace-config/CD_Call-Handling-Backends/dashboard/default.json new file mode 100644 index 00000000..6c685810 --- /dev/null +++ b/BMW-Dynatrace-config/CD_Call-Handling-Backends/dashboard/default.json @@ -0,0 +1,308 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.214.107.20210407-223952" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": true, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "timeframe": "-24h to now" + }, + "tags": [ + "{{.tag}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 228, + "left": 38, + "width": 1064, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Failure rate (HTTP 4xx/5xx errors)", + "defaultName": "Custom chart", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [ + { + "metric": "builtin:service.errors.fourxx.rate", + "aggregation": "AVG", + "type": "BAR", + "entityType": "SERVICE", + "dimensions": [], + "sortAscending": false, + "sortColumn": false, + "aggregationRate": "TOTAL" + }, + { + "metric": "builtin:service.errors.fivexx.rate", + "aggregation": "AVG", + "type": "BAR", + "entityType": "SERVICE", + "dimensions": [], + "sortAscending": false, + "sortColumn": true, + "aggregationRate": "TOTAL" + } + ], + "resultMetadata": { + "nullbuiltin:service.errors.fivexx.rate|AVG|TOTAL|BAR|SERVICE": { + "lastModified": 1617956393463, + "customColor": "#ff0000" + }, + "nullbuiltin:service.errors.fourxx.rate|AVG|TOTAL|BAR|SERVICE": { + "lastModified": 1617956441725, + "customColor": "#fff29a" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:{{.env}}", + "Component:{{.tag}}" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 38, + "left": 950, + "width": 152, + "height": 152 + }, + "tileFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + } + }, + { + "name": "Overall Health", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 0, + "left": 38, + "width": 1064, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 532, + "left": 38, + "width": 1064, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 570, + "left": 38, + "width": 1064, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Request Count and Number of Errors", + "defaultName": "Custom chart", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [ + { + "metric": "builtin:service.response.time", + "aggregation": "AVG", + "type": "LINE", + "entityType": "SERVICE", + "dimensions": [], + "sortAscending": false, + "sortColumn": false, + "aggregationRate": "TOTAL" + }, + { + "metric": "builtin:service.requestCount.total", + "aggregation": "NONE", + "type": "BAR", + "entityType": "SERVICE", + "dimensions": [], + "sortAscending": false, + "sortColumn": false, + "aggregationRate": "TOTAL" + }, + { + "metric": "builtin:service.errors.total.count", + "aggregation": "NONE", + "type": "BAR", + "entityType": "SERVICE", + "dimensions": [], + "sortAscending": false, + "sortColumn": true, + "aggregationRate": "TOTAL" + } + ], + "resultMetadata": { + "nullbuiltin:service.requestCount.total|NONE|TOTAL|BAR|SERVICE": { + "lastModified": 1595275720776, + "customColor": "#008cdb" + }, + "nullbuiltin:service.errors.total.count|NONE|TOTAL|BAR|SERVICE": { + "lastModified": 1595275955999, + "customColor": "#ef651f" + }, + "nullbuiltin:service.response.time|AVG|TOTAL|LINE|SERVICE": { + "lastModified": 1595275686773, + "customColor": "#b4e5f9" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:{{.env}}", + "Component:{{.tag}}" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 190, + "left": 38, + "width": 1064, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 38, + "left": 646, + "width": 190, + "height": 152 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:{{.env}}", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 38, + "left": 342, + "width": 190, + "height": 152 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:{{.env}}", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 190, + "height": 152 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:{{.env}}", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_Call-Handling-Backends/management-zone/CDCall-Handling-Backends.json b/BMW-Dynatrace-config/CD_Call-Handling-Backends/management-zone/CDCall-Handling-Backends.json deleted file mode 100644 index ffcef107..00000000 --- a/BMW-Dynatrace-config/CD_Call-Handling-Backends/management-zone/CDCall-Handling-Backends.json +++ /dev/null @@ -1,55 +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" - } - } - ], - "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_Call-Handling-Backends/management-zone/README.md b/BMW-Dynatrace-config/CD_Call-Handling-Backends/management-zone/README.md new file mode 100644 index 00000000..3244b3e6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_Call-Handling-Backends/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_Call-Handling-Backends/management-zone/default.json b/BMW-Dynatrace-config/CD_Call-Handling-Backends/management-zone/default.json new file mode 100644 index 00000000..bffa0c3b --- /dev/null +++ b/BMW-Dynatrace-config/CD_Call-Handling-Backends/management-zone/default.json @@ -0,0 +1,114 @@ +{ + "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" + }, + { + "conditions": [ + { + "comparisonInfo": { + "caseSensitive": true, + "negate": false, + "operator": "CONTAINS", + "type": "STRING", + "value": "{{.tag}}" + }, + "key": { + "attribute": "CLOUD_APPLICATION_NAMESPACE_NAME" + } + } + ], + "enabled": true, + "propagationTypes": [], + "type": "CLOUD_APPLICATION_NAMESPACE" + }, + { + "conditions": [ + { + "comparisonInfo": { + "caseSensitive": true, + "negate": false, + "operator": "CONTAINS", + "type": "STRING", + "value": "{{.tag}}" + }, + "key": { + "attribute": "CLOUD_APPLICATION_NAME" + } + } + ], + "enabled": true, + "propagationTypes": [], + "type": "CLOUD_APPLICATION" + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_Call-Handling-Backends/management-zone/management-zone.yaml b/BMW-Dynatrace-config/CD_Call-Handling-Backends/management-zone/management-zone.yaml index 846191ab..7a7c0e19 100644 --- a/BMW-Dynatrace-config/CD_Call-Handling-Backends/management-zone/management-zone.yaml +++ b/BMW-Dynatrace-config/CD_Call-Handling-Backends/management-zone/management-zone.yaml @@ -1,20 +1,6 @@ -CDCall-Handling-Backends.CN-PreProd: -- name: CD_Call-Handling-Backends -- tag: Call-Handling-Backends -CDCall-Handling-Backends.CN-Prod: -- name: CD_Call-Handling-Backends -- tag: Call-Handling-Backends -CDCall-Handling-Backends.EMEA-PreProd: -- name: CD_Call-Handling-Backends -- tag: Call-Handling-Backends -CDCall-Handling-Backends.EMEA-Prod: -- name: CD_Call-Handling-Backends -- tag: Call-Handling-Backends -CDCall-Handling-Backends.NA-PreProd: -- name: CD_Call-Handling-Backends -- tag: Call-Handling-Backends -CDCall-Handling-Backends.NA-Prod: -- name: CD_Call-Handling-Backends -- tag: Call-Handling-Backends config: -- CDCall-Handling-Backends: CDCall-Handling-Backends.json +- CDCall-Handling-Backends: default.json + +CDCall-Handling-Backends: +- name: CD_Call-Handling-Backends +- tag: Call-Handling-Backends diff --git a/BMW-Dynatrace-config/CD_Call-Handling-Backends/notification/README.md b/BMW-Dynatrace-config/CD_Call-Handling-Backends/notification/README.md new file mode 100644 index 00000000..e1a6af84 --- /dev/null +++ b/BMW-Dynatrace-config/CD_Call-Handling-Backends/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_Call-Handling-Backends/notification/email.json b/BMW-Dynatrace-config/CD_Call-Handling-Backends/notification/email.json new file mode 100644 index 00000000..486642a7 --- /dev/null +++ b/BMW-Dynatrace-config/CD_Call-Handling-Backends/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_Call-Handling-Backends/notification/msTeams.json b/BMW-Dynatrace-config/CD_Call-Handling-Backends/notification/msTeams.json new file mode 100644 index 00000000..33e92cf6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_Call-Handling-Backends/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_Call-Handling-Backends/notification/notification.yaml b/BMW-Dynatrace-config/CD_Call-Handling-Backends/notification/notification.yaml index 21913baf..e7375a7a 100644 --- a/BMW-Dynatrace-config/CD_Call-Handling-Backends/notification/notification.yaml +++ b/BMW-Dynatrace-config/CD_Call-Handling-Backends/notification/notification.yaml @@ -1,32 +1,51 @@ config: -- NGTP-MSTeams: NGTP-MSTeams.json +- CDCall-Handling-Backends-PROD: msTeams.json +- CDCall-Handling-Backends-INT: msTeams.json -NGTP-MSTeams: -- name: NGTP - MS Teams -- apid: "/CD_Call-Handling-Backends/alerting-profile/NGTP.id" -- webhook: "https://bmwgroup.webhook.office.com/webhookb2/e1e947c6-5367-4b5f-9659-704ace229b86@ce849bab-cc1c-465b-b62e-18f07c9ac198/IncomingWebhook/2915d0656bd74b94aee2a97a100fd4ea/58f172a5-112a-443d-a7c1-ea37961421f0" +#Prod notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDCall-Handling-Backends-PROD: +- name: CD_Call-Handling-Backends PROD +- alertingProfile: CD_Call-Handling-Backends/alerting-profile/CDCall-Handling-Backends-PROD.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDCall-Handling-Backends-PROD.EMEA-Prod: +- name: CD_Call-Handling-Backends PROD +- alertingProfile: CD_Call-Handling-Backends/alerting-profile/CDCall-Handling-Backends-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDCall-Handling-Backends-PROD.NA-Prod: +- name: CD_Call-Handling-Backends PROD +- alertingProfile: CD_Call-Handling-Backends/alerting-profile/CDCall-Handling-Backends-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDCall-Handling-Backends-PROD.CN-Prod: +- name: CD_Call-Handling-Backends PROD +- alertingProfile: CD_Call-Handling-Backends/alerting-profile/CDCall-Handling-Backends-PROD.id +- webhook: https://empty +- skipDeployment: "false" -#NGTP-MSTeams.EMEA-PreProd: -#- name: NGTP - MS Teams -#- apid: "/CD_ASBC-RSU/alerting-profile/NGTP.id" -#- webhook: - -#NGTP-MSTeams.NA-Prod: -#- name: NGTP - MS Teams -#- apid: "/CD_ASBC-RSU/alerting-profile/NGTP.id" -#- webhook: - -#NGTP-MSTeams.NA-Prod: -#- name: NGTP - MS Teams -#- apid: "/CD_ASBC-RSU/alerting-profile/NGTP.id" -#- webhook: - -#NGTP-MSTeams.CN-Prod: -#- name: NGTP - MS Teams -#- apid: "/CD_ASBC-RSU/alerting-profile/NGTP.id" -#- webhook: - -#NGTP-MSTeams.CN-PreProd: -#- name: NGTP - MS Teams -#- apid: "/CD_ASBC-RSU/alerting-profile/NGTP.id" -# webhook: \ No newline at end of file +#INT notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDCall-Handling-Backends-INT: +- name: CD_Call-Handling-Backends INT +- alertingProfile: CD_Call-Handling-Backends/alerting-profile/CDCall-Handling-Backends-INT.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDCall-Handling-Backends-INT.EMEA-PreProd: +- name: CD_Call-Handling-Backends INT +- alertingProfile: CD_Call-Handling-Backends/alerting-profile/CDCall-Handling-Backends-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDCall-Handling-Backends-INT.NA-PreProd: +- name: CD_Call-Handling-Backends INT +- alertingProfile: CD_Call-Handling-Backends/alerting-profile/CDCall-Handling-Backends-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDCall-Handling-Backends-INT.CN-PreProd: +- name: CD_Call-Handling-Backends INT +- alertingProfile: CD_Call-Handling-Backends/alerting-profile/CDCall-Handling-Backends-INT.id +- webhook: https://empty +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_Call-Handling-Backends/synthetic-monitor/README.md b/BMW-Dynatrace-config/CD_Call-Handling-Backends/synthetic-monitor/README.md new file mode 100644 index 00000000..1695924c --- /dev/null +++ b/BMW-Dynatrace-config/CD_Call-Handling-Backends/synthetic-monitor/README.md @@ -0,0 +1,4 @@ + +### How to configure synthetics? + +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Synthetic+Monitors) page to configure your synthetics. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_Call-Handling-Backends/synthetic-monitor/default.json b/BMW-Dynatrace-config/CD_Call-Handling-Backends/synthetic-monitor/default.json new file mode 100644 index 00000000..cf83039b --- /dev/null +++ b/BMW-Dynatrace-config/CD_Call-Handling-Backends/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_Call-Handling-Backends/synthetic-monitor/synthetic-monitor.yaml b/BMW-Dynatrace-config/CD_Call-Handling-Backends/synthetic-monitor/synthetic-monitor.yaml new file mode 100644 index 00000000..14683b9c --- /dev/null +++ b/BMW-Dynatrace-config/CD_Call-Handling-Backends/synthetic-monitor/synthetic-monitor.yaml @@ -0,0 +1,10 @@ +config: +- Call-Handling-Backends: default.json + +Call-Handling-Backends: +- name: CD_Call-Handling-Backends - +- mzName: CD_Call-Handling-Backends/management-zone/CDCall-Handling-Backends.name +- mzId: CD_Call-Handling-Backends/management-zone/CDCall-Handling-Backends.id +- endpoint: +- location: +- skipDeployment: "true" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_CallCenterClient/alerting-profile/alerting-profile.yaml b/BMW-Dynatrace-config/CD_CallCenterClient/alerting-profile/alerting-profile.yaml new file mode 100644 index 00000000..6a834aa1 --- /dev/null +++ b/BMW-Dynatrace-config/CD_CallCenterClient/alerting-profile/alerting-profile.yaml @@ -0,0 +1,60 @@ +config: +- CDCallCenterClient-PROD: default.json +- CDCallCenterClient-INT: default.json + +#Prod alerting profiles for EMEA/NA/CN +#Dry-run needed for all hubs +CDCallCenterClient-PROD: +- name: CD_CallCenterClient PROD +- tag: CallCenterClient +- mzId: CD_CallCenterClient/management-zone/CDCallCenterClient.id +- env: PROD +- skipDeployment: "true" +#Configuration +CDCallCenterClient-PROD.EMEA-Prod: +- name: CD_CallCenterClient PROD +- tag: CallCenterClient +- mzId: CD_CallCenterClient/management-zone/CDCallCenterClient.id +- env: PROD +- skipDeployment: "false" +CDCallCenterClient-PROD.NA-Prod: +- name: CD_CallCenterClient PROD +- tag: CallCenterClient +- mzId: CD_CallCenterClient/management-zone/CDCallCenterClient.id +- env: PROD +- skipDeployment: "false" +CDCallCenterClient-PROD.CN-Prod: +- name: CD_CallCenterClient PROD +- tag: CallCenterClient +- mzId: CD_CallCenterClient/management-zone/CDCallCenterClient.id +- env: PROD +- skipDeployment: "false" + + +#INT alerting profiles for EMEA/NA/CN +#Dry-run needed for all hubs +CDCallCenterClient-INT: +- name: CD_CallCenterClient INT +- tag: CallCenterClient +- mzId: CD_CallCenterClient/management-zone/CDCallCenterClient.id +- env: INT +- skipDeployment: "true" +#Configuration +CDCallCenterClient-INT.EMEA-PreProd: +- name: CD_CallCenterClient INT +- tag: CallCenterClient +- mzId: CD_CallCenterClient/management-zone/CDCallCenterClient.id +- env: INT +- skipDeployment: "false" +CDCallCenterClient-INT.NA-PreProd: +- name: CD_CallCenterClient INT +- tag: CallCenterClient +- mzId: CD_CallCenterClient/management-zone/CDCallCenterClient.id +- env: INT +- skipDeployment: "false" +CDCallCenterClient-INT.CN-PreProd: +- name: CD_CallCenterClient INT +- tag: CallCenterClient +- mzId: CD_CallCenterClient/management-zone/CDCallCenterClient.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_CallCenterClient/alerting-profile/default.json b/BMW-Dynatrace-config/CD_CallCenterClient/alerting-profile/default.json new file mode 100644 index 00000000..681a4c64 --- /dev/null +++ b/BMW-Dynatrace-config/CD_CallCenterClient/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_CallCenterClient/calculated-metrics-service/README.md b/BMW-Dynatrace-config/CD_CallCenterClient/calculated-metrics-service/README.md new file mode 100644 index 00000000..0bf8efbc --- /dev/null +++ b/BMW-Dynatrace-config/CD_CallCenterClient/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_CallCenterClient/conditional-naming-processgroup/README.md b/BMW-Dynatrace-config/CD_CallCenterClient/conditional-naming-processgroup/README.md new file mode 100644 index 00000000..f94196a5 --- /dev/null +++ b/BMW-Dynatrace-config/CD_CallCenterClient/conditional-naming-processgroup/README.md @@ -0,0 +1,67 @@ +### Process Group Detection Rules and Naming + +#### Detection Rule or Naming? + +For the explanation, we're using a real example of the Infotainment application: + +!(PGNaming1)[../../../../img/PGNaming1.PNG] + +Before working with your dashboards and alerting profiles, an important task to do when working with Dynatrace is checking +the structure of your applications (process groups). You can do that clicking under *technologies* and filter using your +application Management Zone. + +In the picture above, there are two Process Groups called bon-information-prod. **If you see duplicated process groups like in** +**this case, you MUST follow this guideline** + +Next step would be to open both process groups and compare the metadata. In that way, you can identify if all process instances are +part of the same application or not. An easy way to do that is asking yourself: how many instances of my application do i have? + +If you have 4 instances in total and you're able to see 2 in one PG and other 2 in other PG it means that **they are part of the ** +**same application** + +Another situation could be that checking on the metadata, then you see that are **two different application** and Dynatrace is just naming +the process group in the same way + +*Same application* +- Problem: Dynatrace is creating two different process groups, what transalates in two separated services for the same application. Instead of +seeing all the traffic in one service, you will have it splitted and it will complicate your monitoring +- Solution: create a process group detection rule. Contact Dynatrace Expert + +*Different application* +- Problem: Dynatrace is just naming in the same way applications that are different. +- Solution: This case is less severe, since it can be fixed with a process group naming rule. + + +What about our example? +!(PGNaming2)[../../../../img/PGNaming2.PNG] +!(PGNaming3)[../../../../img/PGNaming3.PNG] + +Based on the feedback of the infotaiment team, each process group is a different application (microservice) and it's visible in the kubernetes container/workload +within the metadata of each Process Group. + +#### How to create a Process Group Detection Rule +1. Open the *conditional-naming-processgroup.yaml* file and create a rule that looks like this: +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName} +- tag: Infotainment +- skipDeployment: false +``` +The result of the rule will be renaming the PG to this: +``` +bon-information-prod ipa +bon-information-prod rsl +``` + +Other possible placeholders that you can use are for example: +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName/[^\\-]*$} +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesFullPodName/buffet-(.*?)-} +{ProcessGroup:DetectedName} - {HostGroup:Name/[^\\_]*$} +{ProcessGroup:KubernetesNamespace} +{ProcessGroup:CommandLineArgs/.*?\\-f\\s\\/www\\/(.*?)\\/generated\\/httpd\\.conf.*?} + +You can combine different ones. Check the (documentation)[link] for more \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_CallCenterClient/conditional-naming-processgroup/conditional-naming-processgroup.yaml b/BMW-Dynatrace-config/CD_CallCenterClient/conditional-naming-processgroup/conditional-naming-processgroup.yaml new file mode 100644 index 00000000..ee09e53f --- /dev/null +++ b/BMW-Dynatrace-config/CD_CallCenterClient/conditional-naming-processgroup/conditional-naming-processgroup.yaml @@ -0,0 +1,8 @@ +config: +- CDCallCenterClient: template.json + +CDCallCenterClient: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: CallCenterClient +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_CallCenterClient/conditional-naming-processgroup/template.json b/BMW-Dynatrace-config/CD_CallCenterClient/conditional-naming-processgroup/template.json new file mode 100644 index 00000000..7c039808 --- /dev/null +++ b/BMW-Dynatrace-config/CD_CallCenterClient/conditional-naming-processgroup/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "type": "PROCESS_GROUP" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_CallCenterClient/conditional-naming-service/README.md b/BMW-Dynatrace-config/CD_CallCenterClient/conditional-naming-service/README.md new file mode 100644 index 00000000..c34ef308 --- /dev/null +++ b/BMW-Dynatrace-config/CD_CallCenterClient/conditional-naming-service/README.md @@ -0,0 +1,35 @@ +### Service Naming Rules + +A typical case could be that you access to *Transaction & Services* and you find two services that are exactly the same: +*DataDownloadV1* +*DataDownloadV1* + +If you drilldown into the service and you check in the process group, you may have a PROD and a E2E for each service. + +*Note: if you see that both process group are exactly the same, please contact a Dynatrace expert to create a Process* +*Group detection rule* + +In the case the PG are PROD and E2E, then we need to create a rule that looks like this: + +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {Service:DetectedName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +- tag: Infotainment +- skipDeployment: false +``` + +The rule will get the Service Detected Name (current name) and it will extract (with a regex) the part of the kubernetes namespace after the "-", so -prod or -e2e, resulting in: +*DataDownloadV1 - prod* +*DataDownloadV1 - e2e* + +Now, services will be easy to identify. + +You can create rules based on any property/metadata. Some other placeholder's eamples: +{Service:DatabaseName} - E2E +{Service:WebServiceName} - {ProcessGroup:Kubernetes:microservice} - {ProcessGroup:Kubernetes:environment} +{Service:DetectedName} - {ProcessGroup:KubernetesContainerName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +{Service:DetectedName} - {ProcessGroup:SpringBootProfileName/[^\\-]*$} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_CallCenterClient/conditional-naming-service/conditional-naming-service.yaml b/BMW-Dynatrace-config/CD_CallCenterClient/conditional-naming-service/conditional-naming-service.yaml new file mode 100644 index 00000000..ee09e53f --- /dev/null +++ b/BMW-Dynatrace-config/CD_CallCenterClient/conditional-naming-service/conditional-naming-service.yaml @@ -0,0 +1,8 @@ +config: +- CDCallCenterClient: template.json + +CDCallCenterClient: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: CallCenterClient +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_CallCenterClient/conditional-naming-service/template.json b/BMW-Dynatrace-config/CD_CallCenterClient/conditional-naming-service/template.json new file mode 100644 index 00000000..5d4fac56 --- /dev/null +++ b/BMW-Dynatrace-config/CD_CallCenterClient/conditional-naming-service/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "type": "SERVICE" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_CallCenterClient/custom-service-java/README.md b/BMW-Dynatrace-config/CD_CallCenterClient/custom-service-java/README.md new file mode 100644 index 00000000..5f35e5c1 --- /dev/null +++ b/BMW-Dynatrace-config/CD_CallCenterClient/custom-service-java/README.md @@ -0,0 +1,4 @@ + +### How to configure custom services? + +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Custom+Services) page to configure your custom services. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_CallCenterClient/custom-service-java/custom-service-java.yaml b/BMW-Dynatrace-config/CD_CallCenterClient/custom-service-java/custom-service-java.yaml new file mode 100644 index 00000000..25f8a028 --- /dev/null +++ b/BMW-Dynatrace-config/CD_CallCenterClient/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_CallCenterClient/custom-service-java/template-1-1.json b/BMW-Dynatrace-config/CD_CallCenterClient/custom-service-java/template-1-1.json new file mode 100644 index 00000000..b3003515 --- /dev/null +++ b/BMW-Dynatrace-config/CD_CallCenterClient/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_CallCenterClient/dashboard/README.md b/BMW-Dynatrace-config/CD_CallCenterClient/dashboard/README.md new file mode 100644 index 00000000..dffcdc8a --- /dev/null +++ b/BMW-Dynatrace-config/CD_CallCenterClient/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_CallCenterClient/dashboard/dashboard.yaml b/BMW-Dynatrace-config/CD_CallCenterClient/dashboard/dashboard.yaml new file mode 100644 index 00000000..89a4e108 --- /dev/null +++ b/BMW-Dynatrace-config/CD_CallCenterClient/dashboard/dashboard.yaml @@ -0,0 +1,127 @@ +config: +- CDCallCenterClient-PROD: default.json +- CDCallCenterClient-E2E: default.json +- CDCallCenterClient-INT: default.json +- CDCallCenterClient-TEST: default.json + +#PROD dashboards for EMEA/NA/CN Prod +#Dry-run needed for all hubs +CDCallCenterClient-PROD: +- name: CD_CallCenterClient PROD +- mzName: CD_CallCenterClient/management-zone/CDCallCenterClient.name +- mzId: CD_CallCenterClient/management-zone/CDCallCenterClient.id +- env: PROD +- skipDeployment: "true" +#Configuration +CDCallCenterClient-PROD.EMEA-Prod: +- name: CD_CallCenterClient PROD +- mzName: CD_CallCenterClient/management-zone/CDCallCenterClient.name +- mzId: CD_CallCenterClient/management-zone/CDCallCenterClient.id +- tag: CallCenterClient +- env: PROD +- skipDeployment: "false" +CDCallCenterClient-PROD.NA-Prod: +- name: CD_CallCenterClient PROD +- mzName: CD_CallCenterClient/management-zone/CDCallCenterClient.name +- mzId: CD_CallCenterClient/management-zone/CDCallCenterClient.id +- tag: CallCenterClient +- env: PROD +- skipDeployment: "false" +CDCallCenterClient-PROD.CN-Prod: +- name: CD_CallCenterClient PROD +- mzName: CD_CallCenterClient/management-zone/CDCallCenterClient.name +- mzId: CD_CallCenterClient/management-zone/CDCallCenterClient.id +- tag: CallCenterClient +- env: PROD +- skipDeployment: "false" + +#E2E dashboards for EMEA/NA/CN E2E +#Dry-run needed for all hubs +CDCallCenterClient-E2E: +- name: CD_CallCenterClient E2E +- mzName: CD_CallCenterClient/management-zone/CDCallCenterClient.name +- mzId: CD_CallCenterClient/management-zone/CDCallCenterClient.id +- env: E2E +- skipDeployment: "true" +#Configuration +CDCallCenterClient-E2E.EMEA-Prod: +- name: CD_CallCenterClient E2E +- mzName: CD_CallCenterClient/management-zone/CDCallCenterClient.name +- mzId: CD_CallCenterClient/management-zone/CDCallCenterClient.id +- env: E2E +- tag: CallCenterClient +- skipDeployment: "true" +CDCallCenterClient-E2E.NA-Prod: +- name: CD_CallCenterClient E2E +- mzName: CD_CallCenterClient/management-zone/CDCallCenterClient.name +- mzId: CD_CallCenterClient/management-zone/CDCallCenterClient.id +- env: E2E +- tag: CallCenterClient +- skipDeployment: "true" +CDCallCenterClient-E2E.CN-Prod: +- name: CD_CallCenterClient E2E +- mzName: CD_CallCenterClient/management-zone/CDCallCenterClient.name +- mzId: CD_CallCenterClient/management-zone/CDCallCenterClient.id +- env: E2E +- tag: CallCenterClient +- skipDeployment: "true" + +#INT dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDCallCenterClient-INT: +- name: CD_CallCenterClient INT +- mzName: CD_CallCenterClient/management-zone/CDCallCenterClient.name +- mzId: CD_CallCenterClient/management-zone/CDCallCenterClient.id +- env: INT +- tag: CallCenterClient +- skipDeployment: "true" +#Configuration +CDCallCenterClient-INT.EMEA-PreProd: +- name: CD_CallCenterClient INT +- mzName: CD_CallCenterClient/management-zone/CDCallCenterClient.name +- mzId: CD_CallCenterClient/management-zone/CDCallCenterClient.id +- env: INT +- tag: CallCenterClient +- skipDeployment: "false" +CDCallCenterClient-INT.NA-PreProd: +- name: CD_CallCenterClient INT +- mzName: CD_CallCenterClient/management-zone/CDCallCenterClient.name +- mzId: CD_CallCenterClient/management-zone/CDCallCenterClient.id +- env: INT +- skipDeployment: "false" +CDCallCenterClient-INT.CN-PreProd: +- name: CD_CallCenterClient INT +- mzName: CD_CallCenterClient/management-zone/CDCallCenterClient.name +- mzId: CD_CallCenterClient/management-zone/CDCallCenterClient.id +- env: INT +- skipDeployment: "false" + +#TEST dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDCallCenterClient-TEST: +- name: CD_CallCenterClient TEST +- mzName: CD_CallCenterClient/management-zone/CDCallCenterClient.name +- mzId: CD_CallCenterClient/management-zone/CDCallCenterClient.id +- tag: CallCenterClient +- env: TEST +- skipDeployment: "true" +#Configuration +CDCallCenterClient-TEST.EMEA-PreProd: +- name: CD_CallCenterClient TEST +- mzName: CD_CallCenterClient/management-zone/CDCallCenterClient.name +- mzId: CD_CallCenterClient/management-zone/CDCallCenterClient.id +- tag: CallCenterClient +- env: TEST +- skipDeployment: "false" +CDCallCenterClient-TEST.NA-PreProd: +- name: CD_CallCenterClient TEST +- mzName: CD_CallCenterClient/management-zone/CDCallCenterClient.name +- mzId: CD_CallCenterClient/management-zone/CDCallCenterClient.id +- env: TEST +- skipDeployment: "false" +CDCallCenterClient-TEST.CN-PreProd: +- name: CD_CallCenterClient TEST +- mzName: CD_CallCenterClient/management-zone/CDCallCenterClient.name +- mzId: CD_CallCenterClient/management-zone/CDCallCenterClient.id +- env: TEST +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_CallCenterClient/dashboard/default.json b/BMW-Dynatrace-config/CD_CallCenterClient/dashboard/default.json new file mode 100644 index 00000000..6c685810 --- /dev/null +++ b/BMW-Dynatrace-config/CD_CallCenterClient/dashboard/default.json @@ -0,0 +1,308 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.214.107.20210407-223952" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": true, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "timeframe": "-24h to now" + }, + "tags": [ + "{{.tag}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 228, + "left": 38, + "width": 1064, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Failure rate (HTTP 4xx/5xx errors)", + "defaultName": "Custom chart", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [ + { + "metric": "builtin:service.errors.fourxx.rate", + "aggregation": "AVG", + "type": "BAR", + "entityType": "SERVICE", + "dimensions": [], + "sortAscending": false, + "sortColumn": false, + "aggregationRate": "TOTAL" + }, + { + "metric": "builtin:service.errors.fivexx.rate", + "aggregation": "AVG", + "type": "BAR", + "entityType": "SERVICE", + "dimensions": [], + "sortAscending": false, + "sortColumn": true, + "aggregationRate": "TOTAL" + } + ], + "resultMetadata": { + "nullbuiltin:service.errors.fivexx.rate|AVG|TOTAL|BAR|SERVICE": { + "lastModified": 1617956393463, + "customColor": "#ff0000" + }, + "nullbuiltin:service.errors.fourxx.rate|AVG|TOTAL|BAR|SERVICE": { + "lastModified": 1617956441725, + "customColor": "#fff29a" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:{{.env}}", + "Component:{{.tag}}" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 38, + "left": 950, + "width": 152, + "height": 152 + }, + "tileFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + } + }, + { + "name": "Overall Health", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 0, + "left": 38, + "width": 1064, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 532, + "left": 38, + "width": 1064, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 570, + "left": 38, + "width": 1064, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Request Count and Number of Errors", + "defaultName": "Custom chart", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [ + { + "metric": "builtin:service.response.time", + "aggregation": "AVG", + "type": "LINE", + "entityType": "SERVICE", + "dimensions": [], + "sortAscending": false, + "sortColumn": false, + "aggregationRate": "TOTAL" + }, + { + "metric": "builtin:service.requestCount.total", + "aggregation": "NONE", + "type": "BAR", + "entityType": "SERVICE", + "dimensions": [], + "sortAscending": false, + "sortColumn": false, + "aggregationRate": "TOTAL" + }, + { + "metric": "builtin:service.errors.total.count", + "aggregation": "NONE", + "type": "BAR", + "entityType": "SERVICE", + "dimensions": [], + "sortAscending": false, + "sortColumn": true, + "aggregationRate": "TOTAL" + } + ], + "resultMetadata": { + "nullbuiltin:service.requestCount.total|NONE|TOTAL|BAR|SERVICE": { + "lastModified": 1595275720776, + "customColor": "#008cdb" + }, + "nullbuiltin:service.errors.total.count|NONE|TOTAL|BAR|SERVICE": { + "lastModified": 1595275955999, + "customColor": "#ef651f" + }, + "nullbuiltin:service.response.time|AVG|TOTAL|LINE|SERVICE": { + "lastModified": 1595275686773, + "customColor": "#b4e5f9" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:{{.env}}", + "Component:{{.tag}}" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 190, + "left": 38, + "width": 1064, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 38, + "left": 646, + "width": 190, + "height": 152 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:{{.env}}", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 38, + "left": 342, + "width": 190, + "height": 152 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:{{.env}}", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 190, + "height": 152 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:{{.env}}", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_CallCenterClient/management-zone/CDCallCenterClient.json b/BMW-Dynatrace-config/CD_CallCenterClient/management-zone/CDCallCenterClient.json deleted file mode 100644 index 7bb74f02..00000000 --- a/BMW-Dynatrace-config/CD_CallCenterClient/management-zone/CDCallCenterClient.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "dimensionalRules": [], - "metadata": { - "clusterVersion": "1.209.98.20210122-102634", - "configurationVersions": [ - 0 - ] - }, - "name": "{{.name}}", - "rules": [ - { - "conditions": [ - { - "comparisonInfo": { - "negate": false, - "operator": "EQUALS", - "type": "TAG", - "value": { - "context": "CONTEXTLESS", - "key": "Component", - "value": "Call Center Client" - } - }, - "key": { - "attribute": "PROCESS_GROUP_TAGS" - } - } - ], - "enabled": true, - "propagationTypes": [ - "PROCESS_GROUP_TO_SERVICE", - "PROCESS_GROUP_TO_HOST" - ], - "type": "PROCESS_GROUP" - } - ] -} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_CallCenterClient/management-zone/README.md b/BMW-Dynatrace-config/CD_CallCenterClient/management-zone/README.md new file mode 100644 index 00000000..3244b3e6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_CallCenterClient/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_CallCenterClient/management-zone/default.json b/BMW-Dynatrace-config/CD_CallCenterClient/management-zone/default.json new file mode 100644 index 00000000..bffa0c3b --- /dev/null +++ b/BMW-Dynatrace-config/CD_CallCenterClient/management-zone/default.json @@ -0,0 +1,114 @@ +{ + "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" + }, + { + "conditions": [ + { + "comparisonInfo": { + "caseSensitive": true, + "negate": false, + "operator": "CONTAINS", + "type": "STRING", + "value": "{{.tag}}" + }, + "key": { + "attribute": "CLOUD_APPLICATION_NAMESPACE_NAME" + } + } + ], + "enabled": true, + "propagationTypes": [], + "type": "CLOUD_APPLICATION_NAMESPACE" + }, + { + "conditions": [ + { + "comparisonInfo": { + "caseSensitive": true, + "negate": false, + "operator": "CONTAINS", + "type": "STRING", + "value": "{{.tag}}" + }, + "key": { + "attribute": "CLOUD_APPLICATION_NAME" + } + } + ], + "enabled": true, + "propagationTypes": [], + "type": "CLOUD_APPLICATION" + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_CallCenterClient/management-zone/management-zone.yaml b/BMW-Dynatrace-config/CD_CallCenterClient/management-zone/management-zone.yaml index 9c34b7f7..434d4076 100644 --- a/BMW-Dynatrace-config/CD_CallCenterClient/management-zone/management-zone.yaml +++ b/BMW-Dynatrace-config/CD_CallCenterClient/management-zone/management-zone.yaml @@ -1,5 +1,6 @@ config: -- CDCallCenterClient: CDCallCenterClient.json +- CDCallCenterClient: default.json CDCallCenterClient: - name: CD_CallCenterClient +- tag: CallCenterClient diff --git a/BMW-Dynatrace-config/CD_CallCenterClient/notification/README.md b/BMW-Dynatrace-config/CD_CallCenterClient/notification/README.md new file mode 100644 index 00000000..e1a6af84 --- /dev/null +++ b/BMW-Dynatrace-config/CD_CallCenterClient/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_CallCenterClient/notification/email.json b/BMW-Dynatrace-config/CD_CallCenterClient/notification/email.json new file mode 100644 index 00000000..486642a7 --- /dev/null +++ b/BMW-Dynatrace-config/CD_CallCenterClient/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_CallCenterClient/notification/msTeams.json b/BMW-Dynatrace-config/CD_CallCenterClient/notification/msTeams.json new file mode 100644 index 00000000..33e92cf6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_CallCenterClient/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_CallCenterClient/notification/notification.yaml b/BMW-Dynatrace-config/CD_CallCenterClient/notification/notification.yaml new file mode 100644 index 00000000..ec08cbdb --- /dev/null +++ b/BMW-Dynatrace-config/CD_CallCenterClient/notification/notification.yaml @@ -0,0 +1,51 @@ +config: +- CDCallCenterClient-PROD: msTeams.json +- CDCallCenterClient-INT: msTeams.json + +#Prod notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDCallCenterClient-PROD: +- name: CD_CallCenterClient PROD +- alertingProfile: CD_CallCenterClient/alerting-profile/CDCallCenterClient-PROD.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDCallCenterClient-PROD.EMEA-Prod: +- name: CD_CallCenterClient PROD +- alertingProfile: CD_CallCenterClient/alerting-profile/CDCallCenterClient-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDCallCenterClient-PROD.NA-Prod: +- name: CD_CallCenterClient PROD +- alertingProfile: CD_CallCenterClient/alerting-profile/CDCallCenterClient-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDCallCenterClient-PROD.CN-Prod: +- name: CD_CallCenterClient PROD +- alertingProfile: CD_CallCenterClient/alerting-profile/CDCallCenterClient-PROD.id +- webhook: https://empty +- skipDeployment: "false" + +#INT notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDCallCenterClient-INT: +- name: CD_CallCenterClient INT +- alertingProfile: CD_CallCenterClient/alerting-profile/CDCallCenterClient-INT.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDCallCenterClient-INT.EMEA-PreProd: +- name: CD_CallCenterClient INT +- alertingProfile: CD_CallCenterClient/alerting-profile/CDCallCenterClient-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDCallCenterClient-INT.NA-PreProd: +- name: CD_CallCenterClient INT +- alertingProfile: CD_CallCenterClient/alerting-profile/CDCallCenterClient-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDCallCenterClient-INT.CN-PreProd: +- name: CD_CallCenterClient INT +- alertingProfile: CD_CallCenterClient/alerting-profile/CDCallCenterClient-INT.id +- webhook: https://empty +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_CallCenterClient/synthetic-monitor/README.md b/BMW-Dynatrace-config/CD_CallCenterClient/synthetic-monitor/README.md new file mode 100644 index 00000000..1695924c --- /dev/null +++ b/BMW-Dynatrace-config/CD_CallCenterClient/synthetic-monitor/README.md @@ -0,0 +1,4 @@ + +### How to configure synthetics? + +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Synthetic+Monitors) page to configure your synthetics. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_CallCenterClient/synthetic-monitor/default.json b/BMW-Dynatrace-config/CD_CallCenterClient/synthetic-monitor/default.json new file mode 100644 index 00000000..cf83039b --- /dev/null +++ b/BMW-Dynatrace-config/CD_CallCenterClient/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_CallCenterClient/synthetic-monitor/synthetic-monitor.yaml b/BMW-Dynatrace-config/CD_CallCenterClient/synthetic-monitor/synthetic-monitor.yaml new file mode 100644 index 00000000..15951c43 --- /dev/null +++ b/BMW-Dynatrace-config/CD_CallCenterClient/synthetic-monitor/synthetic-monitor.yaml @@ -0,0 +1,10 @@ +config: +- CallCenterClient: default.json + +CallCenterClient: +- name: CD_CallCenterClient - +- mzName: CD_CallCenterClient/management-zone/CDCallCenterClient.name +- mzId: CD_CallCenterClient/management-zone/CDCallCenterClient.id +- endpoint: +- location: +- skipDeployment: "true" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_Connected-Backend-Services/alerting-profile/alerting-profile.yaml b/BMW-Dynatrace-config/CD_Connected-Backend-Services/alerting-profile/alerting-profile.yaml new file mode 100644 index 00000000..a683da05 --- /dev/null +++ b/BMW-Dynatrace-config/CD_Connected-Backend-Services/alerting-profile/alerting-profile.yaml @@ -0,0 +1,60 @@ +config: +- CDConnected-Backend-Services-PROD: default.json +- CDConnected-Backend-Services-INT: default.json + +#Prod alerting profiles for EMEA/NA/CN +#Dry-run needed for all hubs +CDConnected-Backend-Services-PROD: +- name: CD_Connected-Backend-Services PROD +- tag: Connected-Backend-Services +- mzId: CD_Connected-Backend-Services/management-zone/CDConnected-Backend-Services.id +- env: PROD +- skipDeployment: "true" +#Configuration +CDConnected-Backend-Services-PROD.EMEA-Prod: +- name: CD_Connected-Backend-Services PROD +- tag: Connected-Backend-Services +- mzId: CD_Connected-Backend-Services/management-zone/CDConnected-Backend-Services.id +- env: PROD +- skipDeployment: "false" +CDConnected-Backend-Services-PROD.NA-Prod: +- name: CD_Connected-Backend-Services PROD +- tag: Connected-Backend-Services +- mzId: CD_Connected-Backend-Services/management-zone/CDConnected-Backend-Services.id +- env: PROD +- skipDeployment: "false" +CDConnected-Backend-Services-PROD.CN-Prod: +- name: CD_Connected-Backend-Services PROD +- tag: Connected-Backend-Services +- mzId: CD_Connected-Backend-Services/management-zone/CDConnected-Backend-Services.id +- env: PROD +- skipDeployment: "false" + + +#INT alerting profiles for EMEA/NA/CN +#Dry-run needed for all hubs +CDConnected-Backend-Services-INT: +- name: CD_Connected-Backend-Services INT +- tag: Connected-Backend-Services +- mzId: CD_Connected-Backend-Services/management-zone/CDConnected-Backend-Services.id +- env: INT +- skipDeployment: "true" +#Configuration +CDConnected-Backend-Services-INT.EMEA-PreProd: +- name: CD_Connected-Backend-Services INT +- tag: Connected-Backend-Services +- mzId: CD_Connected-Backend-Services/management-zone/CDConnected-Backend-Services.id +- env: INT +- skipDeployment: "false" +CDConnected-Backend-Services-INT.NA-PreProd: +- name: CD_Connected-Backend-Services INT +- tag: Connected-Backend-Services +- mzId: CD_Connected-Backend-Services/management-zone/CDConnected-Backend-Services.id +- env: INT +- skipDeployment: "false" +CDConnected-Backend-Services-INT.CN-PreProd: +- name: CD_Connected-Backend-Services INT +- tag: Connected-Backend-Services +- mzId: CD_Connected-Backend-Services/management-zone/CDConnected-Backend-Services.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_Connected-Backend-Services/alerting-profile/default.json b/BMW-Dynatrace-config/CD_Connected-Backend-Services/alerting-profile/default.json new file mode 100644 index 00000000..681a4c64 --- /dev/null +++ b/BMW-Dynatrace-config/CD_Connected-Backend-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_Connected-Backend-Services/calculated-metrics-service/README.md b/BMW-Dynatrace-config/CD_Connected-Backend-Services/calculated-metrics-service/README.md new file mode 100644 index 00000000..0bf8efbc --- /dev/null +++ b/BMW-Dynatrace-config/CD_Connected-Backend-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_Connected-Backend-Services/conditional-naming-processgroup/README.md b/BMW-Dynatrace-config/CD_Connected-Backend-Services/conditional-naming-processgroup/README.md new file mode 100644 index 00000000..f94196a5 --- /dev/null +++ b/BMW-Dynatrace-config/CD_Connected-Backend-Services/conditional-naming-processgroup/README.md @@ -0,0 +1,67 @@ +### Process Group Detection Rules and Naming + +#### Detection Rule or Naming? + +For the explanation, we're using a real example of the Infotainment application: + +!(PGNaming1)[../../../../img/PGNaming1.PNG] + +Before working with your dashboards and alerting profiles, an important task to do when working with Dynatrace is checking +the structure of your applications (process groups). You can do that clicking under *technologies* and filter using your +application Management Zone. + +In the picture above, there are two Process Groups called bon-information-prod. **If you see duplicated process groups like in** +**this case, you MUST follow this guideline** + +Next step would be to open both process groups and compare the metadata. In that way, you can identify if all process instances are +part of the same application or not. An easy way to do that is asking yourself: how many instances of my application do i have? + +If you have 4 instances in total and you're able to see 2 in one PG and other 2 in other PG it means that **they are part of the ** +**same application** + +Another situation could be that checking on the metadata, then you see that are **two different application** and Dynatrace is just naming +the process group in the same way + +*Same application* +- Problem: Dynatrace is creating two different process groups, what transalates in two separated services for the same application. Instead of +seeing all the traffic in one service, you will have it splitted and it will complicate your monitoring +- Solution: create a process group detection rule. Contact Dynatrace Expert + +*Different application* +- Problem: Dynatrace is just naming in the same way applications that are different. +- Solution: This case is less severe, since it can be fixed with a process group naming rule. + + +What about our example? +!(PGNaming2)[../../../../img/PGNaming2.PNG] +!(PGNaming3)[../../../../img/PGNaming3.PNG] + +Based on the feedback of the infotaiment team, each process group is a different application (microservice) and it's visible in the kubernetes container/workload +within the metadata of each Process Group. + +#### How to create a Process Group Detection Rule +1. Open the *conditional-naming-processgroup.yaml* file and create a rule that looks like this: +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName} +- tag: Infotainment +- skipDeployment: false +``` +The result of the rule will be renaming the PG to this: +``` +bon-information-prod ipa +bon-information-prod rsl +``` + +Other possible placeholders that you can use are for example: +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName/[^\\-]*$} +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesFullPodName/buffet-(.*?)-} +{ProcessGroup:DetectedName} - {HostGroup:Name/[^\\_]*$} +{ProcessGroup:KubernetesNamespace} +{ProcessGroup:CommandLineArgs/.*?\\-f\\s\\/www\\/(.*?)\\/generated\\/httpd\\.conf.*?} + +You can combine different ones. Check the (documentation)[link] for more \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_Connected-Backend-Services/conditional-naming-processgroup/conditional-naming-processgroup.yaml b/BMW-Dynatrace-config/CD_Connected-Backend-Services/conditional-naming-processgroup/conditional-naming-processgroup.yaml new file mode 100644 index 00000000..f909d0a0 --- /dev/null +++ b/BMW-Dynatrace-config/CD_Connected-Backend-Services/conditional-naming-processgroup/conditional-naming-processgroup.yaml @@ -0,0 +1,8 @@ +config: +- CDConnected-Backend-Services: template.json + +CDConnected-Backend-Services: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: Connected-Backend-Services +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_Connected-Backend-Services/conditional-naming-processgroup/template.json b/BMW-Dynatrace-config/CD_Connected-Backend-Services/conditional-naming-processgroup/template.json new file mode 100644 index 00000000..7c039808 --- /dev/null +++ b/BMW-Dynatrace-config/CD_Connected-Backend-Services/conditional-naming-processgroup/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "type": "PROCESS_GROUP" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_Connected-Backend-Services/conditional-naming-service/README.md b/BMW-Dynatrace-config/CD_Connected-Backend-Services/conditional-naming-service/README.md new file mode 100644 index 00000000..c34ef308 --- /dev/null +++ b/BMW-Dynatrace-config/CD_Connected-Backend-Services/conditional-naming-service/README.md @@ -0,0 +1,35 @@ +### Service Naming Rules + +A typical case could be that you access to *Transaction & Services* and you find two services that are exactly the same: +*DataDownloadV1* +*DataDownloadV1* + +If you drilldown into the service and you check in the process group, you may have a PROD and a E2E for each service. + +*Note: if you see that both process group are exactly the same, please contact a Dynatrace expert to create a Process* +*Group detection rule* + +In the case the PG are PROD and E2E, then we need to create a rule that looks like this: + +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {Service:DetectedName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +- tag: Infotainment +- skipDeployment: false +``` + +The rule will get the Service Detected Name (current name) and it will extract (with a regex) the part of the kubernetes namespace after the "-", so -prod or -e2e, resulting in: +*DataDownloadV1 - prod* +*DataDownloadV1 - e2e* + +Now, services will be easy to identify. + +You can create rules based on any property/metadata. Some other placeholder's eamples: +{Service:DatabaseName} - E2E +{Service:WebServiceName} - {ProcessGroup:Kubernetes:microservice} - {ProcessGroup:Kubernetes:environment} +{Service:DetectedName} - {ProcessGroup:KubernetesContainerName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +{Service:DetectedName} - {ProcessGroup:SpringBootProfileName/[^\\-]*$} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_Connected-Backend-Services/conditional-naming-service/conditional-naming-service.yaml b/BMW-Dynatrace-config/CD_Connected-Backend-Services/conditional-naming-service/conditional-naming-service.yaml new file mode 100644 index 00000000..f909d0a0 --- /dev/null +++ b/BMW-Dynatrace-config/CD_Connected-Backend-Services/conditional-naming-service/conditional-naming-service.yaml @@ -0,0 +1,8 @@ +config: +- CDConnected-Backend-Services: template.json + +CDConnected-Backend-Services: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: Connected-Backend-Services +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_Connected-Backend-Services/conditional-naming-service/template.json b/BMW-Dynatrace-config/CD_Connected-Backend-Services/conditional-naming-service/template.json new file mode 100644 index 00000000..5d4fac56 --- /dev/null +++ b/BMW-Dynatrace-config/CD_Connected-Backend-Services/conditional-naming-service/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "type": "SERVICE" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_Connected-Backend-Services/custom-service-java/README.md b/BMW-Dynatrace-config/CD_Connected-Backend-Services/custom-service-java/README.md new file mode 100644 index 00000000..5f35e5c1 --- /dev/null +++ b/BMW-Dynatrace-config/CD_Connected-Backend-Services/custom-service-java/README.md @@ -0,0 +1,4 @@ + +### How to configure custom services? + +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Custom+Services) page to configure your custom services. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_Connected-Backend-Services/custom-service-java/custom-service-java.yaml b/BMW-Dynatrace-config/CD_Connected-Backend-Services/custom-service-java/custom-service-java.yaml new file mode 100644 index 00000000..25f8a028 --- /dev/null +++ b/BMW-Dynatrace-config/CD_Connected-Backend-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_Connected-Backend-Services/custom-service-java/template-1-1.json b/BMW-Dynatrace-config/CD_Connected-Backend-Services/custom-service-java/template-1-1.json new file mode 100644 index 00000000..b3003515 --- /dev/null +++ b/BMW-Dynatrace-config/CD_Connected-Backend-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_Connected-Backend-Services/dashboard/README.md b/BMW-Dynatrace-config/CD_Connected-Backend-Services/dashboard/README.md new file mode 100644 index 00000000..dffcdc8a --- /dev/null +++ b/BMW-Dynatrace-config/CD_Connected-Backend-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_Connected-Backend-Services/dashboard/dashboard.yaml b/BMW-Dynatrace-config/CD_Connected-Backend-Services/dashboard/dashboard.yaml new file mode 100644 index 00000000..c9f601a7 --- /dev/null +++ b/BMW-Dynatrace-config/CD_Connected-Backend-Services/dashboard/dashboard.yaml @@ -0,0 +1,127 @@ +config: +- CDConnected-Backend-Services-PROD: default.json +- CDConnected-Backend-Services-E2E: default.json +- CDConnected-Backend-Services-INT: default.json +- CDConnected-Backend-Services-TEST: default.json + +#PROD dashboards for EMEA/NA/CN Prod +#Dry-run needed for all hubs +CDConnected-Backend-Services-PROD: +- name: CD_Connected-Backend-Services PROD +- mzName: CD_Connected-Backend-Services/management-zone/CDConnected-Backend-Services.name +- mzId: CD_Connected-Backend-Services/management-zone/CDConnected-Backend-Services.id +- env: PROD +- skipDeployment: "true" +#Configuration +CDConnected-Backend-Services-PROD.EMEA-Prod: +- name: CD_Connected-Backend-Services PROD +- mzName: CD_Connected-Backend-Services/management-zone/CDConnected-Backend-Services.name +- mzId: CD_Connected-Backend-Services/management-zone/CDConnected-Backend-Services.id +- tag: Connected-Backend-Services +- env: PROD +- skipDeployment: "false" +CDConnected-Backend-Services-PROD.NA-Prod: +- name: CD_Connected-Backend-Services PROD +- mzName: CD_Connected-Backend-Services/management-zone/CDConnected-Backend-Services.name +- mzId: CD_Connected-Backend-Services/management-zone/CDConnected-Backend-Services.id +- tag: Connected-Backend-Services +- env: PROD +- skipDeployment: "false" +CDConnected-Backend-Services-PROD.CN-Prod: +- name: CD_Connected-Backend-Services PROD +- mzName: CD_Connected-Backend-Services/management-zone/CDConnected-Backend-Services.name +- mzId: CD_Connected-Backend-Services/management-zone/CDConnected-Backend-Services.id +- tag: Connected-Backend-Services +- env: PROD +- skipDeployment: "false" + +#E2E dashboards for EMEA/NA/CN E2E +#Dry-run needed for all hubs +CDConnected-Backend-Services-E2E: +- name: CD_Connected-Backend-Services E2E +- mzName: CD_Connected-Backend-Services/management-zone/CDConnected-Backend-Services.name +- mzId: CD_Connected-Backend-Services/management-zone/CDConnected-Backend-Services.id +- env: E2E +- skipDeployment: "true" +#Configuration +CDConnected-Backend-Services-E2E.EMEA-Prod: +- name: CD_Connected-Backend-Services E2E +- mzName: CD_Connected-Backend-Services/management-zone/CDConnected-Backend-Services.name +- mzId: CD_Connected-Backend-Services/management-zone/CDConnected-Backend-Services.id +- env: E2E +- tag: Connected-Backend-Services +- skipDeployment: "true" +CDConnected-Backend-Services-E2E.NA-Prod: +- name: CD_Connected-Backend-Services E2E +- mzName: CD_Connected-Backend-Services/management-zone/CDConnected-Backend-Services.name +- mzId: CD_Connected-Backend-Services/management-zone/CDConnected-Backend-Services.id +- env: E2E +- tag: Connected-Backend-Services +- skipDeployment: "true" +CDConnected-Backend-Services-E2E.CN-Prod: +- name: CD_Connected-Backend-Services E2E +- mzName: CD_Connected-Backend-Services/management-zone/CDConnected-Backend-Services.name +- mzId: CD_Connected-Backend-Services/management-zone/CDConnected-Backend-Services.id +- env: E2E +- tag: Connected-Backend-Services +- skipDeployment: "true" + +#INT dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDConnected-Backend-Services-INT: +- name: CD_Connected-Backend-Services INT +- mzName: CD_Connected-Backend-Services/management-zone/CDConnected-Backend-Services.name +- mzId: CD_Connected-Backend-Services/management-zone/CDConnected-Backend-Services.id +- env: INT +- tag: Connected-Backend-Services +- skipDeployment: "true" +#Configuration +CDConnected-Backend-Services-INT.EMEA-PreProd: +- name: CD_Connected-Backend-Services INT +- mzName: CD_Connected-Backend-Services/management-zone/CDConnected-Backend-Services.name +- mzId: CD_Connected-Backend-Services/management-zone/CDConnected-Backend-Services.id +- env: INT +- tag: Connected-Backend-Services +- skipDeployment: "false" +CDConnected-Backend-Services-INT.NA-PreProd: +- name: CD_Connected-Backend-Services INT +- mzName: CD_Connected-Backend-Services/management-zone/CDConnected-Backend-Services.name +- mzId: CD_Connected-Backend-Services/management-zone/CDConnected-Backend-Services.id +- env: INT +- skipDeployment: "false" +CDConnected-Backend-Services-INT.CN-PreProd: +- name: CD_Connected-Backend-Services INT +- mzName: CD_Connected-Backend-Services/management-zone/CDConnected-Backend-Services.name +- mzId: CD_Connected-Backend-Services/management-zone/CDConnected-Backend-Services.id +- env: INT +- skipDeployment: "false" + +#TEST dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDConnected-Backend-Services-TEST: +- name: CD_Connected-Backend-Services TEST +- mzName: CD_Connected-Backend-Services/management-zone/CDConnected-Backend-Services.name +- mzId: CD_Connected-Backend-Services/management-zone/CDConnected-Backend-Services.id +- tag: Connected-Backend-Services +- env: TEST +- skipDeployment: "true" +#Configuration +CDConnected-Backend-Services-TEST.EMEA-PreProd: +- name: CD_Connected-Backend-Services TEST +- mzName: CD_Connected-Backend-Services/management-zone/CDConnected-Backend-Services.name +- mzId: CD_Connected-Backend-Services/management-zone/CDConnected-Backend-Services.id +- tag: Connected-Backend-Services +- env: TEST +- skipDeployment: "false" +CDConnected-Backend-Services-TEST.NA-PreProd: +- name: CD_Connected-Backend-Services TEST +- mzName: CD_Connected-Backend-Services/management-zone/CDConnected-Backend-Services.name +- mzId: CD_Connected-Backend-Services/management-zone/CDConnected-Backend-Services.id +- env: TEST +- skipDeployment: "false" +CDConnected-Backend-Services-TEST.CN-PreProd: +- name: CD_Connected-Backend-Services TEST +- mzName: CD_Connected-Backend-Services/management-zone/CDConnected-Backend-Services.name +- mzId: CD_Connected-Backend-Services/management-zone/CDConnected-Backend-Services.id +- env: TEST +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_Connected-Backend-Services/dashboard/default.json b/BMW-Dynatrace-config/CD_Connected-Backend-Services/dashboard/default.json new file mode 100644 index 00000000..6c685810 --- /dev/null +++ b/BMW-Dynatrace-config/CD_Connected-Backend-Services/dashboard/default.json @@ -0,0 +1,308 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.214.107.20210407-223952" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": true, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "timeframe": "-24h to now" + }, + "tags": [ + "{{.tag}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 228, + "left": 38, + "width": 1064, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Failure rate (HTTP 4xx/5xx errors)", + "defaultName": "Custom chart", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [ + { + "metric": "builtin:service.errors.fourxx.rate", + "aggregation": "AVG", + "type": "BAR", + "entityType": "SERVICE", + "dimensions": [], + "sortAscending": false, + "sortColumn": false, + "aggregationRate": "TOTAL" + }, + { + "metric": "builtin:service.errors.fivexx.rate", + "aggregation": "AVG", + "type": "BAR", + "entityType": "SERVICE", + "dimensions": [], + "sortAscending": false, + "sortColumn": true, + "aggregationRate": "TOTAL" + } + ], + "resultMetadata": { + "nullbuiltin:service.errors.fivexx.rate|AVG|TOTAL|BAR|SERVICE": { + "lastModified": 1617956393463, + "customColor": "#ff0000" + }, + "nullbuiltin:service.errors.fourxx.rate|AVG|TOTAL|BAR|SERVICE": { + "lastModified": 1617956441725, + "customColor": "#fff29a" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:{{.env}}", + "Component:{{.tag}}" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 38, + "left": 950, + "width": 152, + "height": 152 + }, + "tileFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + } + }, + { + "name": "Overall Health", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 0, + "left": 38, + "width": 1064, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 532, + "left": 38, + "width": 1064, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 570, + "left": 38, + "width": 1064, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Request Count and Number of Errors", + "defaultName": "Custom chart", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [ + { + "metric": "builtin:service.response.time", + "aggregation": "AVG", + "type": "LINE", + "entityType": "SERVICE", + "dimensions": [], + "sortAscending": false, + "sortColumn": false, + "aggregationRate": "TOTAL" + }, + { + "metric": "builtin:service.requestCount.total", + "aggregation": "NONE", + "type": "BAR", + "entityType": "SERVICE", + "dimensions": [], + "sortAscending": false, + "sortColumn": false, + "aggregationRate": "TOTAL" + }, + { + "metric": "builtin:service.errors.total.count", + "aggregation": "NONE", + "type": "BAR", + "entityType": "SERVICE", + "dimensions": [], + "sortAscending": false, + "sortColumn": true, + "aggregationRate": "TOTAL" + } + ], + "resultMetadata": { + "nullbuiltin:service.requestCount.total|NONE|TOTAL|BAR|SERVICE": { + "lastModified": 1595275720776, + "customColor": "#008cdb" + }, + "nullbuiltin:service.errors.total.count|NONE|TOTAL|BAR|SERVICE": { + "lastModified": 1595275955999, + "customColor": "#ef651f" + }, + "nullbuiltin:service.response.time|AVG|TOTAL|LINE|SERVICE": { + "lastModified": 1595275686773, + "customColor": "#b4e5f9" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:{{.env}}", + "Component:{{.tag}}" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 190, + "left": 38, + "width": 1064, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 38, + "left": 646, + "width": 190, + "height": 152 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:{{.env}}", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 38, + "left": 342, + "width": 190, + "height": 152 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:{{.env}}", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 190, + "height": 152 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:{{.env}}", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_Connected-Backend-Services/management-zone/CDConnected-Backend-Services.json b/BMW-Dynatrace-config/CD_Connected-Backend-Services/management-zone/CDConnected-Backend-Services.json deleted file mode 100644 index 8c0ffb4c..00000000 --- a/BMW-Dynatrace-config/CD_Connected-Backend-Services/management-zone/CDConnected-Backend-Services.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "dimensionalRules": [], - "metadata": { - "clusterVersion": "1.209.98.20210122-102634", - "configurationVersions": [ - 0 - ] - }, - "name": "{{.name}}", - "rules": [ - { - "conditions": [ - { - "comparisonInfo": { - "caseSensitive": true, - "negate": false, - "operator": "BEGINS_WITH", - "type": "STRING", - "value": "empty" - }, - "key": { - "attribute": "SERVICE_AKKA_ACTOR_SYSTEM" - } - } - ], - "enabled": true, - "propagationTypes": [], - "type": "SERVICE" - } - ] -} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_Connected-Backend-Services/management-zone/README.md b/BMW-Dynatrace-config/CD_Connected-Backend-Services/management-zone/README.md new file mode 100644 index 00000000..3244b3e6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_Connected-Backend-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_Connected-Backend-Services/management-zone/default.json b/BMW-Dynatrace-config/CD_Connected-Backend-Services/management-zone/default.json new file mode 100644 index 00000000..bffa0c3b --- /dev/null +++ b/BMW-Dynatrace-config/CD_Connected-Backend-Services/management-zone/default.json @@ -0,0 +1,114 @@ +{ + "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" + }, + { + "conditions": [ + { + "comparisonInfo": { + "caseSensitive": true, + "negate": false, + "operator": "CONTAINS", + "type": "STRING", + "value": "{{.tag}}" + }, + "key": { + "attribute": "CLOUD_APPLICATION_NAMESPACE_NAME" + } + } + ], + "enabled": true, + "propagationTypes": [], + "type": "CLOUD_APPLICATION_NAMESPACE" + }, + { + "conditions": [ + { + "comparisonInfo": { + "caseSensitive": true, + "negate": false, + "operator": "CONTAINS", + "type": "STRING", + "value": "{{.tag}}" + }, + "key": { + "attribute": "CLOUD_APPLICATION_NAME" + } + } + ], + "enabled": true, + "propagationTypes": [], + "type": "CLOUD_APPLICATION" + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_Connected-Backend-Services/management-zone/management-zone.yaml b/BMW-Dynatrace-config/CD_Connected-Backend-Services/management-zone/management-zone.yaml index 902b3930..3cd78a05 100644 --- a/BMW-Dynatrace-config/CD_Connected-Backend-Services/management-zone/management-zone.yaml +++ b/BMW-Dynatrace-config/CD_Connected-Backend-Services/management-zone/management-zone.yaml @@ -1,5 +1,6 @@ config: -- CDConnected-Backend-Services: CDConnected-Backend-Services.json +- CDConnected-Backend-Services: default.json CDConnected-Backend-Services: - name: CD_Connected-Backend-Services +- tag: Connected-Backend-Services diff --git a/BMW-Dynatrace-config/CD_Connected-Backend-Services/notification/README.md b/BMW-Dynatrace-config/CD_Connected-Backend-Services/notification/README.md new file mode 100644 index 00000000..e1a6af84 --- /dev/null +++ b/BMW-Dynatrace-config/CD_Connected-Backend-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_Connected-Backend-Services/notification/email.json b/BMW-Dynatrace-config/CD_Connected-Backend-Services/notification/email.json new file mode 100644 index 00000000..486642a7 --- /dev/null +++ b/BMW-Dynatrace-config/CD_Connected-Backend-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_Connected-Backend-Services/notification/msTeams.json b/BMW-Dynatrace-config/CD_Connected-Backend-Services/notification/msTeams.json new file mode 100644 index 00000000..33e92cf6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_Connected-Backend-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_Connected-Backend-Services/notification/notification.yaml b/BMW-Dynatrace-config/CD_Connected-Backend-Services/notification/notification.yaml new file mode 100644 index 00000000..b0d31d72 --- /dev/null +++ b/BMW-Dynatrace-config/CD_Connected-Backend-Services/notification/notification.yaml @@ -0,0 +1,51 @@ +config: +- CDConnected-Backend-Services-PROD: msTeams.json +- CDConnected-Backend-Services-INT: msTeams.json + +#Prod notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDConnected-Backend-Services-PROD: +- name: CD_Connected-Backend-Services PROD +- alertingProfile: CD_Connected-Backend-Services/alerting-profile/CDConnected-Backend-Services-PROD.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDConnected-Backend-Services-PROD.EMEA-Prod: +- name: CD_Connected-Backend-Services PROD +- alertingProfile: CD_Connected-Backend-Services/alerting-profile/CDConnected-Backend-Services-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDConnected-Backend-Services-PROD.NA-Prod: +- name: CD_Connected-Backend-Services PROD +- alertingProfile: CD_Connected-Backend-Services/alerting-profile/CDConnected-Backend-Services-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDConnected-Backend-Services-PROD.CN-Prod: +- name: CD_Connected-Backend-Services PROD +- alertingProfile: CD_Connected-Backend-Services/alerting-profile/CDConnected-Backend-Services-PROD.id +- webhook: https://empty +- skipDeployment: "false" + +#INT notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDConnected-Backend-Services-INT: +- name: CD_Connected-Backend-Services INT +- alertingProfile: CD_Connected-Backend-Services/alerting-profile/CDConnected-Backend-Services-INT.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDConnected-Backend-Services-INT.EMEA-PreProd: +- name: CD_Connected-Backend-Services INT +- alertingProfile: CD_Connected-Backend-Services/alerting-profile/CDConnected-Backend-Services-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDConnected-Backend-Services-INT.NA-PreProd: +- name: CD_Connected-Backend-Services INT +- alertingProfile: CD_Connected-Backend-Services/alerting-profile/CDConnected-Backend-Services-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDConnected-Backend-Services-INT.CN-PreProd: +- name: CD_Connected-Backend-Services INT +- alertingProfile: CD_Connected-Backend-Services/alerting-profile/CDConnected-Backend-Services-INT.id +- webhook: https://empty +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_Connected-Backend-Services/synthetic-monitor/README.md b/BMW-Dynatrace-config/CD_Connected-Backend-Services/synthetic-monitor/README.md new file mode 100644 index 00000000..1695924c --- /dev/null +++ b/BMW-Dynatrace-config/CD_Connected-Backend-Services/synthetic-monitor/README.md @@ -0,0 +1,4 @@ + +### How to configure synthetics? + +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Synthetic+Monitors) page to configure your synthetics. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_Connected-Backend-Services/synthetic-monitor/default.json b/BMW-Dynatrace-config/CD_Connected-Backend-Services/synthetic-monitor/default.json new file mode 100644 index 00000000..cf83039b --- /dev/null +++ b/BMW-Dynatrace-config/CD_Connected-Backend-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_Connected-Backend-Services/synthetic-monitor/synthetic-monitor.yaml b/BMW-Dynatrace-config/CD_Connected-Backend-Services/synthetic-monitor/synthetic-monitor.yaml new file mode 100644 index 00000000..2b689beb --- /dev/null +++ b/BMW-Dynatrace-config/CD_Connected-Backend-Services/synthetic-monitor/synthetic-monitor.yaml @@ -0,0 +1,10 @@ +config: +- Connected-Backend-Services: default.json + +Connected-Backend-Services: +- name: CD_Connected-Backend-Services - +- mzName: CD_Connected-Backend-Services/management-zone/CDConnected-Backend-Services.name +- mzId: CD_Connected-Backend-Services/management-zone/CDConnected-Backend-Services.id +- endpoint: +- location: +- skipDeployment: "true" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_Connected-User-Behaviour/alerting-profile/alerting-profile.yaml b/BMW-Dynatrace-config/CD_Connected-User-Behaviour/alerting-profile/alerting-profile.yaml new file mode 100644 index 00000000..8ebd3f64 --- /dev/null +++ b/BMW-Dynatrace-config/CD_Connected-User-Behaviour/alerting-profile/alerting-profile.yaml @@ -0,0 +1,60 @@ +config: +- CDConnected-User-Behaviour-PROD: default.json +- CDConnected-User-Behaviour-INT: default.json + +#Prod alerting profiles for EMEA/NA/CN +#Dry-run needed for all hubs +CDConnected-User-Behaviour-PROD: +- name: CD_Connected-User-Behaviour PROD +- tag: Connected-User-Behaviour +- mzId: CD_Connected-User-Behaviour/management-zone/CDConnected-User-Behaviour.id +- env: PROD +- skipDeployment: "true" +#Configuration +CDConnected-User-Behaviour-PROD.EMEA-Prod: +- name: CD_Connected-User-Behaviour PROD +- tag: Connected-User-Behaviour +- mzId: CD_Connected-User-Behaviour/management-zone/CDConnected-User-Behaviour.id +- env: PROD +- skipDeployment: "false" +CDConnected-User-Behaviour-PROD.NA-Prod: +- name: CD_Connected-User-Behaviour PROD +- tag: Connected-User-Behaviour +- mzId: CD_Connected-User-Behaviour/management-zone/CDConnected-User-Behaviour.id +- env: PROD +- skipDeployment: "false" +CDConnected-User-Behaviour-PROD.CN-Prod: +- name: CD_Connected-User-Behaviour PROD +- tag: Connected-User-Behaviour +- mzId: CD_Connected-User-Behaviour/management-zone/CDConnected-User-Behaviour.id +- env: PROD +- skipDeployment: "false" + + +#INT alerting profiles for EMEA/NA/CN +#Dry-run needed for all hubs +CDConnected-User-Behaviour-INT: +- name: CD_Connected-User-Behaviour INT +- tag: Connected-User-Behaviour +- mzId: CD_Connected-User-Behaviour/management-zone/CDConnected-User-Behaviour.id +- env: INT +- skipDeployment: "true" +#Configuration +CDConnected-User-Behaviour-INT.EMEA-PreProd: +- name: CD_Connected-User-Behaviour INT +- tag: Connected-User-Behaviour +- mzId: CD_Connected-User-Behaviour/management-zone/CDConnected-User-Behaviour.id +- env: INT +- skipDeployment: "false" +CDConnected-User-Behaviour-INT.NA-PreProd: +- name: CD_Connected-User-Behaviour INT +- tag: Connected-User-Behaviour +- mzId: CD_Connected-User-Behaviour/management-zone/CDConnected-User-Behaviour.id +- env: INT +- skipDeployment: "false" +CDConnected-User-Behaviour-INT.CN-PreProd: +- name: CD_Connected-User-Behaviour INT +- tag: Connected-User-Behaviour +- mzId: CD_Connected-User-Behaviour/management-zone/CDConnected-User-Behaviour.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_Connected-User-Behaviour/alerting-profile/default.json b/BMW-Dynatrace-config/CD_Connected-User-Behaviour/alerting-profile/default.json new file mode 100644 index 00000000..681a4c64 --- /dev/null +++ b/BMW-Dynatrace-config/CD_Connected-User-Behaviour/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-User-Behaviour/calculated-metrics-service/README.md b/BMW-Dynatrace-config/CD_Connected-User-Behaviour/calculated-metrics-service/README.md new file mode 100644 index 00000000..0bf8efbc --- /dev/null +++ b/BMW-Dynatrace-config/CD_Connected-User-Behaviour/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-User-Behaviour/conditional-naming-processgroup/README.md b/BMW-Dynatrace-config/CD_Connected-User-Behaviour/conditional-naming-processgroup/README.md new file mode 100644 index 00000000..f94196a5 --- /dev/null +++ b/BMW-Dynatrace-config/CD_Connected-User-Behaviour/conditional-naming-processgroup/README.md @@ -0,0 +1,67 @@ +### Process Group Detection Rules and Naming + +#### Detection Rule or Naming? + +For the explanation, we're using a real example of the Infotainment application: + +!(PGNaming1)[../../../../img/PGNaming1.PNG] + +Before working with your dashboards and alerting profiles, an important task to do when working with Dynatrace is checking +the structure of your applications (process groups). You can do that clicking under *technologies* and filter using your +application Management Zone. + +In the picture above, there are two Process Groups called bon-information-prod. **If you see duplicated process groups like in** +**this case, you MUST follow this guideline** + +Next step would be to open both process groups and compare the metadata. In that way, you can identify if all process instances are +part of the same application or not. An easy way to do that is asking yourself: how many instances of my application do i have? + +If you have 4 instances in total and you're able to see 2 in one PG and other 2 in other PG it means that **they are part of the ** +**same application** + +Another situation could be that checking on the metadata, then you see that are **two different application** and Dynatrace is just naming +the process group in the same way + +*Same application* +- Problem: Dynatrace is creating two different process groups, what transalates in two separated services for the same application. Instead of +seeing all the traffic in one service, you will have it splitted and it will complicate your monitoring +- Solution: create a process group detection rule. Contact Dynatrace Expert + +*Different application* +- Problem: Dynatrace is just naming in the same way applications that are different. +- Solution: This case is less severe, since it can be fixed with a process group naming rule. + + +What about our example? +!(PGNaming2)[../../../../img/PGNaming2.PNG] +!(PGNaming3)[../../../../img/PGNaming3.PNG] + +Based on the feedback of the infotaiment team, each process group is a different application (microservice) and it's visible in the kubernetes container/workload +within the metadata of each Process Group. + +#### How to create a Process Group Detection Rule +1. Open the *conditional-naming-processgroup.yaml* file and create a rule that looks like this: +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName} +- tag: Infotainment +- skipDeployment: false +``` +The result of the rule will be renaming the PG to this: +``` +bon-information-prod ipa +bon-information-prod rsl +``` + +Other possible placeholders that you can use are for example: +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName/[^\\-]*$} +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesFullPodName/buffet-(.*?)-} +{ProcessGroup:DetectedName} - {HostGroup:Name/[^\\_]*$} +{ProcessGroup:KubernetesNamespace} +{ProcessGroup:CommandLineArgs/.*?\\-f\\s\\/www\\/(.*?)\\/generated\\/httpd\\.conf.*?} + +You can combine different ones. Check the (documentation)[link] for more \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_Connected-User-Behaviour/conditional-naming-processgroup/conditional-naming-processgroup.yaml b/BMW-Dynatrace-config/CD_Connected-User-Behaviour/conditional-naming-processgroup/conditional-naming-processgroup.yaml new file mode 100644 index 00000000..40522027 --- /dev/null +++ b/BMW-Dynatrace-config/CD_Connected-User-Behaviour/conditional-naming-processgroup/conditional-naming-processgroup.yaml @@ -0,0 +1,8 @@ +config: +- CDConnected-User-Behaviour: template.json + +CDConnected-User-Behaviour: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: Connected-User-Behaviour +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_Connected-User-Behaviour/conditional-naming-processgroup/template.json b/BMW-Dynatrace-config/CD_Connected-User-Behaviour/conditional-naming-processgroup/template.json new file mode 100644 index 00000000..7c039808 --- /dev/null +++ b/BMW-Dynatrace-config/CD_Connected-User-Behaviour/conditional-naming-processgroup/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "type": "PROCESS_GROUP" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_Connected-User-Behaviour/conditional-naming-service/README.md b/BMW-Dynatrace-config/CD_Connected-User-Behaviour/conditional-naming-service/README.md new file mode 100644 index 00000000..c34ef308 --- /dev/null +++ b/BMW-Dynatrace-config/CD_Connected-User-Behaviour/conditional-naming-service/README.md @@ -0,0 +1,35 @@ +### Service Naming Rules + +A typical case could be that you access to *Transaction & Services* and you find two services that are exactly the same: +*DataDownloadV1* +*DataDownloadV1* + +If you drilldown into the service and you check in the process group, you may have a PROD and a E2E for each service. + +*Note: if you see that both process group are exactly the same, please contact a Dynatrace expert to create a Process* +*Group detection rule* + +In the case the PG are PROD and E2E, then we need to create a rule that looks like this: + +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {Service:DetectedName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +- tag: Infotainment +- skipDeployment: false +``` + +The rule will get the Service Detected Name (current name) and it will extract (with a regex) the part of the kubernetes namespace after the "-", so -prod or -e2e, resulting in: +*DataDownloadV1 - prod* +*DataDownloadV1 - e2e* + +Now, services will be easy to identify. + +You can create rules based on any property/metadata. Some other placeholder's eamples: +{Service:DatabaseName} - E2E +{Service:WebServiceName} - {ProcessGroup:Kubernetes:microservice} - {ProcessGroup:Kubernetes:environment} +{Service:DetectedName} - {ProcessGroup:KubernetesContainerName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +{Service:DetectedName} - {ProcessGroup:SpringBootProfileName/[^\\-]*$} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_Connected-User-Behaviour/conditional-naming-service/conditional-naming-service.yaml b/BMW-Dynatrace-config/CD_Connected-User-Behaviour/conditional-naming-service/conditional-naming-service.yaml new file mode 100644 index 00000000..40522027 --- /dev/null +++ b/BMW-Dynatrace-config/CD_Connected-User-Behaviour/conditional-naming-service/conditional-naming-service.yaml @@ -0,0 +1,8 @@ +config: +- CDConnected-User-Behaviour: template.json + +CDConnected-User-Behaviour: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: Connected-User-Behaviour +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_Connected-User-Behaviour/conditional-naming-service/template.json b/BMW-Dynatrace-config/CD_Connected-User-Behaviour/conditional-naming-service/template.json new file mode 100644 index 00000000..5d4fac56 --- /dev/null +++ b/BMW-Dynatrace-config/CD_Connected-User-Behaviour/conditional-naming-service/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "type": "SERVICE" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_Connected-User-Behaviour/custom-service-java/README.md b/BMW-Dynatrace-config/CD_Connected-User-Behaviour/custom-service-java/README.md new file mode 100644 index 00000000..5f35e5c1 --- /dev/null +++ b/BMW-Dynatrace-config/CD_Connected-User-Behaviour/custom-service-java/README.md @@ -0,0 +1,4 @@ + +### How to configure custom services? + +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Custom+Services) page to configure your custom services. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_Connected-User-Behaviour/custom-service-java/custom-service-java.yaml b/BMW-Dynatrace-config/CD_Connected-User-Behaviour/custom-service-java/custom-service-java.yaml new file mode 100644 index 00000000..25f8a028 --- /dev/null +++ b/BMW-Dynatrace-config/CD_Connected-User-Behaviour/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-User-Behaviour/custom-service-java/template-1-1.json b/BMW-Dynatrace-config/CD_Connected-User-Behaviour/custom-service-java/template-1-1.json new file mode 100644 index 00000000..b3003515 --- /dev/null +++ b/BMW-Dynatrace-config/CD_Connected-User-Behaviour/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-User-Behaviour/dashboard/README.md b/BMW-Dynatrace-config/CD_Connected-User-Behaviour/dashboard/README.md new file mode 100644 index 00000000..dffcdc8a --- /dev/null +++ b/BMW-Dynatrace-config/CD_Connected-User-Behaviour/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-User-Behaviour/dashboard/dashboard.yaml b/BMW-Dynatrace-config/CD_Connected-User-Behaviour/dashboard/dashboard.yaml new file mode 100644 index 00000000..2d35195d --- /dev/null +++ b/BMW-Dynatrace-config/CD_Connected-User-Behaviour/dashboard/dashboard.yaml @@ -0,0 +1,127 @@ +config: +- CDConnected-User-Behaviour-PROD: default.json +- CDConnected-User-Behaviour-E2E: default.json +- CDConnected-User-Behaviour-INT: default.json +- CDConnected-User-Behaviour-TEST: default.json + +#PROD dashboards for EMEA/NA/CN Prod +#Dry-run needed for all hubs +CDConnected-User-Behaviour-PROD: +- name: CD_Connected-User-Behaviour PROD +- mzName: CD_Connected-User-Behaviour/management-zone/CDConnected-User-Behaviour.name +- mzId: CD_Connected-User-Behaviour/management-zone/CDConnected-User-Behaviour.id +- env: PROD +- skipDeployment: "true" +#Configuration +CDConnected-User-Behaviour-PROD.EMEA-Prod: +- name: CD_Connected-User-Behaviour PROD +- mzName: CD_Connected-User-Behaviour/management-zone/CDConnected-User-Behaviour.name +- mzId: CD_Connected-User-Behaviour/management-zone/CDConnected-User-Behaviour.id +- tag: Connected-User-Behaviour +- env: PROD +- skipDeployment: "false" +CDConnected-User-Behaviour-PROD.NA-Prod: +- name: CD_Connected-User-Behaviour PROD +- mzName: CD_Connected-User-Behaviour/management-zone/CDConnected-User-Behaviour.name +- mzId: CD_Connected-User-Behaviour/management-zone/CDConnected-User-Behaviour.id +- tag: Connected-User-Behaviour +- env: PROD +- skipDeployment: "false" +CDConnected-User-Behaviour-PROD.CN-Prod: +- name: CD_Connected-User-Behaviour PROD +- mzName: CD_Connected-User-Behaviour/management-zone/CDConnected-User-Behaviour.name +- mzId: CD_Connected-User-Behaviour/management-zone/CDConnected-User-Behaviour.id +- tag: Connected-User-Behaviour +- env: PROD +- skipDeployment: "false" + +#E2E dashboards for EMEA/NA/CN E2E +#Dry-run needed for all hubs +CDConnected-User-Behaviour-E2E: +- name: CD_Connected-User-Behaviour E2E +- mzName: CD_Connected-User-Behaviour/management-zone/CDConnected-User-Behaviour.name +- mzId: CD_Connected-User-Behaviour/management-zone/CDConnected-User-Behaviour.id +- env: E2E +- skipDeployment: "true" +#Configuration +CDConnected-User-Behaviour-E2E.EMEA-Prod: +- name: CD_Connected-User-Behaviour E2E +- mzName: CD_Connected-User-Behaviour/management-zone/CDConnected-User-Behaviour.name +- mzId: CD_Connected-User-Behaviour/management-zone/CDConnected-User-Behaviour.id +- env: E2E +- tag: Connected-User-Behaviour +- skipDeployment: "true" +CDConnected-User-Behaviour-E2E.NA-Prod: +- name: CD_Connected-User-Behaviour E2E +- mzName: CD_Connected-User-Behaviour/management-zone/CDConnected-User-Behaviour.name +- mzId: CD_Connected-User-Behaviour/management-zone/CDConnected-User-Behaviour.id +- env: E2E +- tag: Connected-User-Behaviour +- skipDeployment: "true" +CDConnected-User-Behaviour-E2E.CN-Prod: +- name: CD_Connected-User-Behaviour E2E +- mzName: CD_Connected-User-Behaviour/management-zone/CDConnected-User-Behaviour.name +- mzId: CD_Connected-User-Behaviour/management-zone/CDConnected-User-Behaviour.id +- env: E2E +- tag: Connected-User-Behaviour +- skipDeployment: "true" + +#INT dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDConnected-User-Behaviour-INT: +- name: CD_Connected-User-Behaviour INT +- mzName: CD_Connected-User-Behaviour/management-zone/CDConnected-User-Behaviour.name +- mzId: CD_Connected-User-Behaviour/management-zone/CDConnected-User-Behaviour.id +- env: INT +- tag: Connected-User-Behaviour +- skipDeployment: "true" +#Configuration +CDConnected-User-Behaviour-INT.EMEA-PreProd: +- name: CD_Connected-User-Behaviour INT +- mzName: CD_Connected-User-Behaviour/management-zone/CDConnected-User-Behaviour.name +- mzId: CD_Connected-User-Behaviour/management-zone/CDConnected-User-Behaviour.id +- env: INT +- tag: Connected-User-Behaviour +- skipDeployment: "false" +CDConnected-User-Behaviour-INT.NA-PreProd: +- name: CD_Connected-User-Behaviour INT +- mzName: CD_Connected-User-Behaviour/management-zone/CDConnected-User-Behaviour.name +- mzId: CD_Connected-User-Behaviour/management-zone/CDConnected-User-Behaviour.id +- env: INT +- skipDeployment: "false" +CDConnected-User-Behaviour-INT.CN-PreProd: +- name: CD_Connected-User-Behaviour INT +- mzName: CD_Connected-User-Behaviour/management-zone/CDConnected-User-Behaviour.name +- mzId: CD_Connected-User-Behaviour/management-zone/CDConnected-User-Behaviour.id +- env: INT +- skipDeployment: "false" + +#TEST dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDConnected-User-Behaviour-TEST: +- name: CD_Connected-User-Behaviour TEST +- mzName: CD_Connected-User-Behaviour/management-zone/CDConnected-User-Behaviour.name +- mzId: CD_Connected-User-Behaviour/management-zone/CDConnected-User-Behaviour.id +- tag: Connected-User-Behaviour +- env: TEST +- skipDeployment: "true" +#Configuration +CDConnected-User-Behaviour-TEST.EMEA-PreProd: +- name: CD_Connected-User-Behaviour TEST +- mzName: CD_Connected-User-Behaviour/management-zone/CDConnected-User-Behaviour.name +- mzId: CD_Connected-User-Behaviour/management-zone/CDConnected-User-Behaviour.id +- tag: Connected-User-Behaviour +- env: TEST +- skipDeployment: "false" +CDConnected-User-Behaviour-TEST.NA-PreProd: +- name: CD_Connected-User-Behaviour TEST +- mzName: CD_Connected-User-Behaviour/management-zone/CDConnected-User-Behaviour.name +- mzId: CD_Connected-User-Behaviour/management-zone/CDConnected-User-Behaviour.id +- env: TEST +- skipDeployment: "false" +CDConnected-User-Behaviour-TEST.CN-PreProd: +- name: CD_Connected-User-Behaviour TEST +- mzName: CD_Connected-User-Behaviour/management-zone/CDConnected-User-Behaviour.name +- mzId: CD_Connected-User-Behaviour/management-zone/CDConnected-User-Behaviour.id +- env: TEST +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_Connected-User-Behaviour/dashboard/default.json b/BMW-Dynatrace-config/CD_Connected-User-Behaviour/dashboard/default.json new file mode 100644 index 00000000..6c685810 --- /dev/null +++ b/BMW-Dynatrace-config/CD_Connected-User-Behaviour/dashboard/default.json @@ -0,0 +1,308 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.214.107.20210407-223952" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": true, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "timeframe": "-24h to now" + }, + "tags": [ + "{{.tag}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 228, + "left": 38, + "width": 1064, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Failure rate (HTTP 4xx/5xx errors)", + "defaultName": "Custom chart", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [ + { + "metric": "builtin:service.errors.fourxx.rate", + "aggregation": "AVG", + "type": "BAR", + "entityType": "SERVICE", + "dimensions": [], + "sortAscending": false, + "sortColumn": false, + "aggregationRate": "TOTAL" + }, + { + "metric": "builtin:service.errors.fivexx.rate", + "aggregation": "AVG", + "type": "BAR", + "entityType": "SERVICE", + "dimensions": [], + "sortAscending": false, + "sortColumn": true, + "aggregationRate": "TOTAL" + } + ], + "resultMetadata": { + "nullbuiltin:service.errors.fivexx.rate|AVG|TOTAL|BAR|SERVICE": { + "lastModified": 1617956393463, + "customColor": "#ff0000" + }, + "nullbuiltin:service.errors.fourxx.rate|AVG|TOTAL|BAR|SERVICE": { + "lastModified": 1617956441725, + "customColor": "#fff29a" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:{{.env}}", + "Component:{{.tag}}" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 38, + "left": 950, + "width": 152, + "height": 152 + }, + "tileFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + } + }, + { + "name": "Overall Health", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 0, + "left": 38, + "width": 1064, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 532, + "left": 38, + "width": 1064, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 570, + "left": 38, + "width": 1064, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Request Count and Number of Errors", + "defaultName": "Custom chart", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [ + { + "metric": "builtin:service.response.time", + "aggregation": "AVG", + "type": "LINE", + "entityType": "SERVICE", + "dimensions": [], + "sortAscending": false, + "sortColumn": false, + "aggregationRate": "TOTAL" + }, + { + "metric": "builtin:service.requestCount.total", + "aggregation": "NONE", + "type": "BAR", + "entityType": "SERVICE", + "dimensions": [], + "sortAscending": false, + "sortColumn": false, + "aggregationRate": "TOTAL" + }, + { + "metric": "builtin:service.errors.total.count", + "aggregation": "NONE", + "type": "BAR", + "entityType": "SERVICE", + "dimensions": [], + "sortAscending": false, + "sortColumn": true, + "aggregationRate": "TOTAL" + } + ], + "resultMetadata": { + "nullbuiltin:service.requestCount.total|NONE|TOTAL|BAR|SERVICE": { + "lastModified": 1595275720776, + "customColor": "#008cdb" + }, + "nullbuiltin:service.errors.total.count|NONE|TOTAL|BAR|SERVICE": { + "lastModified": 1595275955999, + "customColor": "#ef651f" + }, + "nullbuiltin:service.response.time|AVG|TOTAL|LINE|SERVICE": { + "lastModified": 1595275686773, + "customColor": "#b4e5f9" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:{{.env}}", + "Component:{{.tag}}" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 190, + "left": 38, + "width": 1064, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 38, + "left": 646, + "width": 190, + "height": 152 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:{{.env}}", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 38, + "left": 342, + "width": 190, + "height": 152 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:{{.env}}", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 190, + "height": 152 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:{{.env}}", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_Connected-User-Behaviour/management-zone/CDConnected-User-Behaviour.json b/BMW-Dynatrace-config/CD_Connected-User-Behaviour/management-zone/CDConnected-User-Behaviour.json deleted file mode 100644 index 8c0ffb4c..00000000 --- a/BMW-Dynatrace-config/CD_Connected-User-Behaviour/management-zone/CDConnected-User-Behaviour.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "dimensionalRules": [], - "metadata": { - "clusterVersion": "1.209.98.20210122-102634", - "configurationVersions": [ - 0 - ] - }, - "name": "{{.name}}", - "rules": [ - { - "conditions": [ - { - "comparisonInfo": { - "caseSensitive": true, - "negate": false, - "operator": "BEGINS_WITH", - "type": "STRING", - "value": "empty" - }, - "key": { - "attribute": "SERVICE_AKKA_ACTOR_SYSTEM" - } - } - ], - "enabled": true, - "propagationTypes": [], - "type": "SERVICE" - } - ] -} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_Connected-User-Behaviour/management-zone/README.md b/BMW-Dynatrace-config/CD_Connected-User-Behaviour/management-zone/README.md new file mode 100644 index 00000000..3244b3e6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_Connected-User-Behaviour/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-User-Behaviour/management-zone/default.json b/BMW-Dynatrace-config/CD_Connected-User-Behaviour/management-zone/default.json new file mode 100644 index 00000000..bffa0c3b --- /dev/null +++ b/BMW-Dynatrace-config/CD_Connected-User-Behaviour/management-zone/default.json @@ -0,0 +1,114 @@ +{ + "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" + }, + { + "conditions": [ + { + "comparisonInfo": { + "caseSensitive": true, + "negate": false, + "operator": "CONTAINS", + "type": "STRING", + "value": "{{.tag}}" + }, + "key": { + "attribute": "CLOUD_APPLICATION_NAMESPACE_NAME" + } + } + ], + "enabled": true, + "propagationTypes": [], + "type": "CLOUD_APPLICATION_NAMESPACE" + }, + { + "conditions": [ + { + "comparisonInfo": { + "caseSensitive": true, + "negate": false, + "operator": "CONTAINS", + "type": "STRING", + "value": "{{.tag}}" + }, + "key": { + "attribute": "CLOUD_APPLICATION_NAME" + } + } + ], + "enabled": true, + "propagationTypes": [], + "type": "CLOUD_APPLICATION" + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_Connected-User-Behaviour/management-zone/management-zone.yaml b/BMW-Dynatrace-config/CD_Connected-User-Behaviour/management-zone/management-zone.yaml index d9a9a9e6..3b11804e 100644 --- a/BMW-Dynatrace-config/CD_Connected-User-Behaviour/management-zone/management-zone.yaml +++ b/BMW-Dynatrace-config/CD_Connected-User-Behaviour/management-zone/management-zone.yaml @@ -1,5 +1,6 @@ config: -- CDConnected-User-Behaviour: CDConnected-User-Behaviour.json +- CDConnected-User-Behaviour: default.json CDConnected-User-Behaviour: - name: CD_Connected-User-Behaviour +- tag: Connected-User-Behaviour diff --git a/BMW-Dynatrace-config/CD_Connected-User-Behaviour/notification/README.md b/BMW-Dynatrace-config/CD_Connected-User-Behaviour/notification/README.md new file mode 100644 index 00000000..e1a6af84 --- /dev/null +++ b/BMW-Dynatrace-config/CD_Connected-User-Behaviour/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-User-Behaviour/notification/email.json b/BMW-Dynatrace-config/CD_Connected-User-Behaviour/notification/email.json new file mode 100644 index 00000000..486642a7 --- /dev/null +++ b/BMW-Dynatrace-config/CD_Connected-User-Behaviour/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-User-Behaviour/notification/msTeams.json b/BMW-Dynatrace-config/CD_Connected-User-Behaviour/notification/msTeams.json new file mode 100644 index 00000000..33e92cf6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_Connected-User-Behaviour/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-User-Behaviour/notification/notification.yaml b/BMW-Dynatrace-config/CD_Connected-User-Behaviour/notification/notification.yaml new file mode 100644 index 00000000..7f5f7939 --- /dev/null +++ b/BMW-Dynatrace-config/CD_Connected-User-Behaviour/notification/notification.yaml @@ -0,0 +1,51 @@ +config: +- CDConnected-User-Behaviour-PROD: msTeams.json +- CDConnected-User-Behaviour-INT: msTeams.json + +#Prod notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDConnected-User-Behaviour-PROD: +- name: CD_Connected-User-Behaviour PROD +- alertingProfile: CD_Connected-User-Behaviour/alerting-profile/CDConnected-User-Behaviour-PROD.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDConnected-User-Behaviour-PROD.EMEA-Prod: +- name: CD_Connected-User-Behaviour PROD +- alertingProfile: CD_Connected-User-Behaviour/alerting-profile/CDConnected-User-Behaviour-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDConnected-User-Behaviour-PROD.NA-Prod: +- name: CD_Connected-User-Behaviour PROD +- alertingProfile: CD_Connected-User-Behaviour/alerting-profile/CDConnected-User-Behaviour-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDConnected-User-Behaviour-PROD.CN-Prod: +- name: CD_Connected-User-Behaviour PROD +- alertingProfile: CD_Connected-User-Behaviour/alerting-profile/CDConnected-User-Behaviour-PROD.id +- webhook: https://empty +- skipDeployment: "false" + +#INT notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDConnected-User-Behaviour-INT: +- name: CD_Connected-User-Behaviour INT +- alertingProfile: CD_Connected-User-Behaviour/alerting-profile/CDConnected-User-Behaviour-INT.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDConnected-User-Behaviour-INT.EMEA-PreProd: +- name: CD_Connected-User-Behaviour INT +- alertingProfile: CD_Connected-User-Behaviour/alerting-profile/CDConnected-User-Behaviour-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDConnected-User-Behaviour-INT.NA-PreProd: +- name: CD_Connected-User-Behaviour INT +- alertingProfile: CD_Connected-User-Behaviour/alerting-profile/CDConnected-User-Behaviour-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDConnected-User-Behaviour-INT.CN-PreProd: +- name: CD_Connected-User-Behaviour INT +- alertingProfile: CD_Connected-User-Behaviour/alerting-profile/CDConnected-User-Behaviour-INT.id +- webhook: https://empty +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_Connected-User-Behaviour/synthetic-monitor/README.md b/BMW-Dynatrace-config/CD_Connected-User-Behaviour/synthetic-monitor/README.md new file mode 100644 index 00000000..1695924c --- /dev/null +++ b/BMW-Dynatrace-config/CD_Connected-User-Behaviour/synthetic-monitor/README.md @@ -0,0 +1,4 @@ + +### How to configure synthetics? + +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Synthetic+Monitors) page to configure your synthetics. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_Connected-User-Behaviour/synthetic-monitor/default.json b/BMW-Dynatrace-config/CD_Connected-User-Behaviour/synthetic-monitor/default.json new file mode 100644 index 00000000..cf83039b --- /dev/null +++ b/BMW-Dynatrace-config/CD_Connected-User-Behaviour/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-User-Behaviour/synthetic-monitor/synthetic-monitor.yaml b/BMW-Dynatrace-config/CD_Connected-User-Behaviour/synthetic-monitor/synthetic-monitor.yaml new file mode 100644 index 00000000..94c4a4dc --- /dev/null +++ b/BMW-Dynatrace-config/CD_Connected-User-Behaviour/synthetic-monitor/synthetic-monitor.yaml @@ -0,0 +1,10 @@ +config: +- Connected-User-Behaviour: default.json + +Connected-User-Behaviour: +- name: CD_Connected-User-Behaviour - +- mzName: CD_Connected-User-Behaviour/management-zone/CDConnected-User-Behaviour.name +- mzId: CD_Connected-User-Behaviour/management-zone/CDConnected-User-Behaviour.id +- endpoint: +- location: +- skipDeployment: "true" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ConnectedDrive-Internet-Portal/alerting-profile/CDCDIP.json b/BMW-Dynatrace-config/CD_ConnectedDrive-Internet-Portal/alerting-profile/CDCDIP.json deleted file mode 100644 index 14a4db0b..00000000 --- a/BMW-Dynatrace-config/CD_ConnectedDrive-Internet-Portal/alerting-profile/CDCDIP.json +++ /dev/null @@ -1,63 +0,0 @@ -{ - "displayName": "{{.name}}", - "eventTypeFilters": [], - "managementZoneId": 1777058043439209500, - "metadata": { - "clusterVersion": "1.209.98.20210122-102634", - "configurationVersions": [], - "currentConfigurationVersions": [ - "0" - ] - }, - "mzId": "1777058043439209450", - "rules": [ - { - "delayInMinutes": 0, - "severityLevel": "AVAILABILITY", - "tagFilter": { - "includeMode": "NONE", - "tagFilters": [] - } - }, - { - "delayInMinutes": 0, - "severityLevel": "ERROR", - "tagFilter": { - "includeMode": "NONE", - "tagFilters": [] - } - }, - { - "delayInMinutes": 30, - "severityLevel": "PERFORMANCE", - "tagFilter": { - "includeMode": "NONE", - "tagFilters": [] - } - }, - { - "delayInMinutes": 30, - "severityLevel": "RESOURCE_CONTENTION", - "tagFilter": { - "includeMode": "NONE", - "tagFilters": [] - } - }, - { - "delayInMinutes": 0, - "severityLevel": "CUSTOM_ALERT", - "tagFilter": { - "includeMode": "NONE", - "tagFilters": [] - } - }, - { - "delayInMinutes": 0, - "severityLevel": "MONITORING_UNAVAILABLE", - "tagFilter": { - "includeMode": "NONE", - "tagFilters": [] - } - } - ] -} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ConnectedDrive-Internet-Portal/alerting-profile/alerting-profile.yaml b/BMW-Dynatrace-config/CD_ConnectedDrive-Internet-Portal/alerting-profile/alerting-profile.yaml index 41cbff20..01277a14 100644 --- a/BMW-Dynatrace-config/CD_ConnectedDrive-Internet-Portal/alerting-profile/alerting-profile.yaml +++ b/BMW-Dynatrace-config/CD_ConnectedDrive-Internet-Portal/alerting-profile/alerting-profile.yaml @@ -1,5 +1,60 @@ config: -- CDCDIP: CDCDIP.json +- CDConnectedDrive-Internet-Portal-PROD: default.json +- CDConnectedDrive-Internet-Portal-INT: default.json -CDCDIP: -- name: CD_CDIP +#Prod alerting profiles for EMEA/NA/CN +#Dry-run needed for all hubs +CDConnectedDrive-Internet-Portal-PROD: +- name: CD_ConnectedDrive-Internet-Portal PROD +- tag: ConnectedDrive-Internet-Portal +- mzId: CD_ConnectedDrive-Internet-Portal/management-zone/CDConnectedDrive-Internet-Portal.id +- env: PROD +- skipDeployment: "true" +#Configuration +CDConnectedDrive-Internet-Portal-PROD.EMEA-Prod: +- name: CD_ConnectedDrive-Internet-Portal PROD +- tag: ConnectedDrive-Internet-Portal +- mzId: CD_ConnectedDrive-Internet-Portal/management-zone/CDConnectedDrive-Internet-Portal.id +- env: PROD +- skipDeployment: "false" +CDConnectedDrive-Internet-Portal-PROD.NA-Prod: +- name: CD_ConnectedDrive-Internet-Portal PROD +- tag: ConnectedDrive-Internet-Portal +- mzId: CD_ConnectedDrive-Internet-Portal/management-zone/CDConnectedDrive-Internet-Portal.id +- env: PROD +- skipDeployment: "false" +CDConnectedDrive-Internet-Portal-PROD.CN-Prod: +- name: CD_ConnectedDrive-Internet-Portal PROD +- tag: ConnectedDrive-Internet-Portal +- mzId: CD_ConnectedDrive-Internet-Portal/management-zone/CDConnectedDrive-Internet-Portal.id +- env: PROD +- skipDeployment: "false" + + +#INT alerting profiles for EMEA/NA/CN +#Dry-run needed for all hubs +CDConnectedDrive-Internet-Portal-INT: +- name: CD_ConnectedDrive-Internet-Portal INT +- tag: ConnectedDrive-Internet-Portal +- mzId: CD_ConnectedDrive-Internet-Portal/management-zone/CDConnectedDrive-Internet-Portal.id +- env: INT +- skipDeployment: "true" +#Configuration +CDConnectedDrive-Internet-Portal-INT.EMEA-PreProd: +- name: CD_ConnectedDrive-Internet-Portal INT +- tag: ConnectedDrive-Internet-Portal +- mzId: CD_ConnectedDrive-Internet-Portal/management-zone/CDConnectedDrive-Internet-Portal.id +- env: INT +- skipDeployment: "false" +CDConnectedDrive-Internet-Portal-INT.NA-PreProd: +- name: CD_ConnectedDrive-Internet-Portal INT +- tag: ConnectedDrive-Internet-Portal +- mzId: CD_ConnectedDrive-Internet-Portal/management-zone/CDConnectedDrive-Internet-Portal.id +- env: INT +- skipDeployment: "false" +CDConnectedDrive-Internet-Portal-INT.CN-PreProd: +- name: CD_ConnectedDrive-Internet-Portal INT +- tag: ConnectedDrive-Internet-Portal +- mzId: CD_ConnectedDrive-Internet-Portal/management-zone/CDConnectedDrive-Internet-Portal.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ConnectedDrive-Internet-Portal/alerting-profile/default.json b/BMW-Dynatrace-config/CD_ConnectedDrive-Internet-Portal/alerting-profile/default.json new file mode 100644 index 00000000..681a4c64 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ConnectedDrive-Internet-Portal/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_ConnectedDrive-Internet-Portal/calculated-metrics-service/README.md b/BMW-Dynatrace-config/CD_ConnectedDrive-Internet-Portal/calculated-metrics-service/README.md new file mode 100644 index 00000000..0bf8efbc --- /dev/null +++ b/BMW-Dynatrace-config/CD_ConnectedDrive-Internet-Portal/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_ConnectedDrive-Internet-Portal/conditional-naming-processgroup/README.md b/BMW-Dynatrace-config/CD_ConnectedDrive-Internet-Portal/conditional-naming-processgroup/README.md new file mode 100644 index 00000000..f94196a5 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ConnectedDrive-Internet-Portal/conditional-naming-processgroup/README.md @@ -0,0 +1,67 @@ +### Process Group Detection Rules and Naming + +#### Detection Rule or Naming? + +For the explanation, we're using a real example of the Infotainment application: + +!(PGNaming1)[../../../../img/PGNaming1.PNG] + +Before working with your dashboards and alerting profiles, an important task to do when working with Dynatrace is checking +the structure of your applications (process groups). You can do that clicking under *technologies* and filter using your +application Management Zone. + +In the picture above, there are two Process Groups called bon-information-prod. **If you see duplicated process groups like in** +**this case, you MUST follow this guideline** + +Next step would be to open both process groups and compare the metadata. In that way, you can identify if all process instances are +part of the same application or not. An easy way to do that is asking yourself: how many instances of my application do i have? + +If you have 4 instances in total and you're able to see 2 in one PG and other 2 in other PG it means that **they are part of the ** +**same application** + +Another situation could be that checking on the metadata, then you see that are **two different application** and Dynatrace is just naming +the process group in the same way + +*Same application* +- Problem: Dynatrace is creating two different process groups, what transalates in two separated services for the same application. Instead of +seeing all the traffic in one service, you will have it splitted and it will complicate your monitoring +- Solution: create a process group detection rule. Contact Dynatrace Expert + +*Different application* +- Problem: Dynatrace is just naming in the same way applications that are different. +- Solution: This case is less severe, since it can be fixed with a process group naming rule. + + +What about our example? +!(PGNaming2)[../../../../img/PGNaming2.PNG] +!(PGNaming3)[../../../../img/PGNaming3.PNG] + +Based on the feedback of the infotaiment team, each process group is a different application (microservice) and it's visible in the kubernetes container/workload +within the metadata of each Process Group. + +#### How to create a Process Group Detection Rule +1. Open the *conditional-naming-processgroup.yaml* file and create a rule that looks like this: +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName} +- tag: Infotainment +- skipDeployment: false +``` +The result of the rule will be renaming the PG to this: +``` +bon-information-prod ipa +bon-information-prod rsl +``` + +Other possible placeholders that you can use are for example: +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName/[^\\-]*$} +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesFullPodName/buffet-(.*?)-} +{ProcessGroup:DetectedName} - {HostGroup:Name/[^\\_]*$} +{ProcessGroup:KubernetesNamespace} +{ProcessGroup:CommandLineArgs/.*?\\-f\\s\\/www\\/(.*?)\\/generated\\/httpd\\.conf.*?} + +You can combine different ones. Check the (documentation)[link] for more \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ConnectedDrive-Internet-Portal/conditional-naming-processgroup/conditional-naming-processgroup.yaml b/BMW-Dynatrace-config/CD_ConnectedDrive-Internet-Portal/conditional-naming-processgroup/conditional-naming-processgroup.yaml new file mode 100644 index 00000000..501bb3b1 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ConnectedDrive-Internet-Portal/conditional-naming-processgroup/conditional-naming-processgroup.yaml @@ -0,0 +1,8 @@ +config: +- CDConnectedDrive-Internet-Portal: template.json + +CDConnectedDrive-Internet-Portal: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: ConnectedDrive-Internet-Portal +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_ConnectedDrive-Internet-Portal/conditional-naming-processgroup/template.json b/BMW-Dynatrace-config/CD_ConnectedDrive-Internet-Portal/conditional-naming-processgroup/template.json new file mode 100644 index 00000000..7c039808 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ConnectedDrive-Internet-Portal/conditional-naming-processgroup/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "type": "PROCESS_GROUP" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ConnectedDrive-Internet-Portal/conditional-naming-service/README.md b/BMW-Dynatrace-config/CD_ConnectedDrive-Internet-Portal/conditional-naming-service/README.md new file mode 100644 index 00000000..c34ef308 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ConnectedDrive-Internet-Portal/conditional-naming-service/README.md @@ -0,0 +1,35 @@ +### Service Naming Rules + +A typical case could be that you access to *Transaction & Services* and you find two services that are exactly the same: +*DataDownloadV1* +*DataDownloadV1* + +If you drilldown into the service and you check in the process group, you may have a PROD and a E2E for each service. + +*Note: if you see that both process group are exactly the same, please contact a Dynatrace expert to create a Process* +*Group detection rule* + +In the case the PG are PROD and E2E, then we need to create a rule that looks like this: + +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {Service:DetectedName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +- tag: Infotainment +- skipDeployment: false +``` + +The rule will get the Service Detected Name (current name) and it will extract (with a regex) the part of the kubernetes namespace after the "-", so -prod or -e2e, resulting in: +*DataDownloadV1 - prod* +*DataDownloadV1 - e2e* + +Now, services will be easy to identify. + +You can create rules based on any property/metadata. Some other placeholder's eamples: +{Service:DatabaseName} - E2E +{Service:WebServiceName} - {ProcessGroup:Kubernetes:microservice} - {ProcessGroup:Kubernetes:environment} +{Service:DetectedName} - {ProcessGroup:KubernetesContainerName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +{Service:DetectedName} - {ProcessGroup:SpringBootProfileName/[^\\-]*$} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ConnectedDrive-Internet-Portal/conditional-naming-service/conditional-naming-service.yaml b/BMW-Dynatrace-config/CD_ConnectedDrive-Internet-Portal/conditional-naming-service/conditional-naming-service.yaml new file mode 100644 index 00000000..501bb3b1 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ConnectedDrive-Internet-Portal/conditional-naming-service/conditional-naming-service.yaml @@ -0,0 +1,8 @@ +config: +- CDConnectedDrive-Internet-Portal: template.json + +CDConnectedDrive-Internet-Portal: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: ConnectedDrive-Internet-Portal +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_ConnectedDrive-Internet-Portal/conditional-naming-service/template.json b/BMW-Dynatrace-config/CD_ConnectedDrive-Internet-Portal/conditional-naming-service/template.json new file mode 100644 index 00000000..5d4fac56 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ConnectedDrive-Internet-Portal/conditional-naming-service/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "type": "SERVICE" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ConnectedDrive-Internet-Portal/custom-service-java/README.md b/BMW-Dynatrace-config/CD_ConnectedDrive-Internet-Portal/custom-service-java/README.md new file mode 100644 index 00000000..5f35e5c1 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ConnectedDrive-Internet-Portal/custom-service-java/README.md @@ -0,0 +1,4 @@ + +### How to configure custom services? + +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Custom+Services) page to configure your custom services. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ConnectedDrive-Internet-Portal/custom-service-java/custom-service-java.yaml b/BMW-Dynatrace-config/CD_ConnectedDrive-Internet-Portal/custom-service-java/custom-service-java.yaml new file mode 100644 index 00000000..25f8a028 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ConnectedDrive-Internet-Portal/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_ConnectedDrive-Internet-Portal/custom-service-java/template-1-1.json b/BMW-Dynatrace-config/CD_ConnectedDrive-Internet-Portal/custom-service-java/template-1-1.json new file mode 100644 index 00000000..b3003515 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ConnectedDrive-Internet-Portal/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_ConnectedDrive-Internet-Portal/dashboard/README.md b/BMW-Dynatrace-config/CD_ConnectedDrive-Internet-Portal/dashboard/README.md new file mode 100644 index 00000000..dffcdc8a --- /dev/null +++ b/BMW-Dynatrace-config/CD_ConnectedDrive-Internet-Portal/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_ConnectedDrive-Internet-Portal/dashboard/dashboard.yaml b/BMW-Dynatrace-config/CD_ConnectedDrive-Internet-Portal/dashboard/dashboard.yaml new file mode 100644 index 00000000..c0781312 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ConnectedDrive-Internet-Portal/dashboard/dashboard.yaml @@ -0,0 +1,127 @@ +config: +- CDConnectedDrive-Internet-Portal-PROD: default.json +- CDConnectedDrive-Internet-Portal-E2E: default.json +- CDConnectedDrive-Internet-Portal-INT: default.json +- CDConnectedDrive-Internet-Portal-TEST: default.json + +#PROD dashboards for EMEA/NA/CN Prod +#Dry-run needed for all hubs +CDConnectedDrive-Internet-Portal-PROD: +- name: CD_ConnectedDrive-Internet-Portal PROD +- mzName: CD_ConnectedDrive-Internet-Portal/management-zone/CDConnectedDrive-Internet-Portal.name +- mzId: CD_ConnectedDrive-Internet-Portal/management-zone/CDConnectedDrive-Internet-Portal.id +- env: PROD +- skipDeployment: "true" +#Configuration +CDConnectedDrive-Internet-Portal-PROD.EMEA-Prod: +- name: CD_ConnectedDrive-Internet-Portal PROD +- mzName: CD_ConnectedDrive-Internet-Portal/management-zone/CDConnectedDrive-Internet-Portal.name +- mzId: CD_ConnectedDrive-Internet-Portal/management-zone/CDConnectedDrive-Internet-Portal.id +- tag: ConnectedDrive-Internet-Portal +- env: PROD +- skipDeployment: "false" +CDConnectedDrive-Internet-Portal-PROD.NA-Prod: +- name: CD_ConnectedDrive-Internet-Portal PROD +- mzName: CD_ConnectedDrive-Internet-Portal/management-zone/CDConnectedDrive-Internet-Portal.name +- mzId: CD_ConnectedDrive-Internet-Portal/management-zone/CDConnectedDrive-Internet-Portal.id +- tag: ConnectedDrive-Internet-Portal +- env: PROD +- skipDeployment: "false" +CDConnectedDrive-Internet-Portal-PROD.CN-Prod: +- name: CD_ConnectedDrive-Internet-Portal PROD +- mzName: CD_ConnectedDrive-Internet-Portal/management-zone/CDConnectedDrive-Internet-Portal.name +- mzId: CD_ConnectedDrive-Internet-Portal/management-zone/CDConnectedDrive-Internet-Portal.id +- tag: ConnectedDrive-Internet-Portal +- env: PROD +- skipDeployment: "false" + +#E2E dashboards for EMEA/NA/CN E2E +#Dry-run needed for all hubs +CDConnectedDrive-Internet-Portal-E2E: +- name: CD_ConnectedDrive-Internet-Portal E2E +- mzName: CD_ConnectedDrive-Internet-Portal/management-zone/CDConnectedDrive-Internet-Portal.name +- mzId: CD_ConnectedDrive-Internet-Portal/management-zone/CDConnectedDrive-Internet-Portal.id +- env: E2E +- skipDeployment: "true" +#Configuration +CDConnectedDrive-Internet-Portal-E2E.EMEA-Prod: +- name: CD_ConnectedDrive-Internet-Portal E2E +- mzName: CD_ConnectedDrive-Internet-Portal/management-zone/CDConnectedDrive-Internet-Portal.name +- mzId: CD_ConnectedDrive-Internet-Portal/management-zone/CDConnectedDrive-Internet-Portal.id +- env: E2E +- tag: ConnectedDrive-Internet-Portal +- skipDeployment: "true" +CDConnectedDrive-Internet-Portal-E2E.NA-Prod: +- name: CD_ConnectedDrive-Internet-Portal E2E +- mzName: CD_ConnectedDrive-Internet-Portal/management-zone/CDConnectedDrive-Internet-Portal.name +- mzId: CD_ConnectedDrive-Internet-Portal/management-zone/CDConnectedDrive-Internet-Portal.id +- env: E2E +- tag: ConnectedDrive-Internet-Portal +- skipDeployment: "true" +CDConnectedDrive-Internet-Portal-E2E.CN-Prod: +- name: CD_ConnectedDrive-Internet-Portal E2E +- mzName: CD_ConnectedDrive-Internet-Portal/management-zone/CDConnectedDrive-Internet-Portal.name +- mzId: CD_ConnectedDrive-Internet-Portal/management-zone/CDConnectedDrive-Internet-Portal.id +- env: E2E +- tag: ConnectedDrive-Internet-Portal +- skipDeployment: "true" + +#INT dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDConnectedDrive-Internet-Portal-INT: +- name: CD_ConnectedDrive-Internet-Portal INT +- mzName: CD_ConnectedDrive-Internet-Portal/management-zone/CDConnectedDrive-Internet-Portal.name +- mzId: CD_ConnectedDrive-Internet-Portal/management-zone/CDConnectedDrive-Internet-Portal.id +- env: INT +- tag: ConnectedDrive-Internet-Portal +- skipDeployment: "true" +#Configuration +CDConnectedDrive-Internet-Portal-INT.EMEA-PreProd: +- name: CD_ConnectedDrive-Internet-Portal INT +- mzName: CD_ConnectedDrive-Internet-Portal/management-zone/CDConnectedDrive-Internet-Portal.name +- mzId: CD_ConnectedDrive-Internet-Portal/management-zone/CDConnectedDrive-Internet-Portal.id +- env: INT +- tag: ConnectedDrive-Internet-Portal +- skipDeployment: "false" +CDConnectedDrive-Internet-Portal-INT.NA-PreProd: +- name: CD_ConnectedDrive-Internet-Portal INT +- mzName: CD_ConnectedDrive-Internet-Portal/management-zone/CDConnectedDrive-Internet-Portal.name +- mzId: CD_ConnectedDrive-Internet-Portal/management-zone/CDConnectedDrive-Internet-Portal.id +- env: INT +- skipDeployment: "false" +CDConnectedDrive-Internet-Portal-INT.CN-PreProd: +- name: CD_ConnectedDrive-Internet-Portal INT +- mzName: CD_ConnectedDrive-Internet-Portal/management-zone/CDConnectedDrive-Internet-Portal.name +- mzId: CD_ConnectedDrive-Internet-Portal/management-zone/CDConnectedDrive-Internet-Portal.id +- env: INT +- skipDeployment: "false" + +#TEST dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDConnectedDrive-Internet-Portal-TEST: +- name: CD_ConnectedDrive-Internet-Portal TEST +- mzName: CD_ConnectedDrive-Internet-Portal/management-zone/CDConnectedDrive-Internet-Portal.name +- mzId: CD_ConnectedDrive-Internet-Portal/management-zone/CDConnectedDrive-Internet-Portal.id +- tag: ConnectedDrive-Internet-Portal +- env: TEST +- skipDeployment: "true" +#Configuration +CDConnectedDrive-Internet-Portal-TEST.EMEA-PreProd: +- name: CD_ConnectedDrive-Internet-Portal TEST +- mzName: CD_ConnectedDrive-Internet-Portal/management-zone/CDConnectedDrive-Internet-Portal.name +- mzId: CD_ConnectedDrive-Internet-Portal/management-zone/CDConnectedDrive-Internet-Portal.id +- tag: ConnectedDrive-Internet-Portal +- env: TEST +- skipDeployment: "false" +CDConnectedDrive-Internet-Portal-TEST.NA-PreProd: +- name: CD_ConnectedDrive-Internet-Portal TEST +- mzName: CD_ConnectedDrive-Internet-Portal/management-zone/CDConnectedDrive-Internet-Portal.name +- mzId: CD_ConnectedDrive-Internet-Portal/management-zone/CDConnectedDrive-Internet-Portal.id +- env: TEST +- skipDeployment: "false" +CDConnectedDrive-Internet-Portal-TEST.CN-PreProd: +- name: CD_ConnectedDrive-Internet-Portal TEST +- mzName: CD_ConnectedDrive-Internet-Portal/management-zone/CDConnectedDrive-Internet-Portal.name +- mzId: CD_ConnectedDrive-Internet-Portal/management-zone/CDConnectedDrive-Internet-Portal.id +- env: TEST +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ConnectedDrive-Internet-Portal/dashboard/default.json b/BMW-Dynatrace-config/CD_ConnectedDrive-Internet-Portal/dashboard/default.json new file mode 100644 index 00000000..6c685810 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ConnectedDrive-Internet-Portal/dashboard/default.json @@ -0,0 +1,308 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.214.107.20210407-223952" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": true, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "timeframe": "-24h to now" + }, + "tags": [ + "{{.tag}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 228, + "left": 38, + "width": 1064, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Failure rate (HTTP 4xx/5xx errors)", + "defaultName": "Custom chart", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [ + { + "metric": "builtin:service.errors.fourxx.rate", + "aggregation": "AVG", + "type": "BAR", + "entityType": "SERVICE", + "dimensions": [], + "sortAscending": false, + "sortColumn": false, + "aggregationRate": "TOTAL" + }, + { + "metric": "builtin:service.errors.fivexx.rate", + "aggregation": "AVG", + "type": "BAR", + "entityType": "SERVICE", + "dimensions": [], + "sortAscending": false, + "sortColumn": true, + "aggregationRate": "TOTAL" + } + ], + "resultMetadata": { + "nullbuiltin:service.errors.fivexx.rate|AVG|TOTAL|BAR|SERVICE": { + "lastModified": 1617956393463, + "customColor": "#ff0000" + }, + "nullbuiltin:service.errors.fourxx.rate|AVG|TOTAL|BAR|SERVICE": { + "lastModified": 1617956441725, + "customColor": "#fff29a" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:{{.env}}", + "Component:{{.tag}}" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 38, + "left": 950, + "width": 152, + "height": 152 + }, + "tileFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + } + }, + { + "name": "Overall Health", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 0, + "left": 38, + "width": 1064, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 532, + "left": 38, + "width": 1064, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 570, + "left": 38, + "width": 1064, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Request Count and Number of Errors", + "defaultName": "Custom chart", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [ + { + "metric": "builtin:service.response.time", + "aggregation": "AVG", + "type": "LINE", + "entityType": "SERVICE", + "dimensions": [], + "sortAscending": false, + "sortColumn": false, + "aggregationRate": "TOTAL" + }, + { + "metric": "builtin:service.requestCount.total", + "aggregation": "NONE", + "type": "BAR", + "entityType": "SERVICE", + "dimensions": [], + "sortAscending": false, + "sortColumn": false, + "aggregationRate": "TOTAL" + }, + { + "metric": "builtin:service.errors.total.count", + "aggregation": "NONE", + "type": "BAR", + "entityType": "SERVICE", + "dimensions": [], + "sortAscending": false, + "sortColumn": true, + "aggregationRate": "TOTAL" + } + ], + "resultMetadata": { + "nullbuiltin:service.requestCount.total|NONE|TOTAL|BAR|SERVICE": { + "lastModified": 1595275720776, + "customColor": "#008cdb" + }, + "nullbuiltin:service.errors.total.count|NONE|TOTAL|BAR|SERVICE": { + "lastModified": 1595275955999, + "customColor": "#ef651f" + }, + "nullbuiltin:service.response.time|AVG|TOTAL|LINE|SERVICE": { + "lastModified": 1595275686773, + "customColor": "#b4e5f9" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:{{.env}}", + "Component:{{.tag}}" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 190, + "left": 38, + "width": 1064, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 38, + "left": 646, + "width": 190, + "height": 152 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:{{.env}}", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 38, + "left": 342, + "width": 190, + "height": 152 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:{{.env}}", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 190, + "height": 152 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:{{.env}}", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ConnectedDrive-Internet-Portal/management-zone/CDConnectedDrive-Internet-Portal.json b/BMW-Dynatrace-config/CD_ConnectedDrive-Internet-Portal/management-zone/CDConnectedDrive-Internet-Portal.json deleted file mode 100644 index 393accaf..00000000 --- a/BMW-Dynatrace-config/CD_ConnectedDrive-Internet-Portal/management-zone/CDConnectedDrive-Internet-Portal.json +++ /dev/null @@ -1,58 +0,0 @@ -{ - "dimensionalRules": [], - "metadata": { - "clusterVersion": "1.209.98.20210122-102634", - "configurationVersions": [ - 0 - ] - }, - "name": "{{.name}}", - "rules": [ - { - "conditions": [ - { - "comparisonInfo": { - "negate": false, - "operator": "EQUALS", - "type": "TAG", - "value": { - "context": "CONTEXTLESS", - "key": "Component", - "value": "CDIP" - } - }, - "key": { - "attribute": "PROCESS_GROUP_TAGS" - } - } - ], - "enabled": true, - "propagationTypes": [ - "PROCESS_GROUP_TO_SERVICE" - ], - "type": "PROCESS_GROUP" - }, - { - "conditions": [ - { - "comparisonInfo": { - "negate": false, - "operator": "EQUALS", - "type": "TAG", - "value": { - "context": "CONTEXTLESS", - "key": "Component", - "value": "CDIP" - } - }, - "key": { - "attribute": "WEB_APPLICATION_TAGS" - } - } - ], - "enabled": true, - "propagationTypes": [], - "type": "WEB_APPLICATION" - } - ] -} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ConnectedDrive-Internet-Portal/management-zone/README.md b/BMW-Dynatrace-config/CD_ConnectedDrive-Internet-Portal/management-zone/README.md new file mode 100644 index 00000000..3244b3e6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ConnectedDrive-Internet-Portal/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_ConnectedDrive-Internet-Portal/management-zone/default.json b/BMW-Dynatrace-config/CD_ConnectedDrive-Internet-Portal/management-zone/default.json new file mode 100644 index 00000000..bffa0c3b --- /dev/null +++ b/BMW-Dynatrace-config/CD_ConnectedDrive-Internet-Portal/management-zone/default.json @@ -0,0 +1,114 @@ +{ + "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" + }, + { + "conditions": [ + { + "comparisonInfo": { + "caseSensitive": true, + "negate": false, + "operator": "CONTAINS", + "type": "STRING", + "value": "{{.tag}}" + }, + "key": { + "attribute": "CLOUD_APPLICATION_NAMESPACE_NAME" + } + } + ], + "enabled": true, + "propagationTypes": [], + "type": "CLOUD_APPLICATION_NAMESPACE" + }, + { + "conditions": [ + { + "comparisonInfo": { + "caseSensitive": true, + "negate": false, + "operator": "CONTAINS", + "type": "STRING", + "value": "{{.tag}}" + }, + "key": { + "attribute": "CLOUD_APPLICATION_NAME" + } + } + ], + "enabled": true, + "propagationTypes": [], + "type": "CLOUD_APPLICATION" + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ConnectedDrive-Internet-Portal/management-zone/management-zone.yaml b/BMW-Dynatrace-config/CD_ConnectedDrive-Internet-Portal/management-zone/management-zone.yaml index 95a69571..4fe9d0e2 100644 --- a/BMW-Dynatrace-config/CD_ConnectedDrive-Internet-Portal/management-zone/management-zone.yaml +++ b/BMW-Dynatrace-config/CD_ConnectedDrive-Internet-Portal/management-zone/management-zone.yaml @@ -1,5 +1,6 @@ config: -- CDConnectedDrive-Internet-Portal: CDConnectedDrive-Internet-Portal.json +- CDConnectedDrive-Internet-Portal: default.json CDConnectedDrive-Internet-Portal: - name: CD_ConnectedDrive-Internet-Portal +- tag: ConnectedDrive-Internet-Portal diff --git a/BMW-Dynatrace-config/CD_ConnectedDrive-Internet-Portal/notification/README.md b/BMW-Dynatrace-config/CD_ConnectedDrive-Internet-Portal/notification/README.md new file mode 100644 index 00000000..e1a6af84 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ConnectedDrive-Internet-Portal/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_ConnectedDrive-Internet-Portal/notification/email.json b/BMW-Dynatrace-config/CD_ConnectedDrive-Internet-Portal/notification/email.json new file mode 100644 index 00000000..486642a7 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ConnectedDrive-Internet-Portal/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_ConnectedDrive-Internet-Portal/notification/msTeams.json b/BMW-Dynatrace-config/CD_ConnectedDrive-Internet-Portal/notification/msTeams.json new file mode 100644 index 00000000..33e92cf6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ConnectedDrive-Internet-Portal/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_ConnectedDrive-Internet-Portal/notification/notification.yaml b/BMW-Dynatrace-config/CD_ConnectedDrive-Internet-Portal/notification/notification.yaml new file mode 100644 index 00000000..a9831fcd --- /dev/null +++ b/BMW-Dynatrace-config/CD_ConnectedDrive-Internet-Portal/notification/notification.yaml @@ -0,0 +1,51 @@ +config: +- CDConnectedDrive-Internet-Portal-PROD: msTeams.json +- CDConnectedDrive-Internet-Portal-INT: msTeams.json + +#Prod notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDConnectedDrive-Internet-Portal-PROD: +- name: CD_ConnectedDrive-Internet-Portal PROD +- alertingProfile: CD_ConnectedDrive-Internet-Portal/alerting-profile/CDConnectedDrive-Internet-Portal-PROD.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDConnectedDrive-Internet-Portal-PROD.EMEA-Prod: +- name: CD_ConnectedDrive-Internet-Portal PROD +- alertingProfile: CD_ConnectedDrive-Internet-Portal/alerting-profile/CDConnectedDrive-Internet-Portal-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDConnectedDrive-Internet-Portal-PROD.NA-Prod: +- name: CD_ConnectedDrive-Internet-Portal PROD +- alertingProfile: CD_ConnectedDrive-Internet-Portal/alerting-profile/CDConnectedDrive-Internet-Portal-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDConnectedDrive-Internet-Portal-PROD.CN-Prod: +- name: CD_ConnectedDrive-Internet-Portal PROD +- alertingProfile: CD_ConnectedDrive-Internet-Portal/alerting-profile/CDConnectedDrive-Internet-Portal-PROD.id +- webhook: https://empty +- skipDeployment: "false" + +#INT notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDConnectedDrive-Internet-Portal-INT: +- name: CD_ConnectedDrive-Internet-Portal INT +- alertingProfile: CD_ConnectedDrive-Internet-Portal/alerting-profile/CDConnectedDrive-Internet-Portal-INT.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDConnectedDrive-Internet-Portal-INT.EMEA-PreProd: +- name: CD_ConnectedDrive-Internet-Portal INT +- alertingProfile: CD_ConnectedDrive-Internet-Portal/alerting-profile/CDConnectedDrive-Internet-Portal-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDConnectedDrive-Internet-Portal-INT.NA-PreProd: +- name: CD_ConnectedDrive-Internet-Portal INT +- alertingProfile: CD_ConnectedDrive-Internet-Portal/alerting-profile/CDConnectedDrive-Internet-Portal-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDConnectedDrive-Internet-Portal-INT.CN-PreProd: +- name: CD_ConnectedDrive-Internet-Portal INT +- alertingProfile: CD_ConnectedDrive-Internet-Portal/alerting-profile/CDConnectedDrive-Internet-Portal-INT.id +- webhook: https://empty +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ConnectedDrive-Internet-Portal/synthetic-monitor/README.md b/BMW-Dynatrace-config/CD_ConnectedDrive-Internet-Portal/synthetic-monitor/README.md new file mode 100644 index 00000000..1695924c --- /dev/null +++ b/BMW-Dynatrace-config/CD_ConnectedDrive-Internet-Portal/synthetic-monitor/README.md @@ -0,0 +1,4 @@ + +### How to configure synthetics? + +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Synthetic+Monitors) page to configure your synthetics. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ConnectedDrive-Internet-Portal/synthetic-monitor/default.json b/BMW-Dynatrace-config/CD_ConnectedDrive-Internet-Portal/synthetic-monitor/default.json new file mode 100644 index 00000000..cf83039b --- /dev/null +++ b/BMW-Dynatrace-config/CD_ConnectedDrive-Internet-Portal/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_ConnectedDrive-Internet-Portal/synthetic-monitor/synthetic-monitor.yaml b/BMW-Dynatrace-config/CD_ConnectedDrive-Internet-Portal/synthetic-monitor/synthetic-monitor.yaml new file mode 100644 index 00000000..3b9a63fc --- /dev/null +++ b/BMW-Dynatrace-config/CD_ConnectedDrive-Internet-Portal/synthetic-monitor/synthetic-monitor.yaml @@ -0,0 +1,10 @@ +config: +- ConnectedDrive-Internet-Portal: default.json + +ConnectedDrive-Internet-Portal: +- name: CD_ConnectedDrive-Internet-Portal - +- mzName: CD_ConnectedDrive-Internet-Portal/management-zone/CDConnectedDrive-Internet-Portal.name +- mzId: CD_ConnectedDrive-Internet-Portal/management-zone/CDConnectedDrive-Internet-Portal.id +- endpoint: +- location: +- skipDeployment: "true" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ContentProvider/alerting-profile/alerting-profile.yaml b/BMW-Dynatrace-config/CD_ContentProvider/alerting-profile/alerting-profile.yaml new file mode 100644 index 00000000..e8aeb836 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ContentProvider/alerting-profile/alerting-profile.yaml @@ -0,0 +1,60 @@ +config: +- CDContentProvider-PROD: default.json +- CDContentProvider-INT: default.json + +#Prod alerting profiles for EMEA/NA/CN +#Dry-run needed for all hubs +CDContentProvider-PROD: +- name: CD_ContentProvider PROD +- tag: ContentProvider +- mzId: CD_ContentProvider/management-zone/CDContentProvider.id +- env: PROD +- skipDeployment: "true" +#Configuration +CDContentProvider-PROD.EMEA-Prod: +- name: CD_ContentProvider PROD +- tag: ContentProvider +- mzId: CD_ContentProvider/management-zone/CDContentProvider.id +- env: PROD +- skipDeployment: "false" +CDContentProvider-PROD.NA-Prod: +- name: CD_ContentProvider PROD +- tag: ContentProvider +- mzId: CD_ContentProvider/management-zone/CDContentProvider.id +- env: PROD +- skipDeployment: "false" +CDContentProvider-PROD.CN-Prod: +- name: CD_ContentProvider PROD +- tag: ContentProvider +- mzId: CD_ContentProvider/management-zone/CDContentProvider.id +- env: PROD +- skipDeployment: "false" + + +#INT alerting profiles for EMEA/NA/CN +#Dry-run needed for all hubs +CDContentProvider-INT: +- name: CD_ContentProvider INT +- tag: ContentProvider +- mzId: CD_ContentProvider/management-zone/CDContentProvider.id +- env: INT +- skipDeployment: "true" +#Configuration +CDContentProvider-INT.EMEA-PreProd: +- name: CD_ContentProvider INT +- tag: ContentProvider +- mzId: CD_ContentProvider/management-zone/CDContentProvider.id +- env: INT +- skipDeployment: "false" +CDContentProvider-INT.NA-PreProd: +- name: CD_ContentProvider INT +- tag: ContentProvider +- mzId: CD_ContentProvider/management-zone/CDContentProvider.id +- env: INT +- skipDeployment: "false" +CDContentProvider-INT.CN-PreProd: +- name: CD_ContentProvider INT +- tag: ContentProvider +- mzId: CD_ContentProvider/management-zone/CDContentProvider.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ContentProvider/alerting-profile/default.json b/BMW-Dynatrace-config/CD_ContentProvider/alerting-profile/default.json new file mode 100644 index 00000000..681a4c64 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ContentProvider/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_ContentProvider/calculated-metrics-service/README.md b/BMW-Dynatrace-config/CD_ContentProvider/calculated-metrics-service/README.md new file mode 100644 index 00000000..0bf8efbc --- /dev/null +++ b/BMW-Dynatrace-config/CD_ContentProvider/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_ContentProvider/conditional-naming-processgroup/README.md b/BMW-Dynatrace-config/CD_ContentProvider/conditional-naming-processgroup/README.md new file mode 100644 index 00000000..f94196a5 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ContentProvider/conditional-naming-processgroup/README.md @@ -0,0 +1,67 @@ +### Process Group Detection Rules and Naming + +#### Detection Rule or Naming? + +For the explanation, we're using a real example of the Infotainment application: + +!(PGNaming1)[../../../../img/PGNaming1.PNG] + +Before working with your dashboards and alerting profiles, an important task to do when working with Dynatrace is checking +the structure of your applications (process groups). You can do that clicking under *technologies* and filter using your +application Management Zone. + +In the picture above, there are two Process Groups called bon-information-prod. **If you see duplicated process groups like in** +**this case, you MUST follow this guideline** + +Next step would be to open both process groups and compare the metadata. In that way, you can identify if all process instances are +part of the same application or not. An easy way to do that is asking yourself: how many instances of my application do i have? + +If you have 4 instances in total and you're able to see 2 in one PG and other 2 in other PG it means that **they are part of the ** +**same application** + +Another situation could be that checking on the metadata, then you see that are **two different application** and Dynatrace is just naming +the process group in the same way + +*Same application* +- Problem: Dynatrace is creating two different process groups, what transalates in two separated services for the same application. Instead of +seeing all the traffic in one service, you will have it splitted and it will complicate your monitoring +- Solution: create a process group detection rule. Contact Dynatrace Expert + +*Different application* +- Problem: Dynatrace is just naming in the same way applications that are different. +- Solution: This case is less severe, since it can be fixed with a process group naming rule. + + +What about our example? +!(PGNaming2)[../../../../img/PGNaming2.PNG] +!(PGNaming3)[../../../../img/PGNaming3.PNG] + +Based on the feedback of the infotaiment team, each process group is a different application (microservice) and it's visible in the kubernetes container/workload +within the metadata of each Process Group. + +#### How to create a Process Group Detection Rule +1. Open the *conditional-naming-processgroup.yaml* file and create a rule that looks like this: +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName} +- tag: Infotainment +- skipDeployment: false +``` +The result of the rule will be renaming the PG to this: +``` +bon-information-prod ipa +bon-information-prod rsl +``` + +Other possible placeholders that you can use are for example: +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName/[^\\-]*$} +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesFullPodName/buffet-(.*?)-} +{ProcessGroup:DetectedName} - {HostGroup:Name/[^\\_]*$} +{ProcessGroup:KubernetesNamespace} +{ProcessGroup:CommandLineArgs/.*?\\-f\\s\\/www\\/(.*?)\\/generated\\/httpd\\.conf.*?} + +You can combine different ones. Check the (documentation)[link] for more \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ContentProvider/conditional-naming-processgroup/conditional-naming-processgroup.yaml b/BMW-Dynatrace-config/CD_ContentProvider/conditional-naming-processgroup/conditional-naming-processgroup.yaml new file mode 100644 index 00000000..c11c63e1 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ContentProvider/conditional-naming-processgroup/conditional-naming-processgroup.yaml @@ -0,0 +1,8 @@ +config: +- CDContentProvider: template.json + +CDContentProvider: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: ContentProvider +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_ContentProvider/conditional-naming-processgroup/template.json b/BMW-Dynatrace-config/CD_ContentProvider/conditional-naming-processgroup/template.json new file mode 100644 index 00000000..7c039808 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ContentProvider/conditional-naming-processgroup/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "type": "PROCESS_GROUP" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ContentProvider/conditional-naming-service/README.md b/BMW-Dynatrace-config/CD_ContentProvider/conditional-naming-service/README.md new file mode 100644 index 00000000..c34ef308 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ContentProvider/conditional-naming-service/README.md @@ -0,0 +1,35 @@ +### Service Naming Rules + +A typical case could be that you access to *Transaction & Services* and you find two services that are exactly the same: +*DataDownloadV1* +*DataDownloadV1* + +If you drilldown into the service and you check in the process group, you may have a PROD and a E2E for each service. + +*Note: if you see that both process group are exactly the same, please contact a Dynatrace expert to create a Process* +*Group detection rule* + +In the case the PG are PROD and E2E, then we need to create a rule that looks like this: + +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {Service:DetectedName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +- tag: Infotainment +- skipDeployment: false +``` + +The rule will get the Service Detected Name (current name) and it will extract (with a regex) the part of the kubernetes namespace after the "-", so -prod or -e2e, resulting in: +*DataDownloadV1 - prod* +*DataDownloadV1 - e2e* + +Now, services will be easy to identify. + +You can create rules based on any property/metadata. Some other placeholder's eamples: +{Service:DatabaseName} - E2E +{Service:WebServiceName} - {ProcessGroup:Kubernetes:microservice} - {ProcessGroup:Kubernetes:environment} +{Service:DetectedName} - {ProcessGroup:KubernetesContainerName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +{Service:DetectedName} - {ProcessGroup:SpringBootProfileName/[^\\-]*$} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ContentProvider/conditional-naming-service/conditional-naming-service.yaml b/BMW-Dynatrace-config/CD_ContentProvider/conditional-naming-service/conditional-naming-service.yaml new file mode 100644 index 00000000..c11c63e1 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ContentProvider/conditional-naming-service/conditional-naming-service.yaml @@ -0,0 +1,8 @@ +config: +- CDContentProvider: template.json + +CDContentProvider: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: ContentProvider +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_ContentProvider/conditional-naming-service/template.json b/BMW-Dynatrace-config/CD_ContentProvider/conditional-naming-service/template.json new file mode 100644 index 00000000..5d4fac56 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ContentProvider/conditional-naming-service/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "type": "SERVICE" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ContentProvider/custom-service-java/README.md b/BMW-Dynatrace-config/CD_ContentProvider/custom-service-java/README.md new file mode 100644 index 00000000..5f35e5c1 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ContentProvider/custom-service-java/README.md @@ -0,0 +1,4 @@ + +### How to configure custom services? + +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Custom+Services) page to configure your custom services. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ContentProvider/custom-service-java/custom-service-java.yaml b/BMW-Dynatrace-config/CD_ContentProvider/custom-service-java/custom-service-java.yaml new file mode 100644 index 00000000..25f8a028 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ContentProvider/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_ContentProvider/custom-service-java/template-1-1.json b/BMW-Dynatrace-config/CD_ContentProvider/custom-service-java/template-1-1.json new file mode 100644 index 00000000..b3003515 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ContentProvider/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_ContentProvider/dashboard/README.md b/BMW-Dynatrace-config/CD_ContentProvider/dashboard/README.md new file mode 100644 index 00000000..dffcdc8a --- /dev/null +++ b/BMW-Dynatrace-config/CD_ContentProvider/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_ContentProvider/dashboard/dashboard.yaml b/BMW-Dynatrace-config/CD_ContentProvider/dashboard/dashboard.yaml new file mode 100644 index 00000000..6920e91c --- /dev/null +++ b/BMW-Dynatrace-config/CD_ContentProvider/dashboard/dashboard.yaml @@ -0,0 +1,127 @@ +config: +- CDContentProvider-PROD: default.json +- CDContentProvider-E2E: default.json +- CDContentProvider-INT: default.json +- CDContentProvider-TEST: default.json + +#PROD dashboards for EMEA/NA/CN Prod +#Dry-run needed for all hubs +CDContentProvider-PROD: +- name: CD_ContentProvider PROD +- mzName: CD_ContentProvider/management-zone/CDContentProvider.name +- mzId: CD_ContentProvider/management-zone/CDContentProvider.id +- env: PROD +- skipDeployment: "true" +#Configuration +CDContentProvider-PROD.EMEA-Prod: +- name: CD_ContentProvider PROD +- mzName: CD_ContentProvider/management-zone/CDContentProvider.name +- mzId: CD_ContentProvider/management-zone/CDContentProvider.id +- tag: ContentProvider +- env: PROD +- skipDeployment: "false" +CDContentProvider-PROD.NA-Prod: +- name: CD_ContentProvider PROD +- mzName: CD_ContentProvider/management-zone/CDContentProvider.name +- mzId: CD_ContentProvider/management-zone/CDContentProvider.id +- tag: ContentProvider +- env: PROD +- skipDeployment: "false" +CDContentProvider-PROD.CN-Prod: +- name: CD_ContentProvider PROD +- mzName: CD_ContentProvider/management-zone/CDContentProvider.name +- mzId: CD_ContentProvider/management-zone/CDContentProvider.id +- tag: ContentProvider +- env: PROD +- skipDeployment: "false" + +#E2E dashboards for EMEA/NA/CN E2E +#Dry-run needed for all hubs +CDContentProvider-E2E: +- name: CD_ContentProvider E2E +- mzName: CD_ContentProvider/management-zone/CDContentProvider.name +- mzId: CD_ContentProvider/management-zone/CDContentProvider.id +- env: E2E +- skipDeployment: "true" +#Configuration +CDContentProvider-E2E.EMEA-Prod: +- name: CD_ContentProvider E2E +- mzName: CD_ContentProvider/management-zone/CDContentProvider.name +- mzId: CD_ContentProvider/management-zone/CDContentProvider.id +- env: E2E +- tag: ContentProvider +- skipDeployment: "true" +CDContentProvider-E2E.NA-Prod: +- name: CD_ContentProvider E2E +- mzName: CD_ContentProvider/management-zone/CDContentProvider.name +- mzId: CD_ContentProvider/management-zone/CDContentProvider.id +- env: E2E +- tag: ContentProvider +- skipDeployment: "true" +CDContentProvider-E2E.CN-Prod: +- name: CD_ContentProvider E2E +- mzName: CD_ContentProvider/management-zone/CDContentProvider.name +- mzId: CD_ContentProvider/management-zone/CDContentProvider.id +- env: E2E +- tag: ContentProvider +- skipDeployment: "true" + +#INT dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDContentProvider-INT: +- name: CD_ContentProvider INT +- mzName: CD_ContentProvider/management-zone/CDContentProvider.name +- mzId: CD_ContentProvider/management-zone/CDContentProvider.id +- env: INT +- tag: ContentProvider +- skipDeployment: "true" +#Configuration +CDContentProvider-INT.EMEA-PreProd: +- name: CD_ContentProvider INT +- mzName: CD_ContentProvider/management-zone/CDContentProvider.name +- mzId: CD_ContentProvider/management-zone/CDContentProvider.id +- env: INT +- tag: ContentProvider +- skipDeployment: "false" +CDContentProvider-INT.NA-PreProd: +- name: CD_ContentProvider INT +- mzName: CD_ContentProvider/management-zone/CDContentProvider.name +- mzId: CD_ContentProvider/management-zone/CDContentProvider.id +- env: INT +- skipDeployment: "false" +CDContentProvider-INT.CN-PreProd: +- name: CD_ContentProvider INT +- mzName: CD_ContentProvider/management-zone/CDContentProvider.name +- mzId: CD_ContentProvider/management-zone/CDContentProvider.id +- env: INT +- skipDeployment: "false" + +#TEST dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDContentProvider-TEST: +- name: CD_ContentProvider TEST +- mzName: CD_ContentProvider/management-zone/CDContentProvider.name +- mzId: CD_ContentProvider/management-zone/CDContentProvider.id +- tag: ContentProvider +- env: TEST +- skipDeployment: "true" +#Configuration +CDContentProvider-TEST.EMEA-PreProd: +- name: CD_ContentProvider TEST +- mzName: CD_ContentProvider/management-zone/CDContentProvider.name +- mzId: CD_ContentProvider/management-zone/CDContentProvider.id +- tag: ContentProvider +- env: TEST +- skipDeployment: "false" +CDContentProvider-TEST.NA-PreProd: +- name: CD_ContentProvider TEST +- mzName: CD_ContentProvider/management-zone/CDContentProvider.name +- mzId: CD_ContentProvider/management-zone/CDContentProvider.id +- env: TEST +- skipDeployment: "false" +CDContentProvider-TEST.CN-PreProd: +- name: CD_ContentProvider TEST +- mzName: CD_ContentProvider/management-zone/CDContentProvider.name +- mzId: CD_ContentProvider/management-zone/CDContentProvider.id +- env: TEST +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ContentProvider/dashboard/default.json b/BMW-Dynatrace-config/CD_ContentProvider/dashboard/default.json new file mode 100644 index 00000000..6c685810 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ContentProvider/dashboard/default.json @@ -0,0 +1,308 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.214.107.20210407-223952" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": true, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "timeframe": "-24h to now" + }, + "tags": [ + "{{.tag}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 228, + "left": 38, + "width": 1064, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Failure rate (HTTP 4xx/5xx errors)", + "defaultName": "Custom chart", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [ + { + "metric": "builtin:service.errors.fourxx.rate", + "aggregation": "AVG", + "type": "BAR", + "entityType": "SERVICE", + "dimensions": [], + "sortAscending": false, + "sortColumn": false, + "aggregationRate": "TOTAL" + }, + { + "metric": "builtin:service.errors.fivexx.rate", + "aggregation": "AVG", + "type": "BAR", + "entityType": "SERVICE", + "dimensions": [], + "sortAscending": false, + "sortColumn": true, + "aggregationRate": "TOTAL" + } + ], + "resultMetadata": { + "nullbuiltin:service.errors.fivexx.rate|AVG|TOTAL|BAR|SERVICE": { + "lastModified": 1617956393463, + "customColor": "#ff0000" + }, + "nullbuiltin:service.errors.fourxx.rate|AVG|TOTAL|BAR|SERVICE": { + "lastModified": 1617956441725, + "customColor": "#fff29a" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:{{.env}}", + "Component:{{.tag}}" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 38, + "left": 950, + "width": 152, + "height": 152 + }, + "tileFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + } + }, + { + "name": "Overall Health", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 0, + "left": 38, + "width": 1064, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 532, + "left": 38, + "width": 1064, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 570, + "left": 38, + "width": 1064, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Request Count and Number of Errors", + "defaultName": "Custom chart", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [ + { + "metric": "builtin:service.response.time", + "aggregation": "AVG", + "type": "LINE", + "entityType": "SERVICE", + "dimensions": [], + "sortAscending": false, + "sortColumn": false, + "aggregationRate": "TOTAL" + }, + { + "metric": "builtin:service.requestCount.total", + "aggregation": "NONE", + "type": "BAR", + "entityType": "SERVICE", + "dimensions": [], + "sortAscending": false, + "sortColumn": false, + "aggregationRate": "TOTAL" + }, + { + "metric": "builtin:service.errors.total.count", + "aggregation": "NONE", + "type": "BAR", + "entityType": "SERVICE", + "dimensions": [], + "sortAscending": false, + "sortColumn": true, + "aggregationRate": "TOTAL" + } + ], + "resultMetadata": { + "nullbuiltin:service.requestCount.total|NONE|TOTAL|BAR|SERVICE": { + "lastModified": 1595275720776, + "customColor": "#008cdb" + }, + "nullbuiltin:service.errors.total.count|NONE|TOTAL|BAR|SERVICE": { + "lastModified": 1595275955999, + "customColor": "#ef651f" + }, + "nullbuiltin:service.response.time|AVG|TOTAL|LINE|SERVICE": { + "lastModified": 1595275686773, + "customColor": "#b4e5f9" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:{{.env}}", + "Component:{{.tag}}" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 190, + "left": 38, + "width": 1064, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 38, + "left": 646, + "width": 190, + "height": 152 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:{{.env}}", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 38, + "left": 342, + "width": 190, + "height": 152 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:{{.env}}", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 190, + "height": 152 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:{{.env}}", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ContentProvider/management-zone/CDContentProvider.json b/BMW-Dynatrace-config/CD_ContentProvider/management-zone/CDContentProvider.json deleted file mode 100644 index bc5d0237..00000000 --- a/BMW-Dynatrace-config/CD_ContentProvider/management-zone/CDContentProvider.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "dimensionalRules": [], - "metadata": { - "clusterVersion": "1.209.98.20210122-102634", - "configurationVersions": [ - 0 - ] - }, - "name": "{{.name}}", - "rules": [ - { - "conditions": [ - { - "comparisonInfo": { - "caseSensitive": true, - "negate": false, - "operator": "BEGINS_WITH", - "type": "STRING", - "value": "abc" - }, - "key": { - "attribute": "SERVICE_AKKA_ACTOR_SYSTEM" - } - } - ], - "enabled": true, - "propagationTypes": [], - "type": "SERVICE" - } - ] -} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ContentProvider/management-zone/README.md b/BMW-Dynatrace-config/CD_ContentProvider/management-zone/README.md new file mode 100644 index 00000000..3244b3e6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ContentProvider/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_ContentProvider/management-zone/default.json b/BMW-Dynatrace-config/CD_ContentProvider/management-zone/default.json new file mode 100644 index 00000000..bffa0c3b --- /dev/null +++ b/BMW-Dynatrace-config/CD_ContentProvider/management-zone/default.json @@ -0,0 +1,114 @@ +{ + "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" + }, + { + "conditions": [ + { + "comparisonInfo": { + "caseSensitive": true, + "negate": false, + "operator": "CONTAINS", + "type": "STRING", + "value": "{{.tag}}" + }, + "key": { + "attribute": "CLOUD_APPLICATION_NAMESPACE_NAME" + } + } + ], + "enabled": true, + "propagationTypes": [], + "type": "CLOUD_APPLICATION_NAMESPACE" + }, + { + "conditions": [ + { + "comparisonInfo": { + "caseSensitive": true, + "negate": false, + "operator": "CONTAINS", + "type": "STRING", + "value": "{{.tag}}" + }, + "key": { + "attribute": "CLOUD_APPLICATION_NAME" + } + } + ], + "enabled": true, + "propagationTypes": [], + "type": "CLOUD_APPLICATION" + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ContentProvider/management-zone/management-zone.yaml b/BMW-Dynatrace-config/CD_ContentProvider/management-zone/management-zone.yaml index 23076314..6763bc31 100644 --- a/BMW-Dynatrace-config/CD_ContentProvider/management-zone/management-zone.yaml +++ b/BMW-Dynatrace-config/CD_ContentProvider/management-zone/management-zone.yaml @@ -1,5 +1,6 @@ config: -- CDContentProvider: CDContentProvider.json +- CDContentProvider: default.json CDContentProvider: - name: CD_ContentProvider +- tag: ContentProvider diff --git a/BMW-Dynatrace-config/CD_ContentProvider/notification/README.md b/BMW-Dynatrace-config/CD_ContentProvider/notification/README.md new file mode 100644 index 00000000..e1a6af84 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ContentProvider/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_ContentProvider/notification/email.json b/BMW-Dynatrace-config/CD_ContentProvider/notification/email.json new file mode 100644 index 00000000..486642a7 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ContentProvider/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_ContentProvider/notification/msTeams.json b/BMW-Dynatrace-config/CD_ContentProvider/notification/msTeams.json new file mode 100644 index 00000000..33e92cf6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ContentProvider/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_ContentProvider/notification/notification.yaml b/BMW-Dynatrace-config/CD_ContentProvider/notification/notification.yaml new file mode 100644 index 00000000..d6df9387 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ContentProvider/notification/notification.yaml @@ -0,0 +1,51 @@ +config: +- CDContentProvider-PROD: msTeams.json +- CDContentProvider-INT: msTeams.json + +#Prod notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDContentProvider-PROD: +- name: CD_ContentProvider PROD +- alertingProfile: CD_ContentProvider/alerting-profile/CDContentProvider-PROD.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDContentProvider-PROD.EMEA-Prod: +- name: CD_ContentProvider PROD +- alertingProfile: CD_ContentProvider/alerting-profile/CDContentProvider-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDContentProvider-PROD.NA-Prod: +- name: CD_ContentProvider PROD +- alertingProfile: CD_ContentProvider/alerting-profile/CDContentProvider-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDContentProvider-PROD.CN-Prod: +- name: CD_ContentProvider PROD +- alertingProfile: CD_ContentProvider/alerting-profile/CDContentProvider-PROD.id +- webhook: https://empty +- skipDeployment: "false" + +#INT notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDContentProvider-INT: +- name: CD_ContentProvider INT +- alertingProfile: CD_ContentProvider/alerting-profile/CDContentProvider-INT.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDContentProvider-INT.EMEA-PreProd: +- name: CD_ContentProvider INT +- alertingProfile: CD_ContentProvider/alerting-profile/CDContentProvider-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDContentProvider-INT.NA-PreProd: +- name: CD_ContentProvider INT +- alertingProfile: CD_ContentProvider/alerting-profile/CDContentProvider-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDContentProvider-INT.CN-PreProd: +- name: CD_ContentProvider INT +- alertingProfile: CD_ContentProvider/alerting-profile/CDContentProvider-INT.id +- webhook: https://empty +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ContentProvider/synthetic-monitor/README.md b/BMW-Dynatrace-config/CD_ContentProvider/synthetic-monitor/README.md new file mode 100644 index 00000000..1695924c --- /dev/null +++ b/BMW-Dynatrace-config/CD_ContentProvider/synthetic-monitor/README.md @@ -0,0 +1,4 @@ + +### How to configure synthetics? + +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Synthetic+Monitors) page to configure your synthetics. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ContentProvider/synthetic-monitor/default.json b/BMW-Dynatrace-config/CD_ContentProvider/synthetic-monitor/default.json new file mode 100644 index 00000000..cf83039b --- /dev/null +++ b/BMW-Dynatrace-config/CD_ContentProvider/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_ContentProvider/synthetic-monitor/synthetic-monitor.yaml b/BMW-Dynatrace-config/CD_ContentProvider/synthetic-monitor/synthetic-monitor.yaml new file mode 100644 index 00000000..b31900c1 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ContentProvider/synthetic-monitor/synthetic-monitor.yaml @@ -0,0 +1,10 @@ +config: +- ContentProvider: default.json + +ContentProvider: +- name: CD_ContentProvider - +- mzName: CD_ContentProvider/management-zone/CDContentProvider.name +- mzId: CD_ContentProvider/management-zone/CDContentProvider.id +- endpoint: +- location: +- skipDeployment: "true" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_DPP_DPM/alerting-profile/NewComponent.json b/BMW-Dynatrace-config/CD_DPP_DPM/alerting-profile/NewComponent.json deleted file mode 100644 index 1a434e66..00000000 --- a/BMW-Dynatrace-config/CD_DPP_DPM/alerting-profile/NewComponent.json +++ /dev/null @@ -1,91 +0,0 @@ -{ - "displayName": "{{.name}}", - "eventTypeFilters": [], - "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_DPP_DPM/alerting-profile/alerting-profile.yaml b/BMW-Dynatrace-config/CD_DPP_DPM/alerting-profile/alerting-profile.yaml index 8aa677d7..3ef97bfe 100644 --- a/BMW-Dynatrace-config/CD_DPP_DPM/alerting-profile/alerting-profile.yaml +++ b/BMW-Dynatrace-config/CD_DPP_DPM/alerting-profile/alerting-profile.yaml @@ -1,14 +1,60 @@ config: -- CDDPP: NewComponent.json -- CDDPM: NewComponent.json +- CDDPP_DPM-PROD: default.json +- CDDPP_DPM-INT: default.json -CDDPP: -- name: CD_DPP -- mzId: "/CD_DPP_DPM/management-zone/CDDPP.id" -- tag: DPP +#Prod alerting profiles for EMEA/NA/CN +#Dry-run needed for all hubs +CDDPP_DPM-PROD: +- name: CD_DPP_DPM PROD +- tag: DPP_DPM +- mzId: CD_DPP_DPM/management-zone/CDDPP_DPM.id +- env: PROD +- skipDeployment: "true" +#Configuration +CDDPP_DPM-PROD.EMEA-Prod: +- name: CD_DPP_DPM PROD +- tag: DPP_DPM +- mzId: CD_DPP_DPM/management-zone/CDDPP_DPM.id +- env: PROD +- skipDeployment: "false" +CDDPP_DPM-PROD.NA-Prod: +- name: CD_DPP_DPM PROD +- tag: DPP_DPM +- mzId: CD_DPP_DPM/management-zone/CDDPP_DPM.id +- env: PROD +- skipDeployment: "false" +CDDPP_DPM-PROD.CN-Prod: +- name: CD_DPP_DPM PROD +- tag: DPP_DPM +- mzId: CD_DPP_DPM/management-zone/CDDPP_DPM.id +- env: PROD +- skipDeployment: "false" -CDDPM: -- name: CD_DPM -- mzId: "/CD_DPP_DPM/management-zone/CDDPP.id" -- tag: DPM +#INT alerting profiles for EMEA/NA/CN +#Dry-run needed for all hubs +CDDPP_DPM-INT: +- name: CD_DPP_DPM INT +- tag: DPP_DPM +- mzId: CD_DPP_DPM/management-zone/CDDPP_DPM.id +- env: INT +- skipDeployment: "true" +#Configuration +CDDPP_DPM-INT.EMEA-PreProd: +- name: CD_DPP_DPM INT +- tag: DPP_DPM +- mzId: CD_DPP_DPM/management-zone/CDDPP_DPM.id +- env: INT +- skipDeployment: "false" +CDDPP_DPM-INT.NA-PreProd: +- name: CD_DPP_DPM INT +- tag: DPP_DPM +- mzId: CD_DPP_DPM/management-zone/CDDPP_DPM.id +- env: INT +- skipDeployment: "false" +CDDPP_DPM-INT.CN-PreProd: +- name: CD_DPP_DPM INT +- tag: DPP_DPM +- mzId: CD_DPP_DPM/management-zone/CDDPP_DPM.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_DPP_DPM/alerting-profile/default.json b/BMW-Dynatrace-config/CD_DPP_DPM/alerting-profile/default.json new file mode 100644 index 00000000..681a4c64 --- /dev/null +++ b/BMW-Dynatrace-config/CD_DPP_DPM/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_DPP_DPM/calculated-metrics-service/README.md b/BMW-Dynatrace-config/CD_DPP_DPM/calculated-metrics-service/README.md new file mode 100644 index 00000000..0bf8efbc --- /dev/null +++ b/BMW-Dynatrace-config/CD_DPP_DPM/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_DPP_DPM/conditional-naming-processgroup/README.md b/BMW-Dynatrace-config/CD_DPP_DPM/conditional-naming-processgroup/README.md new file mode 100644 index 00000000..f94196a5 --- /dev/null +++ b/BMW-Dynatrace-config/CD_DPP_DPM/conditional-naming-processgroup/README.md @@ -0,0 +1,67 @@ +### Process Group Detection Rules and Naming + +#### Detection Rule or Naming? + +For the explanation, we're using a real example of the Infotainment application: + +!(PGNaming1)[../../../../img/PGNaming1.PNG] + +Before working with your dashboards and alerting profiles, an important task to do when working with Dynatrace is checking +the structure of your applications (process groups). You can do that clicking under *technologies* and filter using your +application Management Zone. + +In the picture above, there are two Process Groups called bon-information-prod. **If you see duplicated process groups like in** +**this case, you MUST follow this guideline** + +Next step would be to open both process groups and compare the metadata. In that way, you can identify if all process instances are +part of the same application or not. An easy way to do that is asking yourself: how many instances of my application do i have? + +If you have 4 instances in total and you're able to see 2 in one PG and other 2 in other PG it means that **they are part of the ** +**same application** + +Another situation could be that checking on the metadata, then you see that are **two different application** and Dynatrace is just naming +the process group in the same way + +*Same application* +- Problem: Dynatrace is creating two different process groups, what transalates in two separated services for the same application. Instead of +seeing all the traffic in one service, you will have it splitted and it will complicate your monitoring +- Solution: create a process group detection rule. Contact Dynatrace Expert + +*Different application* +- Problem: Dynatrace is just naming in the same way applications that are different. +- Solution: This case is less severe, since it can be fixed with a process group naming rule. + + +What about our example? +!(PGNaming2)[../../../../img/PGNaming2.PNG] +!(PGNaming3)[../../../../img/PGNaming3.PNG] + +Based on the feedback of the infotaiment team, each process group is a different application (microservice) and it's visible in the kubernetes container/workload +within the metadata of each Process Group. + +#### How to create a Process Group Detection Rule +1. Open the *conditional-naming-processgroup.yaml* file and create a rule that looks like this: +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName} +- tag: Infotainment +- skipDeployment: false +``` +The result of the rule will be renaming the PG to this: +``` +bon-information-prod ipa +bon-information-prod rsl +``` + +Other possible placeholders that you can use are for example: +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName/[^\\-]*$} +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesFullPodName/buffet-(.*?)-} +{ProcessGroup:DetectedName} - {HostGroup:Name/[^\\_]*$} +{ProcessGroup:KubernetesNamespace} +{ProcessGroup:CommandLineArgs/.*?\\-f\\s\\/www\\/(.*?)\\/generated\\/httpd\\.conf.*?} + +You can combine different ones. Check the (documentation)[link] for more \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_DPP_DPM/conditional-naming-processgroup/conditional-naming-processgroup.yaml b/BMW-Dynatrace-config/CD_DPP_DPM/conditional-naming-processgroup/conditional-naming-processgroup.yaml new file mode 100644 index 00000000..8961f69e --- /dev/null +++ b/BMW-Dynatrace-config/CD_DPP_DPM/conditional-naming-processgroup/conditional-naming-processgroup.yaml @@ -0,0 +1,8 @@ +config: +- CDDPP_DPM: template.json + +CDDPP_DPM: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: DPP_DPM +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_DPP_DPM/conditional-naming-processgroup/template.json b/BMW-Dynatrace-config/CD_DPP_DPM/conditional-naming-processgroup/template.json new file mode 100644 index 00000000..7c039808 --- /dev/null +++ b/BMW-Dynatrace-config/CD_DPP_DPM/conditional-naming-processgroup/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "type": "PROCESS_GROUP" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_DPP_DPM/conditional-naming-service/README.md b/BMW-Dynatrace-config/CD_DPP_DPM/conditional-naming-service/README.md new file mode 100644 index 00000000..c34ef308 --- /dev/null +++ b/BMW-Dynatrace-config/CD_DPP_DPM/conditional-naming-service/README.md @@ -0,0 +1,35 @@ +### Service Naming Rules + +A typical case could be that you access to *Transaction & Services* and you find two services that are exactly the same: +*DataDownloadV1* +*DataDownloadV1* + +If you drilldown into the service and you check in the process group, you may have a PROD and a E2E for each service. + +*Note: if you see that both process group are exactly the same, please contact a Dynatrace expert to create a Process* +*Group detection rule* + +In the case the PG are PROD and E2E, then we need to create a rule that looks like this: + +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {Service:DetectedName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +- tag: Infotainment +- skipDeployment: false +``` + +The rule will get the Service Detected Name (current name) and it will extract (with a regex) the part of the kubernetes namespace after the "-", so -prod or -e2e, resulting in: +*DataDownloadV1 - prod* +*DataDownloadV1 - e2e* + +Now, services will be easy to identify. + +You can create rules based on any property/metadata. Some other placeholder's eamples: +{Service:DatabaseName} - E2E +{Service:WebServiceName} - {ProcessGroup:Kubernetes:microservice} - {ProcessGroup:Kubernetes:environment} +{Service:DetectedName} - {ProcessGroup:KubernetesContainerName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +{Service:DetectedName} - {ProcessGroup:SpringBootProfileName/[^\\-]*$} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_DPP_DPM/conditional-naming-service/conditional-naming-service.yaml b/BMW-Dynatrace-config/CD_DPP_DPM/conditional-naming-service/conditional-naming-service.yaml new file mode 100644 index 00000000..8961f69e --- /dev/null +++ b/BMW-Dynatrace-config/CD_DPP_DPM/conditional-naming-service/conditional-naming-service.yaml @@ -0,0 +1,8 @@ +config: +- CDDPP_DPM: template.json + +CDDPP_DPM: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: DPP_DPM +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_DPP_DPM/conditional-naming-service/template.json b/BMW-Dynatrace-config/CD_DPP_DPM/conditional-naming-service/template.json new file mode 100644 index 00000000..5d4fac56 --- /dev/null +++ b/BMW-Dynatrace-config/CD_DPP_DPM/conditional-naming-service/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "type": "SERVICE" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_DPP_DPM/custom-service-java/README.md b/BMW-Dynatrace-config/CD_DPP_DPM/custom-service-java/README.md new file mode 100644 index 00000000..5f35e5c1 --- /dev/null +++ b/BMW-Dynatrace-config/CD_DPP_DPM/custom-service-java/README.md @@ -0,0 +1,4 @@ + +### How to configure custom services? + +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Custom+Services) page to configure your custom services. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_DPP_DPM/custom-service-java/custom-service-java.yaml b/BMW-Dynatrace-config/CD_DPP_DPM/custom-service-java/custom-service-java.yaml new file mode 100644 index 00000000..25f8a028 --- /dev/null +++ b/BMW-Dynatrace-config/CD_DPP_DPM/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_DPP_DPM/custom-service-java/template-1-1.json b/BMW-Dynatrace-config/CD_DPP_DPM/custom-service-java/template-1-1.json new file mode 100644 index 00000000..b3003515 --- /dev/null +++ b/BMW-Dynatrace-config/CD_DPP_DPM/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_DPP_DPM/dashboard/README.md b/BMW-Dynatrace-config/CD_DPP_DPM/dashboard/README.md new file mode 100644 index 00000000..dffcdc8a --- /dev/null +++ b/BMW-Dynatrace-config/CD_DPP_DPM/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_DPP_DPM/dashboard/dashboard.yaml b/BMW-Dynatrace-config/CD_DPP_DPM/dashboard/dashboard.yaml new file mode 100644 index 00000000..cddfd1fe --- /dev/null +++ b/BMW-Dynatrace-config/CD_DPP_DPM/dashboard/dashboard.yaml @@ -0,0 +1,127 @@ +config: +- CDDPP_DPM-PROD: default.json +- CDDPP_DPM-E2E: default.json +- CDDPP_DPM-INT: default.json +- CDDPP_DPM-TEST: default.json + +#PROD dashboards for EMEA/NA/CN Prod +#Dry-run needed for all hubs +CDDPP_DPM-PROD: +- name: CD_DPP_DPM PROD +- mzName: CD_DPP_DPM/management-zone/CDDPP_DPM.name +- mzId: CD_DPP_DPM/management-zone/CDDPP_DPM.id +- env: PROD +- skipDeployment: "true" +#Configuration +CDDPP_DPM-PROD.EMEA-Prod: +- name: CD_DPP_DPM PROD +- mzName: CD_DPP_DPM/management-zone/CDDPP_DPM.name +- mzId: CD_DPP_DPM/management-zone/CDDPP_DPM.id +- tag: DPP_DPM +- env: PROD +- skipDeployment: "false" +CDDPP_DPM-PROD.NA-Prod: +- name: CD_DPP_DPM PROD +- mzName: CD_DPP_DPM/management-zone/CDDPP_DPM.name +- mzId: CD_DPP_DPM/management-zone/CDDPP_DPM.id +- tag: DPP_DPM +- env: PROD +- skipDeployment: "false" +CDDPP_DPM-PROD.CN-Prod: +- name: CD_DPP_DPM PROD +- mzName: CD_DPP_DPM/management-zone/CDDPP_DPM.name +- mzId: CD_DPP_DPM/management-zone/CDDPP_DPM.id +- tag: DPP_DPM +- env: PROD +- skipDeployment: "false" + +#E2E dashboards for EMEA/NA/CN E2E +#Dry-run needed for all hubs +CDDPP_DPM-E2E: +- name: CD_DPP_DPM E2E +- mzName: CD_DPP_DPM/management-zone/CDDPP_DPM.name +- mzId: CD_DPP_DPM/management-zone/CDDPP_DPM.id +- env: E2E +- skipDeployment: "true" +#Configuration +CDDPP_DPM-E2E.EMEA-Prod: +- name: CD_DPP_DPM E2E +- mzName: CD_DPP_DPM/management-zone/CDDPP_DPM.name +- mzId: CD_DPP_DPM/management-zone/CDDPP_DPM.id +- env: E2E +- tag: DPP_DPM +- skipDeployment: "true" +CDDPP_DPM-E2E.NA-Prod: +- name: CD_DPP_DPM E2E +- mzName: CD_DPP_DPM/management-zone/CDDPP_DPM.name +- mzId: CD_DPP_DPM/management-zone/CDDPP_DPM.id +- env: E2E +- tag: DPP_DPM +- skipDeployment: "true" +CDDPP_DPM-E2E.CN-Prod: +- name: CD_DPP_DPM E2E +- mzName: CD_DPP_DPM/management-zone/CDDPP_DPM.name +- mzId: CD_DPP_DPM/management-zone/CDDPP_DPM.id +- env: E2E +- tag: DPP_DPM +- skipDeployment: "true" + +#INT dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDDPP_DPM-INT: +- name: CD_DPP_DPM INT +- mzName: CD_DPP_DPM/management-zone/CDDPP_DPM.name +- mzId: CD_DPP_DPM/management-zone/CDDPP_DPM.id +- env: INT +- tag: DPP_DPM +- skipDeployment: "true" +#Configuration +CDDPP_DPM-INT.EMEA-PreProd: +- name: CD_DPP_DPM INT +- mzName: CD_DPP_DPM/management-zone/CDDPP_DPM.name +- mzId: CD_DPP_DPM/management-zone/CDDPP_DPM.id +- env: INT +- tag: DPP_DPM +- skipDeployment: "false" +CDDPP_DPM-INT.NA-PreProd: +- name: CD_DPP_DPM INT +- mzName: CD_DPP_DPM/management-zone/CDDPP_DPM.name +- mzId: CD_DPP_DPM/management-zone/CDDPP_DPM.id +- env: INT +- skipDeployment: "false" +CDDPP_DPM-INT.CN-PreProd: +- name: CD_DPP_DPM INT +- mzName: CD_DPP_DPM/management-zone/CDDPP_DPM.name +- mzId: CD_DPP_DPM/management-zone/CDDPP_DPM.id +- env: INT +- skipDeployment: "false" + +#TEST dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDDPP_DPM-TEST: +- name: CD_DPP_DPM TEST +- mzName: CD_DPP_DPM/management-zone/CDDPP_DPM.name +- mzId: CD_DPP_DPM/management-zone/CDDPP_DPM.id +- tag: DPP_DPM +- env: TEST +- skipDeployment: "true" +#Configuration +CDDPP_DPM-TEST.EMEA-PreProd: +- name: CD_DPP_DPM TEST +- mzName: CD_DPP_DPM/management-zone/CDDPP_DPM.name +- mzId: CD_DPP_DPM/management-zone/CDDPP_DPM.id +- tag: DPP_DPM +- env: TEST +- skipDeployment: "false" +CDDPP_DPM-TEST.NA-PreProd: +- name: CD_DPP_DPM TEST +- mzName: CD_DPP_DPM/management-zone/CDDPP_DPM.name +- mzId: CD_DPP_DPM/management-zone/CDDPP_DPM.id +- env: TEST +- skipDeployment: "false" +CDDPP_DPM-TEST.CN-PreProd: +- name: CD_DPP_DPM TEST +- mzName: CD_DPP_DPM/management-zone/CDDPP_DPM.name +- mzId: CD_DPP_DPM/management-zone/CDDPP_DPM.id +- env: TEST +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_DPP_DPM/dashboard/default.json b/BMW-Dynatrace-config/CD_DPP_DPM/dashboard/default.json new file mode 100644 index 00000000..6c685810 --- /dev/null +++ b/BMW-Dynatrace-config/CD_DPP_DPM/dashboard/default.json @@ -0,0 +1,308 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.214.107.20210407-223952" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": true, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "timeframe": "-24h to now" + }, + "tags": [ + "{{.tag}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 228, + "left": 38, + "width": 1064, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Failure rate (HTTP 4xx/5xx errors)", + "defaultName": "Custom chart", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [ + { + "metric": "builtin:service.errors.fourxx.rate", + "aggregation": "AVG", + "type": "BAR", + "entityType": "SERVICE", + "dimensions": [], + "sortAscending": false, + "sortColumn": false, + "aggregationRate": "TOTAL" + }, + { + "metric": "builtin:service.errors.fivexx.rate", + "aggregation": "AVG", + "type": "BAR", + "entityType": "SERVICE", + "dimensions": [], + "sortAscending": false, + "sortColumn": true, + "aggregationRate": "TOTAL" + } + ], + "resultMetadata": { + "nullbuiltin:service.errors.fivexx.rate|AVG|TOTAL|BAR|SERVICE": { + "lastModified": 1617956393463, + "customColor": "#ff0000" + }, + "nullbuiltin:service.errors.fourxx.rate|AVG|TOTAL|BAR|SERVICE": { + "lastModified": 1617956441725, + "customColor": "#fff29a" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:{{.env}}", + "Component:{{.tag}}" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 38, + "left": 950, + "width": 152, + "height": 152 + }, + "tileFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + } + }, + { + "name": "Overall Health", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 0, + "left": 38, + "width": 1064, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 532, + "left": 38, + "width": 1064, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 570, + "left": 38, + "width": 1064, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Request Count and Number of Errors", + "defaultName": "Custom chart", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [ + { + "metric": "builtin:service.response.time", + "aggregation": "AVG", + "type": "LINE", + "entityType": "SERVICE", + "dimensions": [], + "sortAscending": false, + "sortColumn": false, + "aggregationRate": "TOTAL" + }, + { + "metric": "builtin:service.requestCount.total", + "aggregation": "NONE", + "type": "BAR", + "entityType": "SERVICE", + "dimensions": [], + "sortAscending": false, + "sortColumn": false, + "aggregationRate": "TOTAL" + }, + { + "metric": "builtin:service.errors.total.count", + "aggregation": "NONE", + "type": "BAR", + "entityType": "SERVICE", + "dimensions": [], + "sortAscending": false, + "sortColumn": true, + "aggregationRate": "TOTAL" + } + ], + "resultMetadata": { + "nullbuiltin:service.requestCount.total|NONE|TOTAL|BAR|SERVICE": { + "lastModified": 1595275720776, + "customColor": "#008cdb" + }, + "nullbuiltin:service.errors.total.count|NONE|TOTAL|BAR|SERVICE": { + "lastModified": 1595275955999, + "customColor": "#ef651f" + }, + "nullbuiltin:service.response.time|AVG|TOTAL|LINE|SERVICE": { + "lastModified": 1595275686773, + "customColor": "#b4e5f9" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:{{.env}}", + "Component:{{.tag}}" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 190, + "left": 38, + "width": 1064, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 38, + "left": 646, + "width": 190, + "height": 152 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:{{.env}}", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 38, + "left": 342, + "width": 190, + "height": 152 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:{{.env}}", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 190, + "height": 152 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:{{.env}}", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_DPP_DPM/management-zone/README.md b/BMW-Dynatrace-config/CD_DPP_DPM/management-zone/README.md new file mode 100644 index 00000000..3244b3e6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_DPP_DPM/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_Speech/management-zone/CDTemplate.json b/BMW-Dynatrace-config/CD_DPP_DPM/management-zone/default.json similarity index 63% rename from BMW-Dynatrace-config/CD_Speech/management-zone/CDTemplate.json rename to BMW-Dynatrace-config/CD_DPP_DPM/management-zone/default.json index 4175e2eb..c25120d8 100644 --- a/BMW-Dynatrace-config/CD_Speech/management-zone/CDTemplate.json +++ b/BMW-Dynatrace-config/CD_DPP_DPM/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, @@ -87,6 +51,65 @@ ], "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" + }, + { + "conditions": [ + { + "comparisonInfo": { + "caseSensitive": true, + "negate": false, + "operator": "CONTAINS", + "type": "STRING", + "value": "{{.tag}}" + }, + "key": { + "attribute": "CLOUD_APPLICATION_NAMESPACE_NAME" + } + } + ], + "enabled": true, + "propagationTypes": [], + "type": "CLOUD_APPLICATION_NAMESPACE" + }, + { + "conditions": [ + { + "comparisonInfo": { + "caseSensitive": true, + "negate": false, + "operator": "CONTAINS", + "type": "STRING", + "value": "{{.tag}}" + }, + "key": { + "attribute": "CLOUD_APPLICATION_NAME" + } + } + ], + "enabled": true, + "propagationTypes": [], + "type": "CLOUD_APPLICATION" + }, { "conditions": [ { @@ -103,42 +126,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, @@ -171,6 +158,65 @@ "PROCESS_GROUP_TO_HOST" ], "type": "PROCESS_GROUP" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag2}}" + } + }, + "key": { + "attribute": "HOST_TAGS" + } + } + ], + "enabled": true, + "type": "HOST" + }, + { + "conditions": [ + { + "comparisonInfo": { + "caseSensitive": true, + "negate": false, + "operator": "CONTAINS", + "type": "STRING", + "value": "{{.tag2}}" + }, + "key": { + "attribute": "CLOUD_APPLICATION_NAMESPACE_NAME" + } + } + ], + "enabled": true, + "propagationTypes": [], + "type": "CLOUD_APPLICATION_NAMESPACE" + }, + { + "conditions": [ + { + "comparisonInfo": { + "caseSensitive": true, + "negate": false, + "operator": "CONTAINS", + "type": "STRING", + "value": "{{.tag2}}" + }, + "key": { + "attribute": "CLOUD_APPLICATION_NAME" + } + } + ], + "enabled": true, + "propagationTypes": [], + "type": "CLOUD_APPLICATION" } ] } \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_DPP_DPM/management-zone/management-zone.yaml b/BMW-Dynatrace-config/CD_DPP_DPM/management-zone/management-zone.yaml index 7b6b6421..6d8a7e52 100644 --- a/BMW-Dynatrace-config/CD_DPP_DPM/management-zone/management-zone.yaml +++ b/BMW-Dynatrace-config/CD_DPP_DPM/management-zone/management-zone.yaml @@ -1,6 +1,7 @@ config: - - CDDPP: "CDTemplate.json" +- CDDPP_DPM: default.json -CDDPP: - - name: CD_DPP_DPM - - tag: DPP +CDDPP_DPM: +- name: CD_DPP_DPM +- tag: DPP +- tag2: DPM diff --git a/BMW-Dynatrace-config/CD_DPP_DPM/notification/README.md b/BMW-Dynatrace-config/CD_DPP_DPM/notification/README.md new file mode 100644 index 00000000..e1a6af84 --- /dev/null +++ b/BMW-Dynatrace-config/CD_DPP_DPM/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_DPP_DPM/notification/email.json b/BMW-Dynatrace-config/CD_DPP_DPM/notification/email.json new file mode 100644 index 00000000..486642a7 --- /dev/null +++ b/BMW-Dynatrace-config/CD_DPP_DPM/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_DPP_DPM/notification/msTeams.json b/BMW-Dynatrace-config/CD_DPP_DPM/notification/msTeams.json new file mode 100644 index 00000000..33e92cf6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_DPP_DPM/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_DPP_DPM/notification/notification.yaml b/BMW-Dynatrace-config/CD_DPP_DPM/notification/notification.yaml index 65a169d2..beb35931 100644 --- a/BMW-Dynatrace-config/CD_DPP_DPM/notification/notification.yaml +++ b/BMW-Dynatrace-config/CD_DPP_DPM/notification/notification.yaml @@ -1,13 +1,51 @@ config: -- CDDPP-MSTeams: CDDPP-MSTeams.json -- CDDPM-MSTeams: CDDPP-MSTeams.json +- CDDPP_DPM-PROD: msTeams.json +- CDDPP_DPM-INT: msTeams.json -CDDPP-MSTeams: -- name: CD_DPP - MS Teams -- webhook: https://bmwgroup.webhook.office.com/webhookb2/b078ce72-ebcd-4983-b3a0-aa3c578cba45@ce849bab-cc1c-465b-b62e-18f07c9ac198/IncomingWebhook/41b2d9ac0f324d37ba993829023c7357/b3d8da66-02da-46cf-bbd6-0082d5e76b2f -- alertingProfile: "/CD_DPP_DPM/alerting-profile/CDDPP.id" +#Prod notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDDPP_DPM-PROD: +- name: CD_DPP_DPM PROD +- alertingProfile: CD_DPP_DPM/alerting-profile/CDDPP_DPM-PROD.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDDPP_DPM-PROD.EMEA-Prod: +- name: CD_DPP_DPM PROD +- alertingProfile: CD_DPP_DPM/alerting-profile/CDDPP_DPM-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDDPP_DPM-PROD.NA-Prod: +- name: CD_DPP_DPM PROD +- alertingProfile: CD_DPP_DPM/alerting-profile/CDDPP_DPM-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDDPP_DPM-PROD.CN-Prod: +- name: CD_DPP_DPM PROD +- alertingProfile: CD_DPP_DPM/alerting-profile/CDDPP_DPM-PROD.id +- webhook: https://empty +- skipDeployment: "false" -CDDPM-MSTeams: -- name: CD_DPM - MS Teams -- webhook: https://bmwgroup.webhook.office.com/webhookb2/f03f3a7a-3177-4ff4-b978-363276590593@ce849bab-cc1c-465b-b62e-18f07c9ac198/IncomingWebhook/28feb124b6c24410ba0c2ebb0641d50c/b3d8da66-02da-46cf-bbd6-0082d5e76b2f -- alertingProfile: "/CD_DPP_DPM/alerting-profile/CDDPM.id" \ No newline at end of file +#INT notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDDPP_DPM-INT: +- name: CD_DPP_DPM INT +- alertingProfile: CD_DPP_DPM/alerting-profile/CDDPP_DPM-INT.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDDPP_DPM-INT.EMEA-PreProd: +- name: CD_DPP_DPM INT +- alertingProfile: CD_DPP_DPM/alerting-profile/CDDPP_DPM-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDDPP_DPM-INT.NA-PreProd: +- name: CD_DPP_DPM INT +- alertingProfile: CD_DPP_DPM/alerting-profile/CDDPP_DPM-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDDPP_DPM-INT.CN-PreProd: +- name: CD_DPP_DPM INT +- alertingProfile: CD_DPP_DPM/alerting-profile/CDDPP_DPM-INT.id +- webhook: https://empty +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_DPP_DPM/synthetic-monitor/README.md b/BMW-Dynatrace-config/CD_DPP_DPM/synthetic-monitor/README.md new file mode 100644 index 00000000..1695924c --- /dev/null +++ b/BMW-Dynatrace-config/CD_DPP_DPM/synthetic-monitor/README.md @@ -0,0 +1,4 @@ + +### How to configure synthetics? + +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Synthetic+Monitors) page to configure your synthetics. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_DPP_DPM/synthetic-monitor/default.json b/BMW-Dynatrace-config/CD_DPP_DPM/synthetic-monitor/default.json new file mode 100644 index 00000000..cf83039b --- /dev/null +++ b/BMW-Dynatrace-config/CD_DPP_DPM/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_DPP_DPM/synthetic-monitor/synthetic-monitor.yaml b/BMW-Dynatrace-config/CD_DPP_DPM/synthetic-monitor/synthetic-monitor.yaml new file mode 100644 index 00000000..ff702bfa --- /dev/null +++ b/BMW-Dynatrace-config/CD_DPP_DPM/synthetic-monitor/synthetic-monitor.yaml @@ -0,0 +1,10 @@ +config: +- DPP_DPM: default.json + +DPP_DPM: +- name: CD_DPP_DPM - +- mzName: CD_DPP_DPM/management-zone/CDDPP_DPM.name +- mzId: CD_DPP_DPM/management-zone/CDDPP_DPM.id +- endpoint: +- location: +- skipDeployment: "true" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_LSC/alerting-profile/alerting-profile.yaml b/BMW-Dynatrace-config/CD_LSC/alerting-profile/alerting-profile.yaml index 02232ebb..7d585824 100644 --- a/BMW-Dynatrace-config/CD_LSC/alerting-profile/alerting-profile.yaml +++ b/BMW-Dynatrace-config/CD_LSC/alerting-profile/alerting-profile.yaml @@ -1,6 +1,60 @@ -CDLSC-FSU: -- name: CD_LSC/management-zone/CDLSC-FSU.name -- tag: LSC-FSU -- mzId: CD_LSC/management-zone/CDLSC-FSU.id config: -- CDLSC-FSU: LSC-FSU.json +- CDLSC-PROD: default.json +- CDLSC-INT: default.json + +#Prod alerting profiles for EMEA/NA/CN +#Dry-run needed for all hubs +CDLSC-PROD: +- name: CD_LSC PROD +- tag: LSC +- mzId: CD_LSC/management-zone/CDLSC.id +- env: PROD +- skipDeployment: "true" +#Configuration +CDLSC-PROD.EMEA-Prod: +- name: CD_LSC PROD +- tag: LSC +- mzId: CD_LSC/management-zone/CDLSC.id +- env: PROD +- skipDeployment: "false" +CDLSC-PROD.NA-Prod: +- name: CD_LSC PROD +- tag: LSC +- mzId: CD_LSC/management-zone/CDLSC.id +- env: PROD +- skipDeployment: "false" +CDLSC-PROD.CN-Prod: +- name: CD_LSC PROD +- tag: LSC +- mzId: CD_LSC/management-zone/CDLSC.id +- env: PROD +- skipDeployment: "false" + + +#INT alerting profiles for EMEA/NA/CN +#Dry-run needed for all hubs +CDLSC-INT: +- name: CD_LSC INT +- tag: LSC +- mzId: CD_LSC/management-zone/CDLSC.id +- env: INT +- skipDeployment: "true" +#Configuration +CDLSC-INT.EMEA-PreProd: +- name: CD_LSC INT +- tag: LSC +- mzId: CD_LSC/management-zone/CDLSC.id +- env: INT +- skipDeployment: "false" +CDLSC-INT.NA-PreProd: +- name: CD_LSC INT +- tag: LSC +- mzId: CD_LSC/management-zone/CDLSC.id +- env: INT +- skipDeployment: "false" +CDLSC-INT.CN-PreProd: +- name: CD_LSC INT +- tag: LSC +- mzId: CD_LSC/management-zone/CDLSC.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_LSC/alerting-profile/default.json b/BMW-Dynatrace-config/CD_LSC/alerting-profile/default.json new file mode 100644 index 00000000..681a4c64 --- /dev/null +++ b/BMW-Dynatrace-config/CD_LSC/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/calculated-metrics-service/README.md b/BMW-Dynatrace-config/CD_LSC/calculated-metrics-service/README.md new file mode 100644 index 00000000..0bf8efbc --- /dev/null +++ b/BMW-Dynatrace-config/CD_LSC/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/conditional-naming-processgroup/README.md b/BMW-Dynatrace-config/CD_LSC/conditional-naming-processgroup/README.md new file mode 100644 index 00000000..f94196a5 --- /dev/null +++ b/BMW-Dynatrace-config/CD_LSC/conditional-naming-processgroup/README.md @@ -0,0 +1,67 @@ +### Process Group Detection Rules and Naming + +#### Detection Rule or Naming? + +For the explanation, we're using a real example of the Infotainment application: + +!(PGNaming1)[../../../../img/PGNaming1.PNG] + +Before working with your dashboards and alerting profiles, an important task to do when working with Dynatrace is checking +the structure of your applications (process groups). You can do that clicking under *technologies* and filter using your +application Management Zone. + +In the picture above, there are two Process Groups called bon-information-prod. **If you see duplicated process groups like in** +**this case, you MUST follow this guideline** + +Next step would be to open both process groups and compare the metadata. In that way, you can identify if all process instances are +part of the same application or not. An easy way to do that is asking yourself: how many instances of my application do i have? + +If you have 4 instances in total and you're able to see 2 in one PG and other 2 in other PG it means that **they are part of the ** +**same application** + +Another situation could be that checking on the metadata, then you see that are **two different application** and Dynatrace is just naming +the process group in the same way + +*Same application* +- Problem: Dynatrace is creating two different process groups, what transalates in two separated services for the same application. Instead of +seeing all the traffic in one service, you will have it splitted and it will complicate your monitoring +- Solution: create a process group detection rule. Contact Dynatrace Expert + +*Different application* +- Problem: Dynatrace is just naming in the same way applications that are different. +- Solution: This case is less severe, since it can be fixed with a process group naming rule. + + +What about our example? +!(PGNaming2)[../../../../img/PGNaming2.PNG] +!(PGNaming3)[../../../../img/PGNaming3.PNG] + +Based on the feedback of the infotaiment team, each process group is a different application (microservice) and it's visible in the kubernetes container/workload +within the metadata of each Process Group. + +#### How to create a Process Group Detection Rule +1. Open the *conditional-naming-processgroup.yaml* file and create a rule that looks like this: +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName} +- tag: Infotainment +- skipDeployment: false +``` +The result of the rule will be renaming the PG to this: +``` +bon-information-prod ipa +bon-information-prod rsl +``` + +Other possible placeholders that you can use are for example: +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName/[^\\-]*$} +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesFullPodName/buffet-(.*?)-} +{ProcessGroup:DetectedName} - {HostGroup:Name/[^\\_]*$} +{ProcessGroup:KubernetesNamespace} +{ProcessGroup:CommandLineArgs/.*?\\-f\\s\\/www\\/(.*?)\\/generated\\/httpd\\.conf.*?} + +You can combine different ones. Check the (documentation)[link] for more \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_LSC/conditional-naming-processgroup/conditional-naming-processgroup.yaml b/BMW-Dynatrace-config/CD_LSC/conditional-naming-processgroup/conditional-naming-processgroup.yaml new file mode 100644 index 00000000..a0193180 --- /dev/null +++ b/BMW-Dynatrace-config/CD_LSC/conditional-naming-processgroup/conditional-naming-processgroup.yaml @@ -0,0 +1,8 @@ +config: +- CDLSC: template.json + +CDLSC: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: LSC +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_LSC/conditional-naming-processgroup/template.json b/BMW-Dynatrace-config/CD_LSC/conditional-naming-processgroup/template.json new file mode 100644 index 00000000..7c039808 --- /dev/null +++ b/BMW-Dynatrace-config/CD_LSC/conditional-naming-processgroup/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "type": "PROCESS_GROUP" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_LSC/conditional-naming-service/README.md b/BMW-Dynatrace-config/CD_LSC/conditional-naming-service/README.md new file mode 100644 index 00000000..c34ef308 --- /dev/null +++ b/BMW-Dynatrace-config/CD_LSC/conditional-naming-service/README.md @@ -0,0 +1,35 @@ +### Service Naming Rules + +A typical case could be that you access to *Transaction & Services* and you find two services that are exactly the same: +*DataDownloadV1* +*DataDownloadV1* + +If you drilldown into the service and you check in the process group, you may have a PROD and a E2E for each service. + +*Note: if you see that both process group are exactly the same, please contact a Dynatrace expert to create a Process* +*Group detection rule* + +In the case the PG are PROD and E2E, then we need to create a rule that looks like this: + +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {Service:DetectedName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +- tag: Infotainment +- skipDeployment: false +``` + +The rule will get the Service Detected Name (current name) and it will extract (with a regex) the part of the kubernetes namespace after the "-", so -prod or -e2e, resulting in: +*DataDownloadV1 - prod* +*DataDownloadV1 - e2e* + +Now, services will be easy to identify. + +You can create rules based on any property/metadata. Some other placeholder's eamples: +{Service:DatabaseName} - E2E +{Service:WebServiceName} - {ProcessGroup:Kubernetes:microservice} - {ProcessGroup:Kubernetes:environment} +{Service:DetectedName} - {ProcessGroup:KubernetesContainerName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +{Service:DetectedName} - {ProcessGroup:SpringBootProfileName/[^\\-]*$} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_LSC/conditional-naming-service/conditional-naming-service.yaml b/BMW-Dynatrace-config/CD_LSC/conditional-naming-service/conditional-naming-service.yaml new file mode 100644 index 00000000..a0193180 --- /dev/null +++ b/BMW-Dynatrace-config/CD_LSC/conditional-naming-service/conditional-naming-service.yaml @@ -0,0 +1,8 @@ +config: +- CDLSC: template.json + +CDLSC: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: LSC +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_LSC/conditional-naming-service/template.json b/BMW-Dynatrace-config/CD_LSC/conditional-naming-service/template.json new file mode 100644 index 00000000..5d4fac56 --- /dev/null +++ b/BMW-Dynatrace-config/CD_LSC/conditional-naming-service/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "type": "SERVICE" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_LSC/custom-service-java/README.md b/BMW-Dynatrace-config/CD_LSC/custom-service-java/README.md new file mode 100644 index 00000000..5f35e5c1 --- /dev/null +++ b/BMW-Dynatrace-config/CD_LSC/custom-service-java/README.md @@ -0,0 +1,4 @@ + +### How to configure custom services? + +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Custom+Services) page to configure your custom services. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_LSC/custom-service-java/custom-service-java.yaml b/BMW-Dynatrace-config/CD_LSC/custom-service-java/custom-service-java.yaml new file mode 100644 index 00000000..25f8a028 --- /dev/null +++ b/BMW-Dynatrace-config/CD_LSC/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/custom-service-java/template-1-1.json b/BMW-Dynatrace-config/CD_LSC/custom-service-java/template-1-1.json new file mode 100644 index 00000000..b3003515 --- /dev/null +++ b/BMW-Dynatrace-config/CD_LSC/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/dashboard/LSC-FSU.json b/BMW-Dynatrace-config/CD_LSC/dashboard/LSC-FSU.json deleted file mode 100644 index 456b9293..00000000 --- a/BMW-Dynatrace-config/CD_LSC/dashboard/LSC-FSU.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_LSC/dashboard/README.md b/BMW-Dynatrace-config/CD_LSC/dashboard/README.md new file mode 100644 index 00000000..dffcdc8a --- /dev/null +++ b/BMW-Dynatrace-config/CD_LSC/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/dashboard/dashboard.yaml b/BMW-Dynatrace-config/CD_LSC/dashboard/dashboard.yaml index 1836ec96..eafabb2c 100644 --- a/BMW-Dynatrace-config/CD_LSC/dashboard/dashboard.yaml +++ b/BMW-Dynatrace-config/CD_LSC/dashboard/dashboard.yaml @@ -1,6 +1,127 @@ -CDLSC-FSU: -- name: CD_LSC/management-zone/CDLSC-FSU.name -- mzName: CD_LSC/management-zone/CDLSC-FSU.name -- mzId: CD_LSC/management-zone/CDLSC-FSU.id config: -- CDLSC-FSU: LSC-FSU.json +- CDLSC-PROD: default.json +- CDLSC-E2E: default.json +- CDLSC-INT: default.json +- CDLSC-TEST: default.json + +#PROD dashboards for EMEA/NA/CN Prod +#Dry-run needed for all hubs +CDLSC-PROD: +- name: CD_LSC PROD +- mzName: CD_LSC/management-zone/CDLSC.name +- mzId: CD_LSC/management-zone/CDLSC.id +- env: PROD +- skipDeployment: "true" +#Configuration +CDLSC-PROD.EMEA-Prod: +- name: CD_LSC PROD +- mzName: CD_LSC/management-zone/CDLSC.name +- mzId: CD_LSC/management-zone/CDLSC.id +- tag: LSC +- env: PROD +- skipDeployment: "false" +CDLSC-PROD.NA-Prod: +- name: CD_LSC PROD +- mzName: CD_LSC/management-zone/CDLSC.name +- mzId: CD_LSC/management-zone/CDLSC.id +- tag: LSC +- env: PROD +- skipDeployment: "false" +CDLSC-PROD.CN-Prod: +- name: CD_LSC PROD +- mzName: CD_LSC/management-zone/CDLSC.name +- mzId: CD_LSC/management-zone/CDLSC.id +- tag: LSC +- env: PROD +- skipDeployment: "false" + +#E2E dashboards for EMEA/NA/CN E2E +#Dry-run needed for all hubs +CDLSC-E2E: +- name: CD_LSC E2E +- mzName: CD_LSC/management-zone/CDLSC.name +- mzId: CD_LSC/management-zone/CDLSC.id +- env: E2E +- skipDeployment: "true" +#Configuration +CDLSC-E2E.EMEA-Prod: +- name: CD_LSC E2E +- mzName: CD_LSC/management-zone/CDLSC.name +- mzId: CD_LSC/management-zone/CDLSC.id +- env: E2E +- tag: LSC +- skipDeployment: "true" +CDLSC-E2E.NA-Prod: +- name: CD_LSC E2E +- mzName: CD_LSC/management-zone/CDLSC.name +- mzId: CD_LSC/management-zone/CDLSC.id +- env: E2E +- tag: LSC +- skipDeployment: "true" +CDLSC-E2E.CN-Prod: +- name: CD_LSC E2E +- mzName: CD_LSC/management-zone/CDLSC.name +- mzId: CD_LSC/management-zone/CDLSC.id +- env: E2E +- tag: LSC +- skipDeployment: "true" + +#INT dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDLSC-INT: +- name: CD_LSC INT +- mzName: CD_LSC/management-zone/CDLSC.name +- mzId: CD_LSC/management-zone/CDLSC.id +- env: INT +- tag: LSC +- skipDeployment: "true" +#Configuration +CDLSC-INT.EMEA-PreProd: +- name: CD_LSC INT +- mzName: CD_LSC/management-zone/CDLSC.name +- mzId: CD_LSC/management-zone/CDLSC.id +- env: INT +- tag: LSC +- skipDeployment: "false" +CDLSC-INT.NA-PreProd: +- name: CD_LSC INT +- mzName: CD_LSC/management-zone/CDLSC.name +- mzId: CD_LSC/management-zone/CDLSC.id +- env: INT +- skipDeployment: "false" +CDLSC-INT.CN-PreProd: +- name: CD_LSC INT +- mzName: CD_LSC/management-zone/CDLSC.name +- mzId: CD_LSC/management-zone/CDLSC.id +- env: INT +- skipDeployment: "false" + +#TEST dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDLSC-TEST: +- name: CD_LSC TEST +- mzName: CD_LSC/management-zone/CDLSC.name +- mzId: CD_LSC/management-zone/CDLSC.id +- tag: LSC +- env: TEST +- skipDeployment: "true" +#Configuration +CDLSC-TEST.EMEA-PreProd: +- name: CD_LSC TEST +- mzName: CD_LSC/management-zone/CDLSC.name +- mzId: CD_LSC/management-zone/CDLSC.id +- tag: LSC +- env: TEST +- skipDeployment: "false" +CDLSC-TEST.NA-PreProd: +- name: CD_LSC TEST +- mzName: CD_LSC/management-zone/CDLSC.name +- mzId: CD_LSC/management-zone/CDLSC.id +- env: TEST +- skipDeployment: "false" +CDLSC-TEST.CN-PreProd: +- name: CD_LSC TEST +- mzName: CD_LSC/management-zone/CDLSC.name +- mzId: CD_LSC/management-zone/CDLSC.id +- env: TEST +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_LSC/dashboard/default.json b/BMW-Dynatrace-config/CD_LSC/dashboard/default.json new file mode 100644 index 00000000..6c685810 --- /dev/null +++ b/BMW-Dynatrace-config/CD_LSC/dashboard/default.json @@ -0,0 +1,308 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.214.107.20210407-223952" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": true, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "timeframe": "-24h to now" + }, + "tags": [ + "{{.tag}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 228, + "left": 38, + "width": 1064, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Failure rate (HTTP 4xx/5xx errors)", + "defaultName": "Custom chart", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [ + { + "metric": "builtin:service.errors.fourxx.rate", + "aggregation": "AVG", + "type": "BAR", + "entityType": "SERVICE", + "dimensions": [], + "sortAscending": false, + "sortColumn": false, + "aggregationRate": "TOTAL" + }, + { + "metric": "builtin:service.errors.fivexx.rate", + "aggregation": "AVG", + "type": "BAR", + "entityType": "SERVICE", + "dimensions": [], + "sortAscending": false, + "sortColumn": true, + "aggregationRate": "TOTAL" + } + ], + "resultMetadata": { + "nullbuiltin:service.errors.fivexx.rate|AVG|TOTAL|BAR|SERVICE": { + "lastModified": 1617956393463, + "customColor": "#ff0000" + }, + "nullbuiltin:service.errors.fourxx.rate|AVG|TOTAL|BAR|SERVICE": { + "lastModified": 1617956441725, + "customColor": "#fff29a" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:{{.env}}", + "Component:{{.tag}}" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 38, + "left": 950, + "width": 152, + "height": 152 + }, + "tileFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + } + }, + { + "name": "Overall Health", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 0, + "left": 38, + "width": 1064, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 532, + "left": 38, + "width": 1064, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 570, + "left": 38, + "width": 1064, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Request Count and Number of Errors", + "defaultName": "Custom chart", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [ + { + "metric": "builtin:service.response.time", + "aggregation": "AVG", + "type": "LINE", + "entityType": "SERVICE", + "dimensions": [], + "sortAscending": false, + "sortColumn": false, + "aggregationRate": "TOTAL" + }, + { + "metric": "builtin:service.requestCount.total", + "aggregation": "NONE", + "type": "BAR", + "entityType": "SERVICE", + "dimensions": [], + "sortAscending": false, + "sortColumn": false, + "aggregationRate": "TOTAL" + }, + { + "metric": "builtin:service.errors.total.count", + "aggregation": "NONE", + "type": "BAR", + "entityType": "SERVICE", + "dimensions": [], + "sortAscending": false, + "sortColumn": true, + "aggregationRate": "TOTAL" + } + ], + "resultMetadata": { + "nullbuiltin:service.requestCount.total|NONE|TOTAL|BAR|SERVICE": { + "lastModified": 1595275720776, + "customColor": "#008cdb" + }, + "nullbuiltin:service.errors.total.count|NONE|TOTAL|BAR|SERVICE": { + "lastModified": 1595275955999, + "customColor": "#ef651f" + }, + "nullbuiltin:service.response.time|AVG|TOTAL|LINE|SERVICE": { + "lastModified": 1595275686773, + "customColor": "#b4e5f9" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:{{.env}}", + "Component:{{.tag}}" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 190, + "left": 38, + "width": 1064, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 38, + "left": 646, + "width": 190, + "height": 152 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:{{.env}}", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 38, + "left": 342, + "width": 190, + "height": 152 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:{{.env}}", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 190, + "height": 152 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:{{.env}}", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_LSC/management-zone/README.md b/BMW-Dynatrace-config/CD_LSC/management-zone/README.md new file mode 100644 index 00000000..3244b3e6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_LSC/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/management-zone/default.json b/BMW-Dynatrace-config/CD_LSC/management-zone/default.json new file mode 100644 index 00000000..bffa0c3b --- /dev/null +++ b/BMW-Dynatrace-config/CD_LSC/management-zone/default.json @@ -0,0 +1,114 @@ +{ + "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" + }, + { + "conditions": [ + { + "comparisonInfo": { + "caseSensitive": true, + "negate": false, + "operator": "CONTAINS", + "type": "STRING", + "value": "{{.tag}}" + }, + "key": { + "attribute": "CLOUD_APPLICATION_NAMESPACE_NAME" + } + } + ], + "enabled": true, + "propagationTypes": [], + "type": "CLOUD_APPLICATION_NAMESPACE" + }, + { + "conditions": [ + { + "comparisonInfo": { + "caseSensitive": true, + "negate": false, + "operator": "CONTAINS", + "type": "STRING", + "value": "{{.tag}}" + }, + "key": { + "attribute": "CLOUD_APPLICATION_NAME" + } + } + ], + "enabled": true, + "propagationTypes": [], + "type": "CLOUD_APPLICATION" + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_LSC/management-zone/management-zone.yaml b/BMW-Dynatrace-config/CD_LSC/management-zone/management-zone.yaml index ed044151..e5f8b905 100644 --- a/BMW-Dynatrace-config/CD_LSC/management-zone/management-zone.yaml +++ b/BMW-Dynatrace-config/CD_LSC/management-zone/management-zone.yaml @@ -1,20 +1,6 @@ -CDLSC-FSU.CN-PreProd: -- name: CD_LSC-FSU -- tag: LSC-FSU -CDLSC-FSU.CN-Prod: -- name: CD_LSC-FSU -- tag: LSC-FSU -CDLSC-FSU.EMEA-PreProd: -- name: CD_LSC-FSU -- tag: LSC-FSU -CDLSC-FSU.EMEA-Prod: -- name: CD_LSC-FSU -- tag: LSC-FSU -CDLSC-FSU.NA-PreProd: -- name: CD_LSC-FSU -- tag: LSC-FSU -CDLSC-FSU.NA-Prod: -- name: CD_LSC-FSU -- tag: LSC-FSU config: -- CDLSC-FSU: CDLSC-FSU.json +- CDLSC: default.json + +CDLSC: +- name: CD_LSC +- tag: LSC diff --git a/BMW-Dynatrace-config/CD_LSC/notification/README.md b/BMW-Dynatrace-config/CD_LSC/notification/README.md new file mode 100644 index 00000000..e1a6af84 --- /dev/null +++ b/BMW-Dynatrace-config/CD_LSC/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/notification/email.json b/BMW-Dynatrace-config/CD_LSC/notification/email.json new file mode 100644 index 00000000..486642a7 --- /dev/null +++ b/BMW-Dynatrace-config/CD_LSC/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/notification/msTeams.json b/BMW-Dynatrace-config/CD_LSC/notification/msTeams.json new file mode 100644 index 00000000..33e92cf6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_LSC/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/notification/notification.yaml b/BMW-Dynatrace-config/CD_LSC/notification/notification.yaml new file mode 100644 index 00000000..eaacd926 --- /dev/null +++ b/BMW-Dynatrace-config/CD_LSC/notification/notification.yaml @@ -0,0 +1,51 @@ +config: +- CDLSC-PROD: msTeams.json +- CDLSC-INT: msTeams.json + +#Prod notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDLSC-PROD: +- name: CD_LSC PROD +- alertingProfile: CD_LSC/alerting-profile/CDLSC-PROD.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDLSC-PROD.EMEA-Prod: +- name: CD_LSC PROD +- alertingProfile: CD_LSC/alerting-profile/CDLSC-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDLSC-PROD.NA-Prod: +- name: CD_LSC PROD +- alertingProfile: CD_LSC/alerting-profile/CDLSC-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDLSC-PROD.CN-Prod: +- name: CD_LSC PROD +- alertingProfile: CD_LSC/alerting-profile/CDLSC-PROD.id +- webhook: https://empty +- skipDeployment: "false" + +#INT notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDLSC-INT: +- name: CD_LSC INT +- alertingProfile: CD_LSC/alerting-profile/CDLSC-INT.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDLSC-INT.EMEA-PreProd: +- name: CD_LSC INT +- alertingProfile: CD_LSC/alerting-profile/CDLSC-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDLSC-INT.NA-PreProd: +- name: CD_LSC INT +- alertingProfile: CD_LSC/alerting-profile/CDLSC-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDLSC-INT.CN-PreProd: +- name: CD_LSC INT +- alertingProfile: CD_LSC/alerting-profile/CDLSC-INT.id +- webhook: https://empty +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_LSC/synthetic-monitor/README.md b/BMW-Dynatrace-config/CD_LSC/synthetic-monitor/README.md new file mode 100644 index 00000000..1695924c --- /dev/null +++ b/BMW-Dynatrace-config/CD_LSC/synthetic-monitor/README.md @@ -0,0 +1,4 @@ + +### How to configure synthetics? + +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Synthetic+Monitors) page to configure your synthetics. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_LSC/synthetic-monitor/default.json b/BMW-Dynatrace-config/CD_LSC/synthetic-monitor/default.json new file mode 100644 index 00000000..cf83039b --- /dev/null +++ b/BMW-Dynatrace-config/CD_LSC/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/synthetic-monitor/synthetic-monitor.yaml b/BMW-Dynatrace-config/CD_LSC/synthetic-monitor/synthetic-monitor.yaml new file mode 100644 index 00000000..4601f016 --- /dev/null +++ b/BMW-Dynatrace-config/CD_LSC/synthetic-monitor/synthetic-monitor.yaml @@ -0,0 +1,10 @@ +config: +- LSC: default.json + +LSC: +- name: CD_LSC - +- mzName: CD_LSC/management-zone/CDLSC.name +- mzId: CD_LSC/management-zone/CDLSC.id +- endpoint: +- location: +- skipDeployment: "true" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_Messaging-Services/alerting-profile/MessagingS.json b/BMW-Dynatrace-config/CD_Messaging-Services/alerting-profile/MessagingS.json deleted file mode 100644 index d10ad44a..00000000 --- a/BMW-Dynatrace-config/CD_Messaging-Services/alerting-profile/MessagingS.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_Messaging-Services/alerting-profile/alerting-profile.yaml b/BMW-Dynatrace-config/CD_Messaging-Services/alerting-profile/alerting-profile.yaml index d46eef78..b659f1c7 100644 --- a/BMW-Dynatrace-config/CD_Messaging-Services/alerting-profile/alerting-profile.yaml +++ b/BMW-Dynatrace-config/CD_Messaging-Services/alerting-profile/alerting-profile.yaml @@ -1,6 +1,60 @@ -CDMessaging-Services: -- name: CD_Messaging-Services/management-zone/CDMessaging-Services.name -- tag: Messaging-Services -- mzId: CD_Messaging-Services/management-zone/CDMessaging-Services.id config: -- CDMessaging-Services: MessagingS.json +- CDMessaging-Services-PROD: default.json +- CDMessaging-Services-INT: default.json + +#Prod alerting profiles for EMEA/NA/CN +#Dry-run needed for all hubs +CDMessaging-Services-PROD: +- name: CD_Messaging-Services PROD +- tag: MSGSVC +- mzId: CD_Messaging-Services/management-zone/CDMessaging-Services.id +- env: PROD +- skipDeployment: "true" +#Configuration +CDMessaging-Services-PROD.EMEA-Prod: +- name: CD_Messaging-Services PROD +- tag: MSGSVC +- mzId: CD_Messaging-Services/management-zone/CDMessaging-Services.id +- env: PROD +- skipDeployment: "false" +CDMessaging-Services-PROD.NA-Prod: +- name: CD_Messaging-Services PROD +- tag: MSGSVC +- mzId: CD_Messaging-Services/management-zone/CDMessaging-Services.id +- env: PROD +- skipDeployment: "false" +CDMessaging-Services-PROD.CN-Prod: +- name: CD_Messaging-Services PROD +- tag: MSGSVC +- mzId: CD_Messaging-Services/management-zone/CDMessaging-Services.id +- env: PROD +- skipDeployment: "false" + + +#INT alerting profiles for EMEA/NA/CN +#Dry-run needed for all hubs +CDMessaging-Services-INT: +- name: CD_Messaging-Services INT +- tag: MSGSVC +- mzId: CD_Messaging-Services/management-zone/CDMessaging-Services.id +- env: INT +- skipDeployment: "true" +#Configuration +CDMessaging-Services-INT.EMEA-PreProd: +- name: CD_Messaging-Services INT +- tag: MSGSVC +- mzId: CD_Messaging-Services/management-zone/CDMessaging-Services.id +- env: INT +- skipDeployment: "false" +CDMessaging-Services-INT.NA-PreProd: +- name: CD_Messaging-Services INT +- tag: MSGSVC +- mzId: CD_Messaging-Services/management-zone/CDMessaging-Services.id +- env: INT +- skipDeployment: "false" +CDMessaging-Services-INT.CN-PreProd: +- name: CD_Messaging-Services INT +- tag: MSGSVC +- mzId: CD_Messaging-Services/management-zone/CDMessaging-Services.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_Messaging-Services/alerting-profile/default.json b/BMW-Dynatrace-config/CD_Messaging-Services/alerting-profile/default.json new file mode 100644 index 00000000..681a4c64 --- /dev/null +++ b/BMW-Dynatrace-config/CD_Messaging-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_Messaging-Services/calculated-metrics-service/README.md b/BMW-Dynatrace-config/CD_Messaging-Services/calculated-metrics-service/README.md new file mode 100644 index 00000000..0bf8efbc --- /dev/null +++ b/BMW-Dynatrace-config/CD_Messaging-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_Messaging-Services/conditional-naming-processgroup/README.md b/BMW-Dynatrace-config/CD_Messaging-Services/conditional-naming-processgroup/README.md new file mode 100644 index 00000000..f94196a5 --- /dev/null +++ b/BMW-Dynatrace-config/CD_Messaging-Services/conditional-naming-processgroup/README.md @@ -0,0 +1,67 @@ +### Process Group Detection Rules and Naming + +#### Detection Rule or Naming? + +For the explanation, we're using a real example of the Infotainment application: + +!(PGNaming1)[../../../../img/PGNaming1.PNG] + +Before working with your dashboards and alerting profiles, an important task to do when working with Dynatrace is checking +the structure of your applications (process groups). You can do that clicking under *technologies* and filter using your +application Management Zone. + +In the picture above, there are two Process Groups called bon-information-prod. **If you see duplicated process groups like in** +**this case, you MUST follow this guideline** + +Next step would be to open both process groups and compare the metadata. In that way, you can identify if all process instances are +part of the same application or not. An easy way to do that is asking yourself: how many instances of my application do i have? + +If you have 4 instances in total and you're able to see 2 in one PG and other 2 in other PG it means that **they are part of the ** +**same application** + +Another situation could be that checking on the metadata, then you see that are **two different application** and Dynatrace is just naming +the process group in the same way + +*Same application* +- Problem: Dynatrace is creating two different process groups, what transalates in two separated services for the same application. Instead of +seeing all the traffic in one service, you will have it splitted and it will complicate your monitoring +- Solution: create a process group detection rule. Contact Dynatrace Expert + +*Different application* +- Problem: Dynatrace is just naming in the same way applications that are different. +- Solution: This case is less severe, since it can be fixed with a process group naming rule. + + +What about our example? +!(PGNaming2)[../../../../img/PGNaming2.PNG] +!(PGNaming3)[../../../../img/PGNaming3.PNG] + +Based on the feedback of the infotaiment team, each process group is a different application (microservice) and it's visible in the kubernetes container/workload +within the metadata of each Process Group. + +#### How to create a Process Group Detection Rule +1. Open the *conditional-naming-processgroup.yaml* file and create a rule that looks like this: +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName} +- tag: Infotainment +- skipDeployment: false +``` +The result of the rule will be renaming the PG to this: +``` +bon-information-prod ipa +bon-information-prod rsl +``` + +Other possible placeholders that you can use are for example: +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName/[^\\-]*$} +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesFullPodName/buffet-(.*?)-} +{ProcessGroup:DetectedName} - {HostGroup:Name/[^\\_]*$} +{ProcessGroup:KubernetesNamespace} +{ProcessGroup:CommandLineArgs/.*?\\-f\\s\\/www\\/(.*?)\\/generated\\/httpd\\.conf.*?} + +You can combine different ones. Check the (documentation)[link] for more \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_Messaging-Services/conditional-naming-processgroup/conditional-naming-processgroup.yaml b/BMW-Dynatrace-config/CD_Messaging-Services/conditional-naming-processgroup/conditional-naming-processgroup.yaml new file mode 100644 index 00000000..f7069e40 --- /dev/null +++ b/BMW-Dynatrace-config/CD_Messaging-Services/conditional-naming-processgroup/conditional-naming-processgroup.yaml @@ -0,0 +1,8 @@ +config: +- CDMessaging-Services: template.json + +CDMessaging-Services: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: MSGSVC +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_Messaging-Services/conditional-naming-processgroup/template.json b/BMW-Dynatrace-config/CD_Messaging-Services/conditional-naming-processgroup/template.json new file mode 100644 index 00000000..7c039808 --- /dev/null +++ b/BMW-Dynatrace-config/CD_Messaging-Services/conditional-naming-processgroup/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "type": "PROCESS_GROUP" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_Messaging-Services/conditional-naming-service/README.md b/BMW-Dynatrace-config/CD_Messaging-Services/conditional-naming-service/README.md new file mode 100644 index 00000000..c34ef308 --- /dev/null +++ b/BMW-Dynatrace-config/CD_Messaging-Services/conditional-naming-service/README.md @@ -0,0 +1,35 @@ +### Service Naming Rules + +A typical case could be that you access to *Transaction & Services* and you find two services that are exactly the same: +*DataDownloadV1* +*DataDownloadV1* + +If you drilldown into the service and you check in the process group, you may have a PROD and a E2E for each service. + +*Note: if you see that both process group are exactly the same, please contact a Dynatrace expert to create a Process* +*Group detection rule* + +In the case the PG are PROD and E2E, then we need to create a rule that looks like this: + +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {Service:DetectedName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +- tag: Infotainment +- skipDeployment: false +``` + +The rule will get the Service Detected Name (current name) and it will extract (with a regex) the part of the kubernetes namespace after the "-", so -prod or -e2e, resulting in: +*DataDownloadV1 - prod* +*DataDownloadV1 - e2e* + +Now, services will be easy to identify. + +You can create rules based on any property/metadata. Some other placeholder's eamples: +{Service:DatabaseName} - E2E +{Service:WebServiceName} - {ProcessGroup:Kubernetes:microservice} - {ProcessGroup:Kubernetes:environment} +{Service:DetectedName} - {ProcessGroup:KubernetesContainerName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +{Service:DetectedName} - {ProcessGroup:SpringBootProfileName/[^\\-]*$} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_Messaging-Services/conditional-naming-service/conditional-naming-service.yaml b/BMW-Dynatrace-config/CD_Messaging-Services/conditional-naming-service/conditional-naming-service.yaml new file mode 100644 index 00000000..f7069e40 --- /dev/null +++ b/BMW-Dynatrace-config/CD_Messaging-Services/conditional-naming-service/conditional-naming-service.yaml @@ -0,0 +1,8 @@ +config: +- CDMessaging-Services: template.json + +CDMessaging-Services: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: MSGSVC +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_Messaging-Services/conditional-naming-service/template.json b/BMW-Dynatrace-config/CD_Messaging-Services/conditional-naming-service/template.json new file mode 100644 index 00000000..5d4fac56 --- /dev/null +++ b/BMW-Dynatrace-config/CD_Messaging-Services/conditional-naming-service/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "type": "SERVICE" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_Messaging-Services/custom-service-java/README.md b/BMW-Dynatrace-config/CD_Messaging-Services/custom-service-java/README.md new file mode 100644 index 00000000..5f35e5c1 --- /dev/null +++ b/BMW-Dynatrace-config/CD_Messaging-Services/custom-service-java/README.md @@ -0,0 +1,4 @@ + +### How to configure custom services? + +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Custom+Services) page to configure your custom services. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_Messaging-Services/custom-service-java/custom-service-java.yaml b/BMW-Dynatrace-config/CD_Messaging-Services/custom-service-java/custom-service-java.yaml new file mode 100644 index 00000000..25f8a028 --- /dev/null +++ b/BMW-Dynatrace-config/CD_Messaging-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_Messaging-Services/custom-service-java/template-1-1.json b/BMW-Dynatrace-config/CD_Messaging-Services/custom-service-java/template-1-1.json new file mode 100644 index 00000000..b3003515 --- /dev/null +++ b/BMW-Dynatrace-config/CD_Messaging-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_Messaging-Services/dashboard/README.md b/BMW-Dynatrace-config/CD_Messaging-Services/dashboard/README.md new file mode 100644 index 00000000..dffcdc8a --- /dev/null +++ b/BMW-Dynatrace-config/CD_Messaging-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_Messaging-Services/dashboard/dashboard.yaml b/BMW-Dynatrace-config/CD_Messaging-Services/dashboard/dashboard.yaml new file mode 100644 index 00000000..3f4cd719 --- /dev/null +++ b/BMW-Dynatrace-config/CD_Messaging-Services/dashboard/dashboard.yaml @@ -0,0 +1,127 @@ +config: +- CDMessaging-Services-PROD: default.json +- CDMessaging-Services-E2E: default.json +- CDMessaging-Services-INT: default.json +- CDMessaging-Services-TEST: default.json + +#PROD dashboards for EMEA/NA/CN Prod +#Dry-run needed for all hubs +CDMessaging-Services-PROD: +- name: CD_Messaging-Services PROD +- mzName: CD_Messaging-Services/management-zone/CDMessaging-Services.name +- mzId: CD_Messaging-Services/management-zone/CDMessaging-Services.id +- env: PROD +- skipDeployment: "true" +#Configuration +CDMessaging-Services-PROD.EMEA-Prod: +- name: CD_Messaging-Services PROD +- mzName: CD_Messaging-Services/management-zone/CDMessaging-Services.name +- mzId: CD_Messaging-Services/management-zone/CDMessaging-Services.id +- tag: Messaging-Services +- env: PROD +- skipDeployment: "false" +CDMessaging-Services-PROD.NA-Prod: +- name: CD_Messaging-Services PROD +- mzName: CD_Messaging-Services/management-zone/CDMessaging-Services.name +- mzId: CD_Messaging-Services/management-zone/CDMessaging-Services.id +- tag: Messaging-Services +- env: PROD +- skipDeployment: "false" +CDMessaging-Services-PROD.CN-Prod: +- name: CD_Messaging-Services PROD +- mzName: CD_Messaging-Services/management-zone/CDMessaging-Services.name +- mzId: CD_Messaging-Services/management-zone/CDMessaging-Services.id +- tag: Messaging-Services +- env: PROD +- skipDeployment: "false" + +#E2E dashboards for EMEA/NA/CN E2E +#Dry-run needed for all hubs +CDMessaging-Services-E2E: +- name: CD_Messaging-Services E2E +- mzName: CD_Messaging-Services/management-zone/CDMessaging-Services.name +- mzId: CD_Messaging-Services/management-zone/CDMessaging-Services.id +- env: E2E +- skipDeployment: "true" +#Configuration +CDMessaging-Services-E2E.EMEA-Prod: +- name: CD_Messaging-Services E2E +- mzName: CD_Messaging-Services/management-zone/CDMessaging-Services.name +- mzId: CD_Messaging-Services/management-zone/CDMessaging-Services.id +- env: E2E +- tag: Messaging-Services +- skipDeployment: "true" +CDMessaging-Services-E2E.NA-Prod: +- name: CD_Messaging-Services E2E +- mzName: CD_Messaging-Services/management-zone/CDMessaging-Services.name +- mzId: CD_Messaging-Services/management-zone/CDMessaging-Services.id +- env: E2E +- tag: Messaging-Services +- skipDeployment: "true" +CDMessaging-Services-E2E.CN-Prod: +- name: CD_Messaging-Services E2E +- mzName: CD_Messaging-Services/management-zone/CDMessaging-Services.name +- mzId: CD_Messaging-Services/management-zone/CDMessaging-Services.id +- env: E2E +- tag: Messaging-Services +- skipDeployment: "true" + +#INT dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDMessaging-Services-INT: +- name: CD_Messaging-Services INT +- mzName: CD_Messaging-Services/management-zone/CDMessaging-Services.name +- mzId: CD_Messaging-Services/management-zone/CDMessaging-Services.id +- env: INT +- tag: Messaging-Services +- skipDeployment: "true" +#Configuration +CDMessaging-Services-INT.EMEA-PreProd: +- name: CD_Messaging-Services INT +- mzName: CD_Messaging-Services/management-zone/CDMessaging-Services.name +- mzId: CD_Messaging-Services/management-zone/CDMessaging-Services.id +- env: INT +- tag: Messaging-Services +- skipDeployment: "false" +CDMessaging-Services-INT.NA-PreProd: +- name: CD_Messaging-Services INT +- mzName: CD_Messaging-Services/management-zone/CDMessaging-Services.name +- mzId: CD_Messaging-Services/management-zone/CDMessaging-Services.id +- env: INT +- skipDeployment: "false" +CDMessaging-Services-INT.CN-PreProd: +- name: CD_Messaging-Services INT +- mzName: CD_Messaging-Services/management-zone/CDMessaging-Services.name +- mzId: CD_Messaging-Services/management-zone/CDMessaging-Services.id +- env: INT +- skipDeployment: "false" + +#TEST dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDMessaging-Services-TEST: +- name: CD_Messaging-Services TEST +- mzName: CD_Messaging-Services/management-zone/CDMessaging-Services.name +- mzId: CD_Messaging-Services/management-zone/CDMessaging-Services.id +- tag: Messaging-Services +- env: TEST +- skipDeployment: "true" +#Configuration +CDMessaging-Services-TEST.EMEA-PreProd: +- name: CD_Messaging-Services TEST +- mzName: CD_Messaging-Services/management-zone/CDMessaging-Services.name +- mzId: CD_Messaging-Services/management-zone/CDMessaging-Services.id +- tag: Messaging-Services +- env: TEST +- skipDeployment: "false" +CDMessaging-Services-TEST.NA-PreProd: +- name: CD_Messaging-Services TEST +- mzName: CD_Messaging-Services/management-zone/CDMessaging-Services.name +- mzId: CD_Messaging-Services/management-zone/CDMessaging-Services.id +- env: TEST +- skipDeployment: "false" +CDMessaging-Services-TEST.CN-PreProd: +- name: CD_Messaging-Services TEST +- mzName: CD_Messaging-Services/management-zone/CDMessaging-Services.name +- mzId: CD_Messaging-Services/management-zone/CDMessaging-Services.id +- env: TEST +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_Messaging-Services/dashboard/default.json b/BMW-Dynatrace-config/CD_Messaging-Services/dashboard/default.json new file mode 100644 index 00000000..6c685810 --- /dev/null +++ b/BMW-Dynatrace-config/CD_Messaging-Services/dashboard/default.json @@ -0,0 +1,308 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.214.107.20210407-223952" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": true, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "timeframe": "-24h to now" + }, + "tags": [ + "{{.tag}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 228, + "left": 38, + "width": 1064, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Failure rate (HTTP 4xx/5xx errors)", + "defaultName": "Custom chart", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [ + { + "metric": "builtin:service.errors.fourxx.rate", + "aggregation": "AVG", + "type": "BAR", + "entityType": "SERVICE", + "dimensions": [], + "sortAscending": false, + "sortColumn": false, + "aggregationRate": "TOTAL" + }, + { + "metric": "builtin:service.errors.fivexx.rate", + "aggregation": "AVG", + "type": "BAR", + "entityType": "SERVICE", + "dimensions": [], + "sortAscending": false, + "sortColumn": true, + "aggregationRate": "TOTAL" + } + ], + "resultMetadata": { + "nullbuiltin:service.errors.fivexx.rate|AVG|TOTAL|BAR|SERVICE": { + "lastModified": 1617956393463, + "customColor": "#ff0000" + }, + "nullbuiltin:service.errors.fourxx.rate|AVG|TOTAL|BAR|SERVICE": { + "lastModified": 1617956441725, + "customColor": "#fff29a" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:{{.env}}", + "Component:{{.tag}}" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 38, + "left": 950, + "width": 152, + "height": 152 + }, + "tileFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + } + }, + { + "name": "Overall Health", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 0, + "left": 38, + "width": 1064, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 532, + "left": 38, + "width": 1064, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 570, + "left": 38, + "width": 1064, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Request Count and Number of Errors", + "defaultName": "Custom chart", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [ + { + "metric": "builtin:service.response.time", + "aggregation": "AVG", + "type": "LINE", + "entityType": "SERVICE", + "dimensions": [], + "sortAscending": false, + "sortColumn": false, + "aggregationRate": "TOTAL" + }, + { + "metric": "builtin:service.requestCount.total", + "aggregation": "NONE", + "type": "BAR", + "entityType": "SERVICE", + "dimensions": [], + "sortAscending": false, + "sortColumn": false, + "aggregationRate": "TOTAL" + }, + { + "metric": "builtin:service.errors.total.count", + "aggregation": "NONE", + "type": "BAR", + "entityType": "SERVICE", + "dimensions": [], + "sortAscending": false, + "sortColumn": true, + "aggregationRate": "TOTAL" + } + ], + "resultMetadata": { + "nullbuiltin:service.requestCount.total|NONE|TOTAL|BAR|SERVICE": { + "lastModified": 1595275720776, + "customColor": "#008cdb" + }, + "nullbuiltin:service.errors.total.count|NONE|TOTAL|BAR|SERVICE": { + "lastModified": 1595275955999, + "customColor": "#ef651f" + }, + "nullbuiltin:service.response.time|AVG|TOTAL|LINE|SERVICE": { + "lastModified": 1595275686773, + "customColor": "#b4e5f9" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:{{.env}}", + "Component:{{.tag}}" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 190, + "left": 38, + "width": 1064, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 38, + "left": 646, + "width": 190, + "height": 152 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:{{.env}}", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 38, + "left": 342, + "width": 190, + "height": 152 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:{{.env}}", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 190, + "height": 152 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:{{.env}}", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_Messaging-Services/management-zone/CDMessaging-Services.json b/BMW-Dynatrace-config/CD_Messaging-Services/management-zone/CDMessaging-Services.json deleted file mode 100644 index 93e11f20..00000000 --- a/BMW-Dynatrace-config/CD_Messaging-Services/management-zone/CDMessaging-Services.json +++ /dev/null @@ -1,176 +0,0 @@ -{ - "dimensionalRules": [], - "metadata": { - "clusterVersion": "1.209.98.20210122-102634", - "configurationVersions": [ - 0 - ] - }, - "name": "{{.name}}", - "rules": [ - { - "conditions": [ - { - "comparisonInfo": { - "negate": false, - "operator": "EQUALS", - "type": "TAG", - "value": { - "context": "CONTEXTLESS", - "key": "Component", - "value": "XCC" - } - }, - "key": { - "attribute": "SERVICE_TAGS" - } - }, - { - "comparisonInfo": { - "caseSensitive": true, - "negate": true, - "operator": "BEGINS_WITH", - "type": "STRING", - "value": "PingResource" - }, - "key": { - "attribute": "SERVICE_NAME" - } - }, - { - "comparisonInfo": { - "caseSensitive": true, - "negate": true, - "operator": "BEGINS_WITH", - "type": "STRING", - "value": "PrometheusResource" - }, - "key": { - "attribute": "SERVICE_NAME" - } - }, - { - "comparisonInfo": { - "caseSensitive": true, - "negate": true, - "operator": "BEGINS_WITH", - "type": "STRING", - "value": "HealthResource" - }, - "key": { - "attribute": "SERVICE_NAME" - } - } - ], - "enabled": true, - "propagationTypes": [], - "type": "SERVICE" - }, - { - "conditions": [ - { - "comparisonInfo": { - "negate": false, - "operator": "EQUALS", - "type": "TAG", - "value": { - "context": "CONTEXTLESS", - "key": "Component", - "value": "MSGSVC" - } - }, - "key": { - "attribute": "SERVICE_TAGS" - } - }, - { - "comparisonInfo": { - "caseSensitive": true, - "negate": true, - "operator": "BEGINS_WITH", - "type": "STRING", - "value": "PingResource" - }, - "key": { - "attribute": "SERVICE_NAME" - } - }, - { - "comparisonInfo": { - "caseSensitive": true, - "negate": true, - "operator": "BEGINS_WITH", - "type": "STRING", - "value": "PrometheusResource" - }, - "key": { - "attribute": "SERVICE_NAME" - } - }, - { - "comparisonInfo": { - "caseSensitive": true, - "negate": true, - "operator": "BEGINS_WITH", - "type": "STRING", - "value": "HealthResource" - }, - "key": { - "attribute": "SERVICE_NAME" - } - } - ], - "enabled": true, - "propagationTypes": [], - "type": "SERVICE" - }, - { - "conditions": [ - { - "comparisonInfo": { - "negate": false, - "operator": "EQUALS", - "type": "TAG", - "value": { - "context": "CONTEXTLESS", - "key": "Component", - "value": "XCC" - } - }, - "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": "MSGSVC" - } - }, - "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_Messaging-Services/management-zone/README.md b/BMW-Dynatrace-config/CD_Messaging-Services/management-zone/README.md new file mode 100644 index 00000000..3244b3e6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_Messaging-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_DPP_DPM/management-zone/CDTemplate.json b/BMW-Dynatrace-config/CD_Messaging-Services/management-zone/default.json similarity index 61% rename from BMW-Dynatrace-config/CD_DPP_DPM/management-zone/CDTemplate.json rename to BMW-Dynatrace-config/CD_Messaging-Services/management-zone/default.json index 1a079e6f..c25120d8 100644 --- a/BMW-Dynatrace-config/CD_DPP_DPM/management-zone/CDTemplate.json +++ b/BMW-Dynatrace-config/CD_Messaging-Services/management-zone/default.json @@ -18,103 +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, - "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": "DPM" - } - }, - "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, @@ -158,7 +61,91 @@ "value": { "context": "CONTEXTLESS", "key": "Component", - "value": "DPM" + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "HOST_TAGS" + } + } + ], + "enabled": true, + "type": "HOST" + }, + { + "conditions": [ + { + "comparisonInfo": { + "caseSensitive": true, + "negate": false, + "operator": "CONTAINS", + "type": "STRING", + "value": "{{.tag}}" + }, + "key": { + "attribute": "CLOUD_APPLICATION_NAMESPACE_NAME" + } + } + ], + "enabled": true, + "propagationTypes": [], + "type": "CLOUD_APPLICATION_NAMESPACE" + }, + { + "conditions": [ + { + "comparisonInfo": { + "caseSensitive": true, + "negate": false, + "operator": "CONTAINS", + "type": "STRING", + "value": "{{.tag}}" + }, + "key": { + "attribute": "CLOUD_APPLICATION_NAME" + } + } + ], + "enabled": true, + "propagationTypes": [], + "type": "CLOUD_APPLICATION" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag2}}" + } + }, + "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": "{{.tag2}}" } }, "key": { @@ -171,6 +158,65 @@ "PROCESS_GROUP_TO_HOST" ], "type": "PROCESS_GROUP" + }, + { + "conditions": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag2}}" + } + }, + "key": { + "attribute": "HOST_TAGS" + } + } + ], + "enabled": true, + "type": "HOST" + }, + { + "conditions": [ + { + "comparisonInfo": { + "caseSensitive": true, + "negate": false, + "operator": "CONTAINS", + "type": "STRING", + "value": "{{.tag2}}" + }, + "key": { + "attribute": "CLOUD_APPLICATION_NAMESPACE_NAME" + } + } + ], + "enabled": true, + "propagationTypes": [], + "type": "CLOUD_APPLICATION_NAMESPACE" + }, + { + "conditions": [ + { + "comparisonInfo": { + "caseSensitive": true, + "negate": false, + "operator": "CONTAINS", + "type": "STRING", + "value": "{{.tag2}}" + }, + "key": { + "attribute": "CLOUD_APPLICATION_NAME" + } + } + ], + "enabled": true, + "propagationTypes": [], + "type": "CLOUD_APPLICATION" } ] } \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_Messaging-Services/management-zone/management-zone.yaml b/BMW-Dynatrace-config/CD_Messaging-Services/management-zone/management-zone.yaml index 6232691d..f017f89c 100644 --- a/BMW-Dynatrace-config/CD_Messaging-Services/management-zone/management-zone.yaml +++ b/BMW-Dynatrace-config/CD_Messaging-Services/management-zone/management-zone.yaml @@ -1,5 +1,7 @@ config: -- CDMessaging-Services: CDMessaging-Services.json +- CDMessaging-Services: default.json CDMessaging-Services: - name: CD_Messaging-Services +- tag: XCC +- tag2: MSGSVC diff --git a/BMW-Dynatrace-config/CD_Messaging-Services/notification/README.md b/BMW-Dynatrace-config/CD_Messaging-Services/notification/README.md new file mode 100644 index 00000000..e1a6af84 --- /dev/null +++ b/BMW-Dynatrace-config/CD_Messaging-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_Messaging-Services/notification/email.json b/BMW-Dynatrace-config/CD_Messaging-Services/notification/email.json new file mode 100644 index 00000000..486642a7 --- /dev/null +++ b/BMW-Dynatrace-config/CD_Messaging-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_Messaging-Services/notification/msTeams.json b/BMW-Dynatrace-config/CD_Messaging-Services/notification/msTeams.json new file mode 100644 index 00000000..33e92cf6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_Messaging-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_Messaging-Services/notification/notification.yaml b/BMW-Dynatrace-config/CD_Messaging-Services/notification/notification.yaml index 75c386b6..06160cf7 100644 --- a/BMW-Dynatrace-config/CD_Messaging-Services/notification/notification.yaml +++ b/BMW-Dynatrace-config/CD_Messaging-Services/notification/notification.yaml @@ -1,5 +1,51 @@ config: -- CDMessaging-Services-MSTeams: CDMessaging-Services.json -CDMessaging-Services-MSTeams: -- name: CD_Messaging-Services - MS Teams -- apid: /CD_Messaging-Services/alerting-profile/CDMessaging-Services.id \ No newline at end of file +- CDMessaging-Services-PROD: msTeams.json +- CDMessaging-Services-INT: msTeams.json + +#Prod notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDMessaging-Services-PROD: +- name: CD_Messaging-Services PROD +- alertingProfile: CD_Messaging-Services/alerting-profile/CDMessaging-Services-PROD.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDMessaging-Services-PROD.EMEA-Prod: +- name: CD_Messaging-Services PROD +- alertingProfile: CD_Messaging-Services/alerting-profile/CDMessaging-Services-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDMessaging-Services-PROD.NA-Prod: +- name: CD_Messaging-Services PROD +- alertingProfile: CD_Messaging-Services/alerting-profile/CDMessaging-Services-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDMessaging-Services-PROD.CN-Prod: +- name: CD_Messaging-Services PROD +- alertingProfile: CD_Messaging-Services/alerting-profile/CDMessaging-Services-PROD.id +- webhook: https://empty +- skipDeployment: "false" + +#INT notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDMessaging-Services-INT: +- name: CD_Messaging-Services INT +- alertingProfile: CD_Messaging-Services/alerting-profile/CDMessaging-Services-INT.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDMessaging-Services-INT.EMEA-PreProd: +- name: CD_Messaging-Services INT +- alertingProfile: CD_Messaging-Services/alerting-profile/CDMessaging-Services-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDMessaging-Services-INT.NA-PreProd: +- name: CD_Messaging-Services INT +- alertingProfile: CD_Messaging-Services/alerting-profile/CDMessaging-Services-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDMessaging-Services-INT.CN-PreProd: +- name: CD_Messaging-Services INT +- alertingProfile: CD_Messaging-Services/alerting-profile/CDMessaging-Services-INT.id +- webhook: https://empty +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_Messaging-Services/synthetic-monitor/README.md b/BMW-Dynatrace-config/CD_Messaging-Services/synthetic-monitor/README.md new file mode 100644 index 00000000..1695924c --- /dev/null +++ b/BMW-Dynatrace-config/CD_Messaging-Services/synthetic-monitor/README.md @@ -0,0 +1,4 @@ + +### How to configure synthetics? + +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Synthetic+Monitors) page to configure your synthetics. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_Messaging-Services/synthetic-monitor/default.json b/BMW-Dynatrace-config/CD_Messaging-Services/synthetic-monitor/default.json new file mode 100644 index 00000000..cf83039b --- /dev/null +++ b/BMW-Dynatrace-config/CD_Messaging-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_Messaging-Services/synthetic-monitor/synthetic-monitor.yaml b/BMW-Dynatrace-config/CD_Messaging-Services/synthetic-monitor/synthetic-monitor.yaml new file mode 100644 index 00000000..b0e4d6c1 --- /dev/null +++ b/BMW-Dynatrace-config/CD_Messaging-Services/synthetic-monitor/synthetic-monitor.yaml @@ -0,0 +1,10 @@ +config: +- Messaging-Services: default.json + +Messaging-Services: +- name: CD_Messaging-Services - +- mzName: CD_Messaging-Services/management-zone/CDMessaging-Services.name +- mzId: CD_Messaging-Services/management-zone/CDMessaging-Services.id +- endpoint: +- location: +- skipDeployment: "true" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_PISA/alerting-profile/NewComponent.json b/BMW-Dynatrace-config/CD_PISA/alerting-profile/NewComponent.json deleted file mode 100644 index d10ad44a..00000000 --- a/BMW-Dynatrace-config/CD_PISA/alerting-profile/NewComponent.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_PISA/alerting-profile/alerting-profile.yaml b/BMW-Dynatrace-config/CD_PISA/alerting-profile/alerting-profile.yaml index 5bdc593c..89cd37c2 100644 --- a/BMW-Dynatrace-config/CD_PISA/alerting-profile/alerting-profile.yaml +++ b/BMW-Dynatrace-config/CD_PISA/alerting-profile/alerting-profile.yaml @@ -1,8 +1,60 @@ config: - - CDNewComponent: NewComponent.json +- CDPISA-PROD: default.json +- CDPISA-INT: default.json -CDNewComponent: - - name: "/CD_PISA/management-zone/CDPISA.name" - - tag: PISA - - mzId: "/CD_PISA/management-zone/CDPISA.id" - +#Prod alerting profiles for EMEA/NA/CN +#Dry-run needed for all hubs +CDPISA-PROD: +- name: CD_PISA PROD +- tag: PISA +- mzId: CD_PISA/management-zone/CDPISA.id +- env: PROD +- skipDeployment: "true" +#Configuration +CDPISA-PROD.EMEA-Prod: +- name: CD_PISA PROD +- tag: PISA +- mzId: CD_PISA/management-zone/CDPISA.id +- env: PROD +- skipDeployment: "false" +CDPISA-PROD.NA-Prod: +- name: CD_PISA PROD +- tag: PISA +- mzId: CD_PISA/management-zone/CDPISA.id +- env: PROD +- skipDeployment: "false" +CDPISA-PROD.CN-Prod: +- name: CD_PISA PROD +- tag: PISA +- mzId: CD_PISA/management-zone/CDPISA.id +- env: PROD +- skipDeployment: "false" + + +#INT alerting profiles for EMEA/NA/CN +#Dry-run needed for all hubs +CDPISA-INT: +- name: CD_PISA INT +- tag: PISA +- mzId: CD_PISA/management-zone/CDPISA.id +- env: INT +- skipDeployment: "true" +#Configuration +CDPISA-INT.EMEA-PreProd: +- name: CD_PISA INT +- tag: PISA +- mzId: CD_PISA/management-zone/CDPISA.id +- env: INT +- skipDeployment: "false" +CDPISA-INT.NA-PreProd: +- name: CD_PISA INT +- tag: PISA +- mzId: CD_PISA/management-zone/CDPISA.id +- env: INT +- skipDeployment: "false" +CDPISA-INT.CN-PreProd: +- name: CD_PISA INT +- tag: PISA +- mzId: CD_PISA/management-zone/CDPISA.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_PISA/alerting-profile/default.json b/BMW-Dynatrace-config/CD_PISA/alerting-profile/default.json new file mode 100644 index 00000000..681a4c64 --- /dev/null +++ b/BMW-Dynatrace-config/CD_PISA/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_PISA/calculated-metrics-service/README.md b/BMW-Dynatrace-config/CD_PISA/calculated-metrics-service/README.md new file mode 100644 index 00000000..0bf8efbc --- /dev/null +++ b/BMW-Dynatrace-config/CD_PISA/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_PISA/conditional-naming-processgroup/README.md b/BMW-Dynatrace-config/CD_PISA/conditional-naming-processgroup/README.md new file mode 100644 index 00000000..f94196a5 --- /dev/null +++ b/BMW-Dynatrace-config/CD_PISA/conditional-naming-processgroup/README.md @@ -0,0 +1,67 @@ +### Process Group Detection Rules and Naming + +#### Detection Rule or Naming? + +For the explanation, we're using a real example of the Infotainment application: + +!(PGNaming1)[../../../../img/PGNaming1.PNG] + +Before working with your dashboards and alerting profiles, an important task to do when working with Dynatrace is checking +the structure of your applications (process groups). You can do that clicking under *technologies* and filter using your +application Management Zone. + +In the picture above, there are two Process Groups called bon-information-prod. **If you see duplicated process groups like in** +**this case, you MUST follow this guideline** + +Next step would be to open both process groups and compare the metadata. In that way, you can identify if all process instances are +part of the same application or not. An easy way to do that is asking yourself: how many instances of my application do i have? + +If you have 4 instances in total and you're able to see 2 in one PG and other 2 in other PG it means that **they are part of the ** +**same application** + +Another situation could be that checking on the metadata, then you see that are **two different application** and Dynatrace is just naming +the process group in the same way + +*Same application* +- Problem: Dynatrace is creating two different process groups, what transalates in two separated services for the same application. Instead of +seeing all the traffic in one service, you will have it splitted and it will complicate your monitoring +- Solution: create a process group detection rule. Contact Dynatrace Expert + +*Different application* +- Problem: Dynatrace is just naming in the same way applications that are different. +- Solution: This case is less severe, since it can be fixed with a process group naming rule. + + +What about our example? +!(PGNaming2)[../../../../img/PGNaming2.PNG] +!(PGNaming3)[../../../../img/PGNaming3.PNG] + +Based on the feedback of the infotaiment team, each process group is a different application (microservice) and it's visible in the kubernetes container/workload +within the metadata of each Process Group. + +#### How to create a Process Group Detection Rule +1. Open the *conditional-naming-processgroup.yaml* file and create a rule that looks like this: +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName} +- tag: Infotainment +- skipDeployment: false +``` +The result of the rule will be renaming the PG to this: +``` +bon-information-prod ipa +bon-information-prod rsl +``` + +Other possible placeholders that you can use are for example: +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName/[^\\-]*$} +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesFullPodName/buffet-(.*?)-} +{ProcessGroup:DetectedName} - {HostGroup:Name/[^\\_]*$} +{ProcessGroup:KubernetesNamespace} +{ProcessGroup:CommandLineArgs/.*?\\-f\\s\\/www\\/(.*?)\\/generated\\/httpd\\.conf.*?} + +You can combine different ones. Check the (documentation)[link] for more \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_PISA/conditional-naming-processgroup/conditional-naming-processgroup.yaml b/BMW-Dynatrace-config/CD_PISA/conditional-naming-processgroup/conditional-naming-processgroup.yaml new file mode 100644 index 00000000..3db05b48 --- /dev/null +++ b/BMW-Dynatrace-config/CD_PISA/conditional-naming-processgroup/conditional-naming-processgroup.yaml @@ -0,0 +1,8 @@ +config: +- CDPISA: template.json + +CDPISA: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: PISA +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_PISA/conditional-naming-processgroup/template.json b/BMW-Dynatrace-config/CD_PISA/conditional-naming-processgroup/template.json new file mode 100644 index 00000000..7c039808 --- /dev/null +++ b/BMW-Dynatrace-config/CD_PISA/conditional-naming-processgroup/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "type": "PROCESS_GROUP" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_PISA/conditional-naming-service/README.md b/BMW-Dynatrace-config/CD_PISA/conditional-naming-service/README.md new file mode 100644 index 00000000..c34ef308 --- /dev/null +++ b/BMW-Dynatrace-config/CD_PISA/conditional-naming-service/README.md @@ -0,0 +1,35 @@ +### Service Naming Rules + +A typical case could be that you access to *Transaction & Services* and you find two services that are exactly the same: +*DataDownloadV1* +*DataDownloadV1* + +If you drilldown into the service and you check in the process group, you may have a PROD and a E2E for each service. + +*Note: if you see that both process group are exactly the same, please contact a Dynatrace expert to create a Process* +*Group detection rule* + +In the case the PG are PROD and E2E, then we need to create a rule that looks like this: + +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {Service:DetectedName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +- tag: Infotainment +- skipDeployment: false +``` + +The rule will get the Service Detected Name (current name) and it will extract (with a regex) the part of the kubernetes namespace after the "-", so -prod or -e2e, resulting in: +*DataDownloadV1 - prod* +*DataDownloadV1 - e2e* + +Now, services will be easy to identify. + +You can create rules based on any property/metadata. Some other placeholder's eamples: +{Service:DatabaseName} - E2E +{Service:WebServiceName} - {ProcessGroup:Kubernetes:microservice} - {ProcessGroup:Kubernetes:environment} +{Service:DetectedName} - {ProcessGroup:KubernetesContainerName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +{Service:DetectedName} - {ProcessGroup:SpringBootProfileName/[^\\-]*$} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_PISA/conditional-naming-service/conditional-naming-service.yaml b/BMW-Dynatrace-config/CD_PISA/conditional-naming-service/conditional-naming-service.yaml new file mode 100644 index 00000000..3db05b48 --- /dev/null +++ b/BMW-Dynatrace-config/CD_PISA/conditional-naming-service/conditional-naming-service.yaml @@ -0,0 +1,8 @@ +config: +- CDPISA: template.json + +CDPISA: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: PISA +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_PISA/conditional-naming-service/template.json b/BMW-Dynatrace-config/CD_PISA/conditional-naming-service/template.json new file mode 100644 index 00000000..5d4fac56 --- /dev/null +++ b/BMW-Dynatrace-config/CD_PISA/conditional-naming-service/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "type": "SERVICE" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_PISA/custom-service-java/README.md b/BMW-Dynatrace-config/CD_PISA/custom-service-java/README.md new file mode 100644 index 00000000..5f35e5c1 --- /dev/null +++ b/BMW-Dynatrace-config/CD_PISA/custom-service-java/README.md @@ -0,0 +1,4 @@ + +### How to configure custom services? + +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Custom+Services) page to configure your custom services. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_PISA/custom-service-java/custom-service-java.yaml b/BMW-Dynatrace-config/CD_PISA/custom-service-java/custom-service-java.yaml new file mode 100644 index 00000000..25f8a028 --- /dev/null +++ b/BMW-Dynatrace-config/CD_PISA/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_PISA/custom-service-java/template-1-1.json b/BMW-Dynatrace-config/CD_PISA/custom-service-java/template-1-1.json new file mode 100644 index 00000000..b3003515 --- /dev/null +++ b/BMW-Dynatrace-config/CD_PISA/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_PISA/dashboard/README.md b/BMW-Dynatrace-config/CD_PISA/dashboard/README.md new file mode 100644 index 00000000..dffcdc8a --- /dev/null +++ b/BMW-Dynatrace-config/CD_PISA/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_PISA/dashboard/dashboard.yaml b/BMW-Dynatrace-config/CD_PISA/dashboard/dashboard.yaml new file mode 100644 index 00000000..dcc27d70 --- /dev/null +++ b/BMW-Dynatrace-config/CD_PISA/dashboard/dashboard.yaml @@ -0,0 +1,127 @@ +config: +- CDPISA-PROD: default.json +- CDPISA-E2E: default.json +- CDPISA-INT: default.json +- CDPISA-TEST: default.json + +#PROD dashboards for EMEA/NA/CN Prod +#Dry-run needed for all hubs +CDPISA-PROD: +- name: CD_PISA PROD +- mzName: CD_PISA/management-zone/CDPISA.name +- mzId: CD_PISA/management-zone/CDPISA.id +- env: PROD +- skipDeployment: "true" +#Configuration +CDPISA-PROD.EMEA-Prod: +- name: CD_PISA PROD +- mzName: CD_PISA/management-zone/CDPISA.name +- mzId: CD_PISA/management-zone/CDPISA.id +- tag: PISA +- env: PROD +- skipDeployment: "false" +CDPISA-PROD.NA-Prod: +- name: CD_PISA PROD +- mzName: CD_PISA/management-zone/CDPISA.name +- mzId: CD_PISA/management-zone/CDPISA.id +- tag: PISA +- env: PROD +- skipDeployment: "false" +CDPISA-PROD.CN-Prod: +- name: CD_PISA PROD +- mzName: CD_PISA/management-zone/CDPISA.name +- mzId: CD_PISA/management-zone/CDPISA.id +- tag: PISA +- env: PROD +- skipDeployment: "false" + +#E2E dashboards for EMEA/NA/CN E2E +#Dry-run needed for all hubs +CDPISA-E2E: +- name: CD_PISA E2E +- mzName: CD_PISA/management-zone/CDPISA.name +- mzId: CD_PISA/management-zone/CDPISA.id +- env: E2E +- skipDeployment: "true" +#Configuration +CDPISA-E2E.EMEA-Prod: +- name: CD_PISA E2E +- mzName: CD_PISA/management-zone/CDPISA.name +- mzId: CD_PISA/management-zone/CDPISA.id +- env: E2E +- tag: PISA +- skipDeployment: "true" +CDPISA-E2E.NA-Prod: +- name: CD_PISA E2E +- mzName: CD_PISA/management-zone/CDPISA.name +- mzId: CD_PISA/management-zone/CDPISA.id +- env: E2E +- tag: PISA +- skipDeployment: "true" +CDPISA-E2E.CN-Prod: +- name: CD_PISA E2E +- mzName: CD_PISA/management-zone/CDPISA.name +- mzId: CD_PISA/management-zone/CDPISA.id +- env: E2E +- tag: PISA +- skipDeployment: "true" + +#INT dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDPISA-INT: +- name: CD_PISA INT +- mzName: CD_PISA/management-zone/CDPISA.name +- mzId: CD_PISA/management-zone/CDPISA.id +- env: INT +- tag: PISA +- skipDeployment: "true" +#Configuration +CDPISA-INT.EMEA-PreProd: +- name: CD_PISA INT +- mzName: CD_PISA/management-zone/CDPISA.name +- mzId: CD_PISA/management-zone/CDPISA.id +- env: INT +- tag: PISA +- skipDeployment: "false" +CDPISA-INT.NA-PreProd: +- name: CD_PISA INT +- mzName: CD_PISA/management-zone/CDPISA.name +- mzId: CD_PISA/management-zone/CDPISA.id +- env: INT +- skipDeployment: "false" +CDPISA-INT.CN-PreProd: +- name: CD_PISA INT +- mzName: CD_PISA/management-zone/CDPISA.name +- mzId: CD_PISA/management-zone/CDPISA.id +- env: INT +- skipDeployment: "false" + +#TEST dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDPISA-TEST: +- name: CD_PISA TEST +- mzName: CD_PISA/management-zone/CDPISA.name +- mzId: CD_PISA/management-zone/CDPISA.id +- tag: PISA +- env: TEST +- skipDeployment: "true" +#Configuration +CDPISA-TEST.EMEA-PreProd: +- name: CD_PISA TEST +- mzName: CD_PISA/management-zone/CDPISA.name +- mzId: CD_PISA/management-zone/CDPISA.id +- tag: PISA +- env: TEST +- skipDeployment: "false" +CDPISA-TEST.NA-PreProd: +- name: CD_PISA TEST +- mzName: CD_PISA/management-zone/CDPISA.name +- mzId: CD_PISA/management-zone/CDPISA.id +- env: TEST +- skipDeployment: "false" +CDPISA-TEST.CN-PreProd: +- name: CD_PISA TEST +- mzName: CD_PISA/management-zone/CDPISA.name +- mzId: CD_PISA/management-zone/CDPISA.id +- env: TEST +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_PISA/dashboard/default.json b/BMW-Dynatrace-config/CD_PISA/dashboard/default.json new file mode 100644 index 00000000..6c685810 --- /dev/null +++ b/BMW-Dynatrace-config/CD_PISA/dashboard/default.json @@ -0,0 +1,308 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.214.107.20210407-223952" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": true, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "timeframe": "-24h to now" + }, + "tags": [ + "{{.tag}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 228, + "left": 38, + "width": 1064, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Failure rate (HTTP 4xx/5xx errors)", + "defaultName": "Custom chart", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [ + { + "metric": "builtin:service.errors.fourxx.rate", + "aggregation": "AVG", + "type": "BAR", + "entityType": "SERVICE", + "dimensions": [], + "sortAscending": false, + "sortColumn": false, + "aggregationRate": "TOTAL" + }, + { + "metric": "builtin:service.errors.fivexx.rate", + "aggregation": "AVG", + "type": "BAR", + "entityType": "SERVICE", + "dimensions": [], + "sortAscending": false, + "sortColumn": true, + "aggregationRate": "TOTAL" + } + ], + "resultMetadata": { + "nullbuiltin:service.errors.fivexx.rate|AVG|TOTAL|BAR|SERVICE": { + "lastModified": 1617956393463, + "customColor": "#ff0000" + }, + "nullbuiltin:service.errors.fourxx.rate|AVG|TOTAL|BAR|SERVICE": { + "lastModified": 1617956441725, + "customColor": "#fff29a" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:{{.env}}", + "Component:{{.tag}}" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 38, + "left": 950, + "width": 152, + "height": 152 + }, + "tileFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + } + }, + { + "name": "Overall Health", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 0, + "left": 38, + "width": 1064, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 532, + "left": 38, + "width": 1064, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 570, + "left": 38, + "width": 1064, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Request Count and Number of Errors", + "defaultName": "Custom chart", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [ + { + "metric": "builtin:service.response.time", + "aggregation": "AVG", + "type": "LINE", + "entityType": "SERVICE", + "dimensions": [], + "sortAscending": false, + "sortColumn": false, + "aggregationRate": "TOTAL" + }, + { + "metric": "builtin:service.requestCount.total", + "aggregation": "NONE", + "type": "BAR", + "entityType": "SERVICE", + "dimensions": [], + "sortAscending": false, + "sortColumn": false, + "aggregationRate": "TOTAL" + }, + { + "metric": "builtin:service.errors.total.count", + "aggregation": "NONE", + "type": "BAR", + "entityType": "SERVICE", + "dimensions": [], + "sortAscending": false, + "sortColumn": true, + "aggregationRate": "TOTAL" + } + ], + "resultMetadata": { + "nullbuiltin:service.requestCount.total|NONE|TOTAL|BAR|SERVICE": { + "lastModified": 1595275720776, + "customColor": "#008cdb" + }, + "nullbuiltin:service.errors.total.count|NONE|TOTAL|BAR|SERVICE": { + "lastModified": 1595275955999, + "customColor": "#ef651f" + }, + "nullbuiltin:service.response.time|AVG|TOTAL|LINE|SERVICE": { + "lastModified": 1595275686773, + "customColor": "#b4e5f9" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:{{.env}}", + "Component:{{.tag}}" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 190, + "left": 38, + "width": 1064, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 38, + "left": 646, + "width": 190, + "height": 152 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:{{.env}}", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 38, + "left": 342, + "width": 190, + "height": 152 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:{{.env}}", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 190, + "height": 152 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:{{.env}}", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_PISA/management-zone/README.md b/BMW-Dynatrace-config/CD_PISA/management-zone/README.md new file mode 100644 index 00000000..3244b3e6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_PISA/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_PISA/management-zone/default.json b/BMW-Dynatrace-config/CD_PISA/management-zone/default.json new file mode 100644 index 00000000..bffa0c3b --- /dev/null +++ b/BMW-Dynatrace-config/CD_PISA/management-zone/default.json @@ -0,0 +1,114 @@ +{ + "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" + }, + { + "conditions": [ + { + "comparisonInfo": { + "caseSensitive": true, + "negate": false, + "operator": "CONTAINS", + "type": "STRING", + "value": "{{.tag}}" + }, + "key": { + "attribute": "CLOUD_APPLICATION_NAMESPACE_NAME" + } + } + ], + "enabled": true, + "propagationTypes": [], + "type": "CLOUD_APPLICATION_NAMESPACE" + }, + { + "conditions": [ + { + "comparisonInfo": { + "caseSensitive": true, + "negate": false, + "operator": "CONTAINS", + "type": "STRING", + "value": "{{.tag}}" + }, + "key": { + "attribute": "CLOUD_APPLICATION_NAME" + } + } + ], + "enabled": true, + "propagationTypes": [], + "type": "CLOUD_APPLICATION" + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_PISA/management-zone/management-zone.yaml b/BMW-Dynatrace-config/CD_PISA/management-zone/management-zone.yaml index e0e02db8..6486bdb9 100644 --- a/BMW-Dynatrace-config/CD_PISA/management-zone/management-zone.yaml +++ b/BMW-Dynatrace-config/CD_PISA/management-zone/management-zone.yaml @@ -1,26 +1,6 @@ config: - - CDPISA: "CDTemplate.json" +- CDPISA: default.json -CDPISA.EMEA-Prod: - - name: CD_PISA - - tag: PISA - -CDPISA.EMEA-PreProd: - - name: CD_PISA - - tag: PISA - -CDPISA.NA-Prod: - - name: CD_PISA - - tag: PISA - -CDPISA.NA-PreProd: - - name: CD_PISA - - tag: PISA - -CDPISA.CN-Prod: - - name: CD_PISA - - tag: PISA - -CDPISA.CN-PreProd: - - name: CD_PISA - - tag: PISA +CDPISA: +- name: CD_PISA +- tag: PISA diff --git a/BMW-Dynatrace-config/CD_PISA/notification/README.md b/BMW-Dynatrace-config/CD_PISA/notification/README.md new file mode 100644 index 00000000..e1a6af84 --- /dev/null +++ b/BMW-Dynatrace-config/CD_PISA/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_PISA/notification/email.json b/BMW-Dynatrace-config/CD_PISA/notification/email.json new file mode 100644 index 00000000..486642a7 --- /dev/null +++ b/BMW-Dynatrace-config/CD_PISA/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_PISA/notification/msTeams.json b/BMW-Dynatrace-config/CD_PISA/notification/msTeams.json new file mode 100644 index 00000000..33e92cf6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_PISA/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_PISA/notification/notification.yaml b/BMW-Dynatrace-config/CD_PISA/notification/notification.yaml index 4b5dc459..3bda4753 100644 --- a/BMW-Dynatrace-config/CD_PISA/notification/notification.yaml +++ b/BMW-Dynatrace-config/CD_PISA/notification/notification.yaml @@ -1,5 +1,51 @@ config: -- CDPISA-MSTeams: CDPISA-MSTeams.json -CDPISA-MSTeams: -- name: CD_PISA - MS Teams -- apid: "/CD_PISA/alerting-profile/CDNewComponent.id" \ No newline at end of file +- CDPISA-PROD: msTeams.json +- CDPISA-INT: msTeams.json + +#Prod notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDPISA-PROD: +- name: CD_PISA PROD +- alertingProfile: CD_PISA/alerting-profile/CDPISA-PROD.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDPISA-PROD.EMEA-Prod: +- name: CD_PISA PROD +- alertingProfile: CD_PISA/alerting-profile/CDPISA-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDPISA-PROD.NA-Prod: +- name: CD_PISA PROD +- alertingProfile: CD_PISA/alerting-profile/CDPISA-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDPISA-PROD.CN-Prod: +- name: CD_PISA PROD +- alertingProfile: CD_PISA/alerting-profile/CDPISA-PROD.id +- webhook: https://empty +- skipDeployment: "false" + +#INT notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDPISA-INT: +- name: CD_PISA INT +- alertingProfile: CD_PISA/alerting-profile/CDPISA-INT.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDPISA-INT.EMEA-PreProd: +- name: CD_PISA INT +- alertingProfile: CD_PISA/alerting-profile/CDPISA-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDPISA-INT.NA-PreProd: +- name: CD_PISA INT +- alertingProfile: CD_PISA/alerting-profile/CDPISA-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDPISA-INT.CN-PreProd: +- name: CD_PISA INT +- alertingProfile: CD_PISA/alerting-profile/CDPISA-INT.id +- webhook: https://empty +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_PISA/synthetic-monitor/README.md b/BMW-Dynatrace-config/CD_PISA/synthetic-monitor/README.md new file mode 100644 index 00000000..1695924c --- /dev/null +++ b/BMW-Dynatrace-config/CD_PISA/synthetic-monitor/README.md @@ -0,0 +1,4 @@ + +### How to configure synthetics? + +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Synthetic+Monitors) page to configure your synthetics. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_PISA/synthetic-monitor/default.json b/BMW-Dynatrace-config/CD_PISA/synthetic-monitor/default.json new file mode 100644 index 00000000..cf83039b --- /dev/null +++ b/BMW-Dynatrace-config/CD_PISA/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_PISA/synthetic-monitor/synthetic-monitor.yaml b/BMW-Dynatrace-config/CD_PISA/synthetic-monitor/synthetic-monitor.yaml new file mode 100644 index 00000000..db8fc976 --- /dev/null +++ b/BMW-Dynatrace-config/CD_PISA/synthetic-monitor/synthetic-monitor.yaml @@ -0,0 +1,10 @@ +config: +- PISA: default.json + +PISA: +- name: CD_PISA - +- mzName: CD_PISA/management-zone/CDPISA.name +- mzId: CD_PISA/management-zone/CDPISA.id +- endpoint: +- location: +- skipDeployment: "true" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_Perseus/alerting-profile/alerting-profile.yaml b/BMW-Dynatrace-config/CD_Perseus/alerting-profile/alerting-profile.yaml index 9b8d0fb6..844280f1 100644 --- a/BMW-Dynatrace-config/CD_Perseus/alerting-profile/alerting-profile.yaml +++ b/BMW-Dynatrace-config/CD_Perseus/alerting-profile/alerting-profile.yaml @@ -1,25 +1,60 @@ config: -- CDPerseus-E2E: Perseus.json -- CDPerseus-PROD: Perseus.json -- CDPerseus-INT: Perseus.json +- CDPerseus-PROD: default.json +- CDPerseus-INT: default.json -CDPerseus-E2E: -- name: CD_Perseus E2E +#Prod alerting profiles for EMEA/NA/CN +#Dry-run needed for all hubs +CDPerseus-PROD: +- name: CD_Perseus PROD - tag: Perseus - mzId: CD_Perseus/management-zone/CDPerseus.id -- env: E2E +- env: PROD +- skipDeployment: "true" +#Configuration +CDPerseus-PROD.EMEA-Prod: +- name: CD_Perseus PROD +- tag: Perseus +- mzId: CD_Perseus/management-zone/CDPerseus.id +- env: PROD - skipDeployment: "false" - -CDPerseus-PROD: +CDPerseus-PROD.NA-Prod: +- name: CD_Perseus PROD +- tag: Perseus +- mzId: CD_Perseus/management-zone/CDPerseus.id +- env: PROD +- skipDeployment: "false" +CDPerseus-PROD.CN-Prod: - name: CD_Perseus PROD - tag: Perseus - mzId: CD_Perseus/management-zone/CDPerseus.id - env: PROD - skipDeployment: "false" + +#INT alerting profiles for EMEA/NA/CN +#Dry-run needed for all hubs CDPerseus-INT: - name: CD_Perseus INT - tag: Perseus - mzId: CD_Perseus/management-zone/CDPerseus.id -- env: PROD +- env: INT +- skipDeployment: "true" +#Configuration +CDPerseus-INT.EMEA-PreProd: +- name: CD_Perseus INT +- tag: Perseus +- mzId: CD_Perseus/management-zone/CDPerseus.id +- env: INT - skipDeployment: "false" +CDPerseus-INT.NA-PreProd: +- name: CD_Perseus INT +- tag: Perseus +- mzId: CD_Perseus/management-zone/CDPerseus.id +- env: INT +- skipDeployment: "false" +CDPerseus-INT.CN-PreProd: +- name: CD_Perseus INT +- tag: Perseus +- mzId: CD_Perseus/management-zone/CDPerseus.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_Perseus/alerting-profile/default.json b/BMW-Dynatrace-config/CD_Perseus/alerting-profile/default.json new file mode 100644 index 00000000..681a4c64 --- /dev/null +++ b/BMW-Dynatrace-config/CD_Perseus/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_Perseus/calculated-metrics-service/README.md b/BMW-Dynatrace-config/CD_Perseus/calculated-metrics-service/README.md new file mode 100644 index 00000000..0bf8efbc --- /dev/null +++ b/BMW-Dynatrace-config/CD_Perseus/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_Perseus/conditional-naming-processgroup/README.md b/BMW-Dynatrace-config/CD_Perseus/conditional-naming-processgroup/README.md new file mode 100644 index 00000000..f94196a5 --- /dev/null +++ b/BMW-Dynatrace-config/CD_Perseus/conditional-naming-processgroup/README.md @@ -0,0 +1,67 @@ +### Process Group Detection Rules and Naming + +#### Detection Rule or Naming? + +For the explanation, we're using a real example of the Infotainment application: + +!(PGNaming1)[../../../../img/PGNaming1.PNG] + +Before working with your dashboards and alerting profiles, an important task to do when working with Dynatrace is checking +the structure of your applications (process groups). You can do that clicking under *technologies* and filter using your +application Management Zone. + +In the picture above, there are two Process Groups called bon-information-prod. **If you see duplicated process groups like in** +**this case, you MUST follow this guideline** + +Next step would be to open both process groups and compare the metadata. In that way, you can identify if all process instances are +part of the same application or not. An easy way to do that is asking yourself: how many instances of my application do i have? + +If you have 4 instances in total and you're able to see 2 in one PG and other 2 in other PG it means that **they are part of the ** +**same application** + +Another situation could be that checking on the metadata, then you see that are **two different application** and Dynatrace is just naming +the process group in the same way + +*Same application* +- Problem: Dynatrace is creating two different process groups, what transalates in two separated services for the same application. Instead of +seeing all the traffic in one service, you will have it splitted and it will complicate your monitoring +- Solution: create a process group detection rule. Contact Dynatrace Expert + +*Different application* +- Problem: Dynatrace is just naming in the same way applications that are different. +- Solution: This case is less severe, since it can be fixed with a process group naming rule. + + +What about our example? +!(PGNaming2)[../../../../img/PGNaming2.PNG] +!(PGNaming3)[../../../../img/PGNaming3.PNG] + +Based on the feedback of the infotaiment team, each process group is a different application (microservice) and it's visible in the kubernetes container/workload +within the metadata of each Process Group. + +#### How to create a Process Group Detection Rule +1. Open the *conditional-naming-processgroup.yaml* file and create a rule that looks like this: +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName} +- tag: Infotainment +- skipDeployment: false +``` +The result of the rule will be renaming the PG to this: +``` +bon-information-prod ipa +bon-information-prod rsl +``` + +Other possible placeholders that you can use are for example: +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName/[^\\-]*$} +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesFullPodName/buffet-(.*?)-} +{ProcessGroup:DetectedName} - {HostGroup:Name/[^\\_]*$} +{ProcessGroup:KubernetesNamespace} +{ProcessGroup:CommandLineArgs/.*?\\-f\\s\\/www\\/(.*?)\\/generated\\/httpd\\.conf.*?} + +You can combine different ones. Check the (documentation)[link] for more \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_Perseus/conditional-naming-processgroup/conditional-naming-processgroup.yaml b/BMW-Dynatrace-config/CD_Perseus/conditional-naming-processgroup/conditional-naming-processgroup.yaml new file mode 100644 index 00000000..ba27b530 --- /dev/null +++ b/BMW-Dynatrace-config/CD_Perseus/conditional-naming-processgroup/conditional-naming-processgroup.yaml @@ -0,0 +1,8 @@ +config: +- CDPerseus: template.json + +CDPerseus: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: Perseus +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_Perseus/conditional-naming-processgroup/template.json b/BMW-Dynatrace-config/CD_Perseus/conditional-naming-processgroup/template.json new file mode 100644 index 00000000..7c039808 --- /dev/null +++ b/BMW-Dynatrace-config/CD_Perseus/conditional-naming-processgroup/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "type": "PROCESS_GROUP" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_Perseus/conditional-naming-service/README.md b/BMW-Dynatrace-config/CD_Perseus/conditional-naming-service/README.md new file mode 100644 index 00000000..c34ef308 --- /dev/null +++ b/BMW-Dynatrace-config/CD_Perseus/conditional-naming-service/README.md @@ -0,0 +1,35 @@ +### Service Naming Rules + +A typical case could be that you access to *Transaction & Services* and you find two services that are exactly the same: +*DataDownloadV1* +*DataDownloadV1* + +If you drilldown into the service and you check in the process group, you may have a PROD and a E2E for each service. + +*Note: if you see that both process group are exactly the same, please contact a Dynatrace expert to create a Process* +*Group detection rule* + +In the case the PG are PROD and E2E, then we need to create a rule that looks like this: + +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {Service:DetectedName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +- tag: Infotainment +- skipDeployment: false +``` + +The rule will get the Service Detected Name (current name) and it will extract (with a regex) the part of the kubernetes namespace after the "-", so -prod or -e2e, resulting in: +*DataDownloadV1 - prod* +*DataDownloadV1 - e2e* + +Now, services will be easy to identify. + +You can create rules based on any property/metadata. Some other placeholder's eamples: +{Service:DatabaseName} - E2E +{Service:WebServiceName} - {ProcessGroup:Kubernetes:microservice} - {ProcessGroup:Kubernetes:environment} +{Service:DetectedName} - {ProcessGroup:KubernetesContainerName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +{Service:DetectedName} - {ProcessGroup:SpringBootProfileName/[^\\-]*$} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_Perseus/conditional-naming-service/conditional-naming-service.yaml b/BMW-Dynatrace-config/CD_Perseus/conditional-naming-service/conditional-naming-service.yaml new file mode 100644 index 00000000..ba27b530 --- /dev/null +++ b/BMW-Dynatrace-config/CD_Perseus/conditional-naming-service/conditional-naming-service.yaml @@ -0,0 +1,8 @@ +config: +- CDPerseus: template.json + +CDPerseus: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: Perseus +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_Perseus/conditional-naming-service/template.json b/BMW-Dynatrace-config/CD_Perseus/conditional-naming-service/template.json new file mode 100644 index 00000000..5d4fac56 --- /dev/null +++ b/BMW-Dynatrace-config/CD_Perseus/conditional-naming-service/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "type": "SERVICE" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_Perseus/custom-service-java/README.md b/BMW-Dynatrace-config/CD_Perseus/custom-service-java/README.md new file mode 100644 index 00000000..5f35e5c1 --- /dev/null +++ b/BMW-Dynatrace-config/CD_Perseus/custom-service-java/README.md @@ -0,0 +1,4 @@ + +### How to configure custom services? + +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Custom+Services) page to configure your custom services. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_Perseus/custom-service-java/custom-service-java.yaml b/BMW-Dynatrace-config/CD_Perseus/custom-service-java/custom-service-java.yaml new file mode 100644 index 00000000..25f8a028 --- /dev/null +++ b/BMW-Dynatrace-config/CD_Perseus/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_Perseus/custom-service-java/template-1-1.json b/BMW-Dynatrace-config/CD_Perseus/custom-service-java/template-1-1.json new file mode 100644 index 00000000..b3003515 --- /dev/null +++ b/BMW-Dynatrace-config/CD_Perseus/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_Perseus/dashboard/README.md b/BMW-Dynatrace-config/CD_Perseus/dashboard/README.md new file mode 100644 index 00000000..dffcdc8a --- /dev/null +++ b/BMW-Dynatrace-config/CD_Perseus/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_Perseus/dashboard/dashboard.yaml b/BMW-Dynatrace-config/CD_Perseus/dashboard/dashboard.yaml new file mode 100644 index 00000000..d1d191da --- /dev/null +++ b/BMW-Dynatrace-config/CD_Perseus/dashboard/dashboard.yaml @@ -0,0 +1,127 @@ +config: +- CDPerseus-PROD: default.json +- CDPerseus-E2E: default.json +- CDPerseus-INT: default.json +- CDPerseus-TEST: default.json + +#PROD dashboards for EMEA/NA/CN Prod +#Dry-run needed for all hubs +CDPerseus-PROD: +- name: CD_Perseus PROD +- mzName: CD_Perseus/management-zone/CDPerseus.name +- mzId: CD_Perseus/management-zone/CDPerseus.id +- env: PROD +- skipDeployment: "true" +#Configuration +CDPerseus-PROD.EMEA-Prod: +- name: CD_Perseus PROD +- mzName: CD_Perseus/management-zone/CDPerseus.name +- mzId: CD_Perseus/management-zone/CDPerseus.id +- tag: Perseus +- env: PROD +- skipDeployment: "false" +CDPerseus-PROD.NA-Prod: +- name: CD_Perseus PROD +- mzName: CD_Perseus/management-zone/CDPerseus.name +- mzId: CD_Perseus/management-zone/CDPerseus.id +- tag: Perseus +- env: PROD +- skipDeployment: "false" +CDPerseus-PROD.CN-Prod: +- name: CD_Perseus PROD +- mzName: CD_Perseus/management-zone/CDPerseus.name +- mzId: CD_Perseus/management-zone/CDPerseus.id +- tag: Perseus +- env: PROD +- skipDeployment: "false" + +#E2E dashboards for EMEA/NA/CN E2E +#Dry-run needed for all hubs +CDPerseus-E2E: +- name: CD_Perseus E2E +- mzName: CD_Perseus/management-zone/CDPerseus.name +- mzId: CD_Perseus/management-zone/CDPerseus.id +- env: E2E +- skipDeployment: "true" +#Configuration +CDPerseus-E2E.EMEA-Prod: +- name: CD_Perseus E2E +- mzName: CD_Perseus/management-zone/CDPerseus.name +- mzId: CD_Perseus/management-zone/CDPerseus.id +- env: E2E +- tag: Perseus +- skipDeployment: "true" +CDPerseus-E2E.NA-Prod: +- name: CD_Perseus E2E +- mzName: CD_Perseus/management-zone/CDPerseus.name +- mzId: CD_Perseus/management-zone/CDPerseus.id +- env: E2E +- tag: Perseus +- skipDeployment: "true" +CDPerseus-E2E.CN-Prod: +- name: CD_Perseus E2E +- mzName: CD_Perseus/management-zone/CDPerseus.name +- mzId: CD_Perseus/management-zone/CDPerseus.id +- env: E2E +- tag: Perseus +- skipDeployment: "true" + +#INT dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDPerseus-INT: +- name: CD_Perseus INT +- mzName: CD_Perseus/management-zone/CDPerseus.name +- mzId: CD_Perseus/management-zone/CDPerseus.id +- env: INT +- tag: Perseus +- skipDeployment: "true" +#Configuration +CDPerseus-INT.EMEA-PreProd: +- name: CD_Perseus INT +- mzName: CD_Perseus/management-zone/CDPerseus.name +- mzId: CD_Perseus/management-zone/CDPerseus.id +- env: INT +- tag: Perseus +- skipDeployment: "false" +CDPerseus-INT.NA-PreProd: +- name: CD_Perseus INT +- mzName: CD_Perseus/management-zone/CDPerseus.name +- mzId: CD_Perseus/management-zone/CDPerseus.id +- env: INT +- skipDeployment: "false" +CDPerseus-INT.CN-PreProd: +- name: CD_Perseus INT +- mzName: CD_Perseus/management-zone/CDPerseus.name +- mzId: CD_Perseus/management-zone/CDPerseus.id +- env: INT +- skipDeployment: "false" + +#TEST dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDPerseus-TEST: +- name: CD_Perseus TEST +- mzName: CD_Perseus/management-zone/CDPerseus.name +- mzId: CD_Perseus/management-zone/CDPerseus.id +- tag: Perseus +- env: TEST +- skipDeployment: "true" +#Configuration +CDPerseus-TEST.EMEA-PreProd: +- name: CD_Perseus TEST +- mzName: CD_Perseus/management-zone/CDPerseus.name +- mzId: CD_Perseus/management-zone/CDPerseus.id +- tag: Perseus +- env: TEST +- skipDeployment: "false" +CDPerseus-TEST.NA-PreProd: +- name: CD_Perseus TEST +- mzName: CD_Perseus/management-zone/CDPerseus.name +- mzId: CD_Perseus/management-zone/CDPerseus.id +- env: TEST +- skipDeployment: "false" +CDPerseus-TEST.CN-PreProd: +- name: CD_Perseus TEST +- mzName: CD_Perseus/management-zone/CDPerseus.name +- mzId: CD_Perseus/management-zone/CDPerseus.id +- env: TEST +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_Perseus/dashboard/default.json b/BMW-Dynatrace-config/CD_Perseus/dashboard/default.json new file mode 100644 index 00000000..6c685810 --- /dev/null +++ b/BMW-Dynatrace-config/CD_Perseus/dashboard/default.json @@ -0,0 +1,308 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.214.107.20210407-223952" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": true, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "timeframe": "-24h to now" + }, + "tags": [ + "{{.tag}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 228, + "left": 38, + "width": 1064, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Failure rate (HTTP 4xx/5xx errors)", + "defaultName": "Custom chart", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [ + { + "metric": "builtin:service.errors.fourxx.rate", + "aggregation": "AVG", + "type": "BAR", + "entityType": "SERVICE", + "dimensions": [], + "sortAscending": false, + "sortColumn": false, + "aggregationRate": "TOTAL" + }, + { + "metric": "builtin:service.errors.fivexx.rate", + "aggregation": "AVG", + "type": "BAR", + "entityType": "SERVICE", + "dimensions": [], + "sortAscending": false, + "sortColumn": true, + "aggregationRate": "TOTAL" + } + ], + "resultMetadata": { + "nullbuiltin:service.errors.fivexx.rate|AVG|TOTAL|BAR|SERVICE": { + "lastModified": 1617956393463, + "customColor": "#ff0000" + }, + "nullbuiltin:service.errors.fourxx.rate|AVG|TOTAL|BAR|SERVICE": { + "lastModified": 1617956441725, + "customColor": "#fff29a" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:{{.env}}", + "Component:{{.tag}}" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 38, + "left": 950, + "width": 152, + "height": 152 + }, + "tileFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + } + }, + { + "name": "Overall Health", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 0, + "left": 38, + "width": 1064, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 532, + "left": 38, + "width": 1064, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 570, + "left": 38, + "width": 1064, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Request Count and Number of Errors", + "defaultName": "Custom chart", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [ + { + "metric": "builtin:service.response.time", + "aggregation": "AVG", + "type": "LINE", + "entityType": "SERVICE", + "dimensions": [], + "sortAscending": false, + "sortColumn": false, + "aggregationRate": "TOTAL" + }, + { + "metric": "builtin:service.requestCount.total", + "aggregation": "NONE", + "type": "BAR", + "entityType": "SERVICE", + "dimensions": [], + "sortAscending": false, + "sortColumn": false, + "aggregationRate": "TOTAL" + }, + { + "metric": "builtin:service.errors.total.count", + "aggregation": "NONE", + "type": "BAR", + "entityType": "SERVICE", + "dimensions": [], + "sortAscending": false, + "sortColumn": true, + "aggregationRate": "TOTAL" + } + ], + "resultMetadata": { + "nullbuiltin:service.requestCount.total|NONE|TOTAL|BAR|SERVICE": { + "lastModified": 1595275720776, + "customColor": "#008cdb" + }, + "nullbuiltin:service.errors.total.count|NONE|TOTAL|BAR|SERVICE": { + "lastModified": 1595275955999, + "customColor": "#ef651f" + }, + "nullbuiltin:service.response.time|AVG|TOTAL|LINE|SERVICE": { + "lastModified": 1595275686773, + "customColor": "#b4e5f9" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:{{.env}}", + "Component:{{.tag}}" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 190, + "left": 38, + "width": 1064, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 38, + "left": 646, + "width": 190, + "height": 152 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:{{.env}}", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 38, + "left": 342, + "width": 190, + "height": 152 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:{{.env}}", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 190, + "height": 152 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:{{.env}}", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_Perseus/management-zone/README.md b/BMW-Dynatrace-config/CD_Perseus/management-zone/README.md new file mode 100644 index 00000000..3244b3e6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_Perseus/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_Perseus/management-zone/default.json b/BMW-Dynatrace-config/CD_Perseus/management-zone/default.json new file mode 100644 index 00000000..bffa0c3b --- /dev/null +++ b/BMW-Dynatrace-config/CD_Perseus/management-zone/default.json @@ -0,0 +1,114 @@ +{ + "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" + }, + { + "conditions": [ + { + "comparisonInfo": { + "caseSensitive": true, + "negate": false, + "operator": "CONTAINS", + "type": "STRING", + "value": "{{.tag}}" + }, + "key": { + "attribute": "CLOUD_APPLICATION_NAMESPACE_NAME" + } + } + ], + "enabled": true, + "propagationTypes": [], + "type": "CLOUD_APPLICATION_NAMESPACE" + }, + { + "conditions": [ + { + "comparisonInfo": { + "caseSensitive": true, + "negate": false, + "operator": "CONTAINS", + "type": "STRING", + "value": "{{.tag}}" + }, + "key": { + "attribute": "CLOUD_APPLICATION_NAME" + } + } + ], + "enabled": true, + "propagationTypes": [], + "type": "CLOUD_APPLICATION" + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_Perseus/management-zone/management-zone.yaml b/BMW-Dynatrace-config/CD_Perseus/management-zone/management-zone.yaml index 82e4fd5f..3cc97723 100644 --- a/BMW-Dynatrace-config/CD_Perseus/management-zone/management-zone.yaml +++ b/BMW-Dynatrace-config/CD_Perseus/management-zone/management-zone.yaml @@ -1,5 +1,6 @@ +config: +- CDPerseus: default.json + CDPerseus: - name: CD_Perseus - tag: Perseus -config: -- CDPerseus: CDPerseus.json diff --git a/BMW-Dynatrace-config/CD_Perseus/notification/README.md b/BMW-Dynatrace-config/CD_Perseus/notification/README.md new file mode 100644 index 00000000..e1a6af84 --- /dev/null +++ b/BMW-Dynatrace-config/CD_Perseus/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_Perseus/notification/email.json b/BMW-Dynatrace-config/CD_Perseus/notification/email.json new file mode 100644 index 00000000..486642a7 --- /dev/null +++ b/BMW-Dynatrace-config/CD_Perseus/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_Perseus/notification/msTeams.json b/BMW-Dynatrace-config/CD_Perseus/notification/msTeams.json new file mode 100644 index 00000000..33e92cf6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_Perseus/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_Perseus/notification/notification.yaml b/BMW-Dynatrace-config/CD_Perseus/notification/notification.yaml index 85fc29c4..de70d54d 100644 --- a/BMW-Dynatrace-config/CD_Perseus/notification/notification.yaml +++ b/BMW-Dynatrace-config/CD_Perseus/notification/notification.yaml @@ -1,13 +1,51 @@ config: -- Perseus-email-Prod: CDPerseus-Email.json -- Perseus-email-E2E: CDPerseus-Email.json +- CDPerseus-PROD: msTeams.json +- CDPerseus-INT: msTeams.json -Perseus-email-Prod: -- name: CD_Perseus - Email - Prod -- receivers: cc-cub-perseus-dynatrace-incidents-prod@list.bmw.com -- alertingProfile: "/CD_Perseus/alerting-profile/CDPerseus-PROD.id" +#Prod notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDPerseus-PROD: +- name: CD_Perseus PROD +- alertingProfile: CD_Perseus/alerting-profile/CDPerseus-PROD.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDPerseus-PROD.EMEA-Prod: +- name: CD_Perseus PROD +- alertingProfile: CD_Perseus/alerting-profile/CDPerseus-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDPerseus-PROD.NA-Prod: +- name: CD_Perseus PROD +- alertingProfile: CD_Perseus/alerting-profile/CDPerseus-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDPerseus-PROD.CN-Prod: +- name: CD_Perseus PROD +- alertingProfile: CD_Perseus/alerting-profile/CDPerseus-PROD.id +- webhook: https://empty +- skipDeployment: "false" -Perseus-email-E2E: -- name: CD_Perseus - Email - E2E -- receivers: cc-cub-perseus-dynatrace-incidents-e2e@list.bmw.com -- alertingProfile: "/CD_Perseus/alerting-profile/CDPerseus-E2E.id" \ No newline at end of file +#INT notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDPerseus-INT: +- name: CD_Perseus INT +- alertingProfile: CD_Perseus/alerting-profile/CDPerseus-INT.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDPerseus-INT.EMEA-PreProd: +- name: CD_Perseus INT +- alertingProfile: CD_Perseus/alerting-profile/CDPerseus-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDPerseus-INT.NA-PreProd: +- name: CD_Perseus INT +- alertingProfile: CD_Perseus/alerting-profile/CDPerseus-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDPerseus-INT.CN-PreProd: +- name: CD_Perseus INT +- alertingProfile: CD_Perseus/alerting-profile/CDPerseus-INT.id +- webhook: https://empty +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_Perseus/synthetic-monitor/README.md b/BMW-Dynatrace-config/CD_Perseus/synthetic-monitor/README.md new file mode 100644 index 00000000..1695924c --- /dev/null +++ b/BMW-Dynatrace-config/CD_Perseus/synthetic-monitor/README.md @@ -0,0 +1,4 @@ + +### How to configure synthetics? + +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Synthetic+Monitors) page to configure your synthetics. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_Perseus/synthetic-monitor/default.json b/BMW-Dynatrace-config/CD_Perseus/synthetic-monitor/default.json new file mode 100644 index 00000000..cf83039b --- /dev/null +++ b/BMW-Dynatrace-config/CD_Perseus/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_Perseus/synthetic-monitor/synthetic-monitor.yaml b/BMW-Dynatrace-config/CD_Perseus/synthetic-monitor/synthetic-monitor.yaml new file mode 100644 index 00000000..4791c2e2 --- /dev/null +++ b/BMW-Dynatrace-config/CD_Perseus/synthetic-monitor/synthetic-monitor.yaml @@ -0,0 +1,10 @@ +config: +- Perseus: default.json + +Perseus: +- name: CD_Perseus - +- mzName: CD_Perseus/management-zone/CDPerseus.name +- mzId: CD_Perseus/management-zone/CDPerseus.id +- endpoint: +- location: +- skipDeployment: "true" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_RemoteServices/alerting-profile/alerting-profile.yaml b/BMW-Dynatrace-config/CD_RemoteServices/alerting-profile/alerting-profile.yaml new file mode 100644 index 00000000..ac96dc7a --- /dev/null +++ b/BMW-Dynatrace-config/CD_RemoteServices/alerting-profile/alerting-profile.yaml @@ -0,0 +1,60 @@ +config: +- CDRemoteServices-PROD: default.json +- CDRemoteServices-INT: default.json + +#Prod alerting profiles for EMEA/NA/CN +#Dry-run needed for all hubs +CDRemoteServices-PROD: +- name: CD_RemoteServices PROD +- tag: RemoteServices +- mzId: CD_RemoteServices/management-zone/CDRemoteServices.id +- env: PROD +- skipDeployment: "true" +#Configuration +CDRemoteServices-PROD.EMEA-Prod: +- name: CD_RemoteServices PROD +- tag: RemoteServices +- mzId: CD_RemoteServices/management-zone/CDRemoteServices.id +- env: PROD +- skipDeployment: "false" +CDRemoteServices-PROD.NA-Prod: +- name: CD_RemoteServices PROD +- tag: RemoteServices +- mzId: CD_RemoteServices/management-zone/CDRemoteServices.id +- env: PROD +- skipDeployment: "false" +CDRemoteServices-PROD.CN-Prod: +- name: CD_RemoteServices PROD +- tag: RemoteServices +- mzId: CD_RemoteServices/management-zone/CDRemoteServices.id +- env: PROD +- skipDeployment: "false" + + +#INT alerting profiles for EMEA/NA/CN +#Dry-run needed for all hubs +CDRemoteServices-INT: +- name: CD_RemoteServices INT +- tag: RemoteServices +- mzId: CD_RemoteServices/management-zone/CDRemoteServices.id +- env: INT +- skipDeployment: "true" +#Configuration +CDRemoteServices-INT.EMEA-PreProd: +- name: CD_RemoteServices INT +- tag: RemoteServices +- mzId: CD_RemoteServices/management-zone/CDRemoteServices.id +- env: INT +- skipDeployment: "false" +CDRemoteServices-INT.NA-PreProd: +- name: CD_RemoteServices INT +- tag: RemoteServices +- mzId: CD_RemoteServices/management-zone/CDRemoteServices.id +- env: INT +- skipDeployment: "false" +CDRemoteServices-INT.CN-PreProd: +- name: CD_RemoteServices INT +- tag: RemoteServices +- mzId: CD_RemoteServices/management-zone/CDRemoteServices.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_RemoteServices/alerting-profile/default.json b/BMW-Dynatrace-config/CD_RemoteServices/alerting-profile/default.json new file mode 100644 index 00000000..681a4c64 --- /dev/null +++ b/BMW-Dynatrace-config/CD_RemoteServices/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_RemoteServices/calculated-metrics-service/README.md b/BMW-Dynatrace-config/CD_RemoteServices/calculated-metrics-service/README.md new file mode 100644 index 00000000..0bf8efbc --- /dev/null +++ b/BMW-Dynatrace-config/CD_RemoteServices/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_RemoteServices/conditional-naming-processgroup/README.md b/BMW-Dynatrace-config/CD_RemoteServices/conditional-naming-processgroup/README.md new file mode 100644 index 00000000..f94196a5 --- /dev/null +++ b/BMW-Dynatrace-config/CD_RemoteServices/conditional-naming-processgroup/README.md @@ -0,0 +1,67 @@ +### Process Group Detection Rules and Naming + +#### Detection Rule or Naming? + +For the explanation, we're using a real example of the Infotainment application: + +!(PGNaming1)[../../../../img/PGNaming1.PNG] + +Before working with your dashboards and alerting profiles, an important task to do when working with Dynatrace is checking +the structure of your applications (process groups). You can do that clicking under *technologies* and filter using your +application Management Zone. + +In the picture above, there are two Process Groups called bon-information-prod. **If you see duplicated process groups like in** +**this case, you MUST follow this guideline** + +Next step would be to open both process groups and compare the metadata. In that way, you can identify if all process instances are +part of the same application or not. An easy way to do that is asking yourself: how many instances of my application do i have? + +If you have 4 instances in total and you're able to see 2 in one PG and other 2 in other PG it means that **they are part of the ** +**same application** + +Another situation could be that checking on the metadata, then you see that are **two different application** and Dynatrace is just naming +the process group in the same way + +*Same application* +- Problem: Dynatrace is creating two different process groups, what transalates in two separated services for the same application. Instead of +seeing all the traffic in one service, you will have it splitted and it will complicate your monitoring +- Solution: create a process group detection rule. Contact Dynatrace Expert + +*Different application* +- Problem: Dynatrace is just naming in the same way applications that are different. +- Solution: This case is less severe, since it can be fixed with a process group naming rule. + + +What about our example? +!(PGNaming2)[../../../../img/PGNaming2.PNG] +!(PGNaming3)[../../../../img/PGNaming3.PNG] + +Based on the feedback of the infotaiment team, each process group is a different application (microservice) and it's visible in the kubernetes container/workload +within the metadata of each Process Group. + +#### How to create a Process Group Detection Rule +1. Open the *conditional-naming-processgroup.yaml* file and create a rule that looks like this: +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName} +- tag: Infotainment +- skipDeployment: false +``` +The result of the rule will be renaming the PG to this: +``` +bon-information-prod ipa +bon-information-prod rsl +``` + +Other possible placeholders that you can use are for example: +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName/[^\\-]*$} +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesFullPodName/buffet-(.*?)-} +{ProcessGroup:DetectedName} - {HostGroup:Name/[^\\_]*$} +{ProcessGroup:KubernetesNamespace} +{ProcessGroup:CommandLineArgs/.*?\\-f\\s\\/www\\/(.*?)\\/generated\\/httpd\\.conf.*?} + +You can combine different ones. Check the (documentation)[link] for more \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_RemoteServices/conditional-naming-processgroup/conditional-naming-processgroup.yaml b/BMW-Dynatrace-config/CD_RemoteServices/conditional-naming-processgroup/conditional-naming-processgroup.yaml new file mode 100644 index 00000000..2ab5eee8 --- /dev/null +++ b/BMW-Dynatrace-config/CD_RemoteServices/conditional-naming-processgroup/conditional-naming-processgroup.yaml @@ -0,0 +1,8 @@ +config: +- CDRemoteServices: template.json + +CDRemoteServices: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: RemoteServices +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_RemoteServices/conditional-naming-processgroup/template.json b/BMW-Dynatrace-config/CD_RemoteServices/conditional-naming-processgroup/template.json new file mode 100644 index 00000000..7c039808 --- /dev/null +++ b/BMW-Dynatrace-config/CD_RemoteServices/conditional-naming-processgroup/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "type": "PROCESS_GROUP" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_RemoteServices/conditional-naming-service/README.md b/BMW-Dynatrace-config/CD_RemoteServices/conditional-naming-service/README.md new file mode 100644 index 00000000..c34ef308 --- /dev/null +++ b/BMW-Dynatrace-config/CD_RemoteServices/conditional-naming-service/README.md @@ -0,0 +1,35 @@ +### Service Naming Rules + +A typical case could be that you access to *Transaction & Services* and you find two services that are exactly the same: +*DataDownloadV1* +*DataDownloadV1* + +If you drilldown into the service and you check in the process group, you may have a PROD and a E2E for each service. + +*Note: if you see that both process group are exactly the same, please contact a Dynatrace expert to create a Process* +*Group detection rule* + +In the case the PG are PROD and E2E, then we need to create a rule that looks like this: + +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {Service:DetectedName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +- tag: Infotainment +- skipDeployment: false +``` + +The rule will get the Service Detected Name (current name) and it will extract (with a regex) the part of the kubernetes namespace after the "-", so -prod or -e2e, resulting in: +*DataDownloadV1 - prod* +*DataDownloadV1 - e2e* + +Now, services will be easy to identify. + +You can create rules based on any property/metadata. Some other placeholder's eamples: +{Service:DatabaseName} - E2E +{Service:WebServiceName} - {ProcessGroup:Kubernetes:microservice} - {ProcessGroup:Kubernetes:environment} +{Service:DetectedName} - {ProcessGroup:KubernetesContainerName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +{Service:DetectedName} - {ProcessGroup:SpringBootProfileName/[^\\-]*$} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_RemoteServices/conditional-naming-service/conditional-naming-service.yaml b/BMW-Dynatrace-config/CD_RemoteServices/conditional-naming-service/conditional-naming-service.yaml new file mode 100644 index 00000000..2ab5eee8 --- /dev/null +++ b/BMW-Dynatrace-config/CD_RemoteServices/conditional-naming-service/conditional-naming-service.yaml @@ -0,0 +1,8 @@ +config: +- CDRemoteServices: template.json + +CDRemoteServices: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: RemoteServices +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_RemoteServices/conditional-naming-service/template.json b/BMW-Dynatrace-config/CD_RemoteServices/conditional-naming-service/template.json new file mode 100644 index 00000000..5d4fac56 --- /dev/null +++ b/BMW-Dynatrace-config/CD_RemoteServices/conditional-naming-service/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "type": "SERVICE" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_RemoteServices/custom-service-java/README.md b/BMW-Dynatrace-config/CD_RemoteServices/custom-service-java/README.md new file mode 100644 index 00000000..5f35e5c1 --- /dev/null +++ b/BMW-Dynatrace-config/CD_RemoteServices/custom-service-java/README.md @@ -0,0 +1,4 @@ + +### How to configure custom services? + +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Custom+Services) page to configure your custom services. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_RemoteServices/custom-service-java/custom-service-java.yaml b/BMW-Dynatrace-config/CD_RemoteServices/custom-service-java/custom-service-java.yaml new file mode 100644 index 00000000..25f8a028 --- /dev/null +++ b/BMW-Dynatrace-config/CD_RemoteServices/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_RemoteServices/custom-service-java/template-1-1.json b/BMW-Dynatrace-config/CD_RemoteServices/custom-service-java/template-1-1.json new file mode 100644 index 00000000..b3003515 --- /dev/null +++ b/BMW-Dynatrace-config/CD_RemoteServices/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_RemoteServices/dashboard/README.md b/BMW-Dynatrace-config/CD_RemoteServices/dashboard/README.md new file mode 100644 index 00000000..dffcdc8a --- /dev/null +++ b/BMW-Dynatrace-config/CD_RemoteServices/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_RemoteServices/dashboard/dashboard.yaml b/BMW-Dynatrace-config/CD_RemoteServices/dashboard/dashboard.yaml new file mode 100644 index 00000000..5506e1a6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_RemoteServices/dashboard/dashboard.yaml @@ -0,0 +1,127 @@ +config: +- CDRemoteServices-PROD: default.json +- CDRemoteServices-E2E: default.json +- CDRemoteServices-INT: default.json +- CDRemoteServices-TEST: default.json + +#PROD dashboards for EMEA/NA/CN Prod +#Dry-run needed for all hubs +CDRemoteServices-PROD: +- name: CD_RemoteServices PROD +- mzName: CD_RemoteServices/management-zone/CDRemoteServices.name +- mzId: CD_RemoteServices/management-zone/CDRemoteServices.id +- env: PROD +- skipDeployment: "true" +#Configuration +CDRemoteServices-PROD.EMEA-Prod: +- name: CD_RemoteServices PROD +- mzName: CD_RemoteServices/management-zone/CDRemoteServices.name +- mzId: CD_RemoteServices/management-zone/CDRemoteServices.id +- tag: RemoteServices +- env: PROD +- skipDeployment: "false" +CDRemoteServices-PROD.NA-Prod: +- name: CD_RemoteServices PROD +- mzName: CD_RemoteServices/management-zone/CDRemoteServices.name +- mzId: CD_RemoteServices/management-zone/CDRemoteServices.id +- tag: RemoteServices +- env: PROD +- skipDeployment: "false" +CDRemoteServices-PROD.CN-Prod: +- name: CD_RemoteServices PROD +- mzName: CD_RemoteServices/management-zone/CDRemoteServices.name +- mzId: CD_RemoteServices/management-zone/CDRemoteServices.id +- tag: RemoteServices +- env: PROD +- skipDeployment: "false" + +#E2E dashboards for EMEA/NA/CN E2E +#Dry-run needed for all hubs +CDRemoteServices-E2E: +- name: CD_RemoteServices E2E +- mzName: CD_RemoteServices/management-zone/CDRemoteServices.name +- mzId: CD_RemoteServices/management-zone/CDRemoteServices.id +- env: E2E +- skipDeployment: "true" +#Configuration +CDRemoteServices-E2E.EMEA-Prod: +- name: CD_RemoteServices E2E +- mzName: CD_RemoteServices/management-zone/CDRemoteServices.name +- mzId: CD_RemoteServices/management-zone/CDRemoteServices.id +- env: E2E +- tag: RemoteServices +- skipDeployment: "true" +CDRemoteServices-E2E.NA-Prod: +- name: CD_RemoteServices E2E +- mzName: CD_RemoteServices/management-zone/CDRemoteServices.name +- mzId: CD_RemoteServices/management-zone/CDRemoteServices.id +- env: E2E +- tag: RemoteServices +- skipDeployment: "true" +CDRemoteServices-E2E.CN-Prod: +- name: CD_RemoteServices E2E +- mzName: CD_RemoteServices/management-zone/CDRemoteServices.name +- mzId: CD_RemoteServices/management-zone/CDRemoteServices.id +- env: E2E +- tag: RemoteServices +- skipDeployment: "true" + +#INT dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDRemoteServices-INT: +- name: CD_RemoteServices INT +- mzName: CD_RemoteServices/management-zone/CDRemoteServices.name +- mzId: CD_RemoteServices/management-zone/CDRemoteServices.id +- env: INT +- tag: RemoteServices +- skipDeployment: "true" +#Configuration +CDRemoteServices-INT.EMEA-PreProd: +- name: CD_RemoteServices INT +- mzName: CD_RemoteServices/management-zone/CDRemoteServices.name +- mzId: CD_RemoteServices/management-zone/CDRemoteServices.id +- env: INT +- tag: RemoteServices +- skipDeployment: "false" +CDRemoteServices-INT.NA-PreProd: +- name: CD_RemoteServices INT +- mzName: CD_RemoteServices/management-zone/CDRemoteServices.name +- mzId: CD_RemoteServices/management-zone/CDRemoteServices.id +- env: INT +- skipDeployment: "false" +CDRemoteServices-INT.CN-PreProd: +- name: CD_RemoteServices INT +- mzName: CD_RemoteServices/management-zone/CDRemoteServices.name +- mzId: CD_RemoteServices/management-zone/CDRemoteServices.id +- env: INT +- skipDeployment: "false" + +#TEST dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDRemoteServices-TEST: +- name: CD_RemoteServices TEST +- mzName: CD_RemoteServices/management-zone/CDRemoteServices.name +- mzId: CD_RemoteServices/management-zone/CDRemoteServices.id +- tag: RemoteServices +- env: TEST +- skipDeployment: "true" +#Configuration +CDRemoteServices-TEST.EMEA-PreProd: +- name: CD_RemoteServices TEST +- mzName: CD_RemoteServices/management-zone/CDRemoteServices.name +- mzId: CD_RemoteServices/management-zone/CDRemoteServices.id +- tag: RemoteServices +- env: TEST +- skipDeployment: "false" +CDRemoteServices-TEST.NA-PreProd: +- name: CD_RemoteServices TEST +- mzName: CD_RemoteServices/management-zone/CDRemoteServices.name +- mzId: CD_RemoteServices/management-zone/CDRemoteServices.id +- env: TEST +- skipDeployment: "false" +CDRemoteServices-TEST.CN-PreProd: +- name: CD_RemoteServices TEST +- mzName: CD_RemoteServices/management-zone/CDRemoteServices.name +- mzId: CD_RemoteServices/management-zone/CDRemoteServices.id +- env: TEST +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_RemoteServices/dashboard/default.json b/BMW-Dynatrace-config/CD_RemoteServices/dashboard/default.json new file mode 100644 index 00000000..6c685810 --- /dev/null +++ b/BMW-Dynatrace-config/CD_RemoteServices/dashboard/default.json @@ -0,0 +1,308 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.214.107.20210407-223952" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": true, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "timeframe": "-24h to now" + }, + "tags": [ + "{{.tag}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 228, + "left": 38, + "width": 1064, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Failure rate (HTTP 4xx/5xx errors)", + "defaultName": "Custom chart", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [ + { + "metric": "builtin:service.errors.fourxx.rate", + "aggregation": "AVG", + "type": "BAR", + "entityType": "SERVICE", + "dimensions": [], + "sortAscending": false, + "sortColumn": false, + "aggregationRate": "TOTAL" + }, + { + "metric": "builtin:service.errors.fivexx.rate", + "aggregation": "AVG", + "type": "BAR", + "entityType": "SERVICE", + "dimensions": [], + "sortAscending": false, + "sortColumn": true, + "aggregationRate": "TOTAL" + } + ], + "resultMetadata": { + "nullbuiltin:service.errors.fivexx.rate|AVG|TOTAL|BAR|SERVICE": { + "lastModified": 1617956393463, + "customColor": "#ff0000" + }, + "nullbuiltin:service.errors.fourxx.rate|AVG|TOTAL|BAR|SERVICE": { + "lastModified": 1617956441725, + "customColor": "#fff29a" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:{{.env}}", + "Component:{{.tag}}" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 38, + "left": 950, + "width": 152, + "height": 152 + }, + "tileFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + } + }, + { + "name": "Overall Health", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 0, + "left": 38, + "width": 1064, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 532, + "left": 38, + "width": 1064, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 570, + "left": 38, + "width": 1064, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Request Count and Number of Errors", + "defaultName": "Custom chart", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [ + { + "metric": "builtin:service.response.time", + "aggregation": "AVG", + "type": "LINE", + "entityType": "SERVICE", + "dimensions": [], + "sortAscending": false, + "sortColumn": false, + "aggregationRate": "TOTAL" + }, + { + "metric": "builtin:service.requestCount.total", + "aggregation": "NONE", + "type": "BAR", + "entityType": "SERVICE", + "dimensions": [], + "sortAscending": false, + "sortColumn": false, + "aggregationRate": "TOTAL" + }, + { + "metric": "builtin:service.errors.total.count", + "aggregation": "NONE", + "type": "BAR", + "entityType": "SERVICE", + "dimensions": [], + "sortAscending": false, + "sortColumn": true, + "aggregationRate": "TOTAL" + } + ], + "resultMetadata": { + "nullbuiltin:service.requestCount.total|NONE|TOTAL|BAR|SERVICE": { + "lastModified": 1595275720776, + "customColor": "#008cdb" + }, + "nullbuiltin:service.errors.total.count|NONE|TOTAL|BAR|SERVICE": { + "lastModified": 1595275955999, + "customColor": "#ef651f" + }, + "nullbuiltin:service.response.time|AVG|TOTAL|LINE|SERVICE": { + "lastModified": 1595275686773, + "customColor": "#b4e5f9" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:{{.env}}", + "Component:{{.tag}}" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 190, + "left": 38, + "width": 1064, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 38, + "left": 646, + "width": 190, + "height": 152 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:{{.env}}", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 38, + "left": 342, + "width": 190, + "height": 152 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:{{.env}}", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 190, + "height": 152 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:{{.env}}", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_RemoteServices/management-zone/CDRemoteServices.json b/BMW-Dynatrace-config/CD_RemoteServices/management-zone/CDRemoteServices.json deleted file mode 100644 index 21fd63f1..00000000 --- a/BMW-Dynatrace-config/CD_RemoteServices/management-zone/CDRemoteServices.json +++ /dev/null @@ -1,267 +0,0 @@ -{ - "metadata": { - "configurationVersions": [ - 0 - ], - "clusterVersion": "1.210.97.20210210-140317" - }, - "name": "{{.name}}", - "rules": [ - { - "type": "SERVICE", - "enabled": true, - "propagationTypes": [ - "SERVICE_TO_HOST_LIKE", - "SERVICE_TO_PROCESS_GROUP_LIKE" - ], - "conditions": [ - { - "key": { - "attribute": "SERVICE_TAGS" - }, - "comparisonInfo": { - "type": "TAG", - "operator": "EQUALS", - "value": { - "context": "CONTEXTLESS", - "key": "Component", - "value": "Remote 360" - }, - "negate": false - } - }, - { - "key": { - "attribute": "SERVICE_NAME" - }, - "comparisonInfo": { - "type": "STRING", - "operator": "CONTAINS", - "value": "HealthResource", - "negate": true, - "caseSensitive": true - } - }, - { - "key": { - "attribute": "SERVICE_NAME" - }, - "comparisonInfo": { - "type": "STRING", - "operator": "CONTAINS", - "value": "PingResource", - "negate": true, - "caseSensitive": true - } - }, - { - "key": { - "attribute": "SERVICE_NAME" - }, - "comparisonInfo": { - "type": "STRING", - "operator": "CONTAINS", - "value": "PrometheusResource", - "negate": true, - "caseSensitive": true - } - } - ] - }, - { - "type": "SERVICE", - "enabled": true, - "propagationTypes": [ - "SERVICE_TO_HOST_LIKE", - "SERVICE_TO_PROCESS_GROUP_LIKE" - ], - "conditions": [ - { - "key": { - "attribute": "SERVICE_TAGS" - }, - "comparisonInfo": { - "type": "TAG", - "operator": "EQUALS", - "value": { - "context": "CONTEXTLESS", - "key": "Component", - "value": "RemoteServices" - }, - "negate": false - } - }, - { - "key": { - "attribute": "SERVICE_NAME" - }, - "comparisonInfo": { - "type": "STRING", - "operator": "CONTAINS", - "value": "HealthResource", - "negate": true, - "caseSensitive": true - } - }, - { - "key": { - "attribute": "SERVICE_NAME" - }, - "comparisonInfo": { - "type": "STRING", - "operator": "CONTAINS", - "value": "PingResource", - "negate": true, - "caseSensitive": true - } - }, - { - "key": { - "attribute": "SERVICE_NAME" - }, - "comparisonInfo": { - "type": "STRING", - "operator": "CONTAINS", - "value": "PrometheusResource", - "negate": true, - "caseSensitive": true - } - } - ] - }, - { - "type": "SERVICE", - "enabled": true, - "propagationTypes": [ - "SERVICE_TO_HOST_LIKE", - "SERVICE_TO_PROCESS_GROUP_LIKE" - ], - "conditions": [ - { - "key": { - "attribute": "SERVICE_TAGS" - }, - "comparisonInfo": { - "type": "TAG", - "operator": "EQUALS", - "value": { - "context": "CONTEXTLESS", - "key": "Component", - "value": "RS Cockpit" - }, - "negate": false - } - }, - { - "key": { - "attribute": "SERVICE_NAME" - }, - "comparisonInfo": { - "type": "STRING", - "operator": "CONTAINS", - "value": "HealthResource", - "negate": true, - "caseSensitive": true - } - }, - { - "key": { - "attribute": "SERVICE_NAME" - }, - "comparisonInfo": { - "type": "STRING", - "operator": "CONTAINS", - "value": "PingResource", - "negate": true, - "caseSensitive": true - } - }, - { - "key": { - "attribute": "SERVICE_NAME" - }, - "comparisonInfo": { - "type": "STRING", - "operator": "CONTAINS", - "value": "PrometheusResource", - "negate": true, - "caseSensitive": true - } - } - ] - }, - { - "type": "PROCESS_GROUP", - "enabled": true, - "propagationTypes": [ - "PROCESS_GROUP_TO_HOST" - ], - "conditions": [ - { - "key": { - "attribute": "PROCESS_GROUP_TAGS" - }, - "comparisonInfo": { - "type": "TAG", - "operator": "EQUALS", - "value": { - "context": "CONTEXTLESS", - "key": "Component", - "value": "Remote 360" - }, - "negate": false - } - } - ] - }, - { - "type": "PROCESS_GROUP", - "enabled": true, - "propagationTypes": [ - "PROCESS_GROUP_TO_HOST" - ], - "conditions": [ - { - "key": { - "attribute": "PROCESS_GROUP_TAGS" - }, - "comparisonInfo": { - "type": "TAG", - "operator": "EQUALS", - "value": { - "context": "CONTEXTLESS", - "key": "Component", - "value": "RemoteServices" - }, - "negate": false - } - } - ] - }, - { - "type": "PROCESS_GROUP", - "enabled": true, - "propagationTypes": [ - "PROCESS_GROUP_TO_HOST" - ], - "conditions": [ - { - "key": { - "attribute": "PROCESS_GROUP_TAGS" - }, - "comparisonInfo": { - "type": "TAG", - "operator": "EQUALS", - "value": { - "context": "CONTEXTLESS", - "key": "Component", - "value": "RS Cockpit" - }, - "negate": false - } - } - ] - } - ], - "dimensionalRules": [] -} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_RemoteServices/management-zone/README.md b/BMW-Dynatrace-config/CD_RemoteServices/management-zone/README.md new file mode 100644 index 00000000..3244b3e6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_RemoteServices/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_RemoteServices/management-zone/default.json b/BMW-Dynatrace-config/CD_RemoteServices/management-zone/default.json new file mode 100644 index 00000000..bffa0c3b --- /dev/null +++ b/BMW-Dynatrace-config/CD_RemoteServices/management-zone/default.json @@ -0,0 +1,114 @@ +{ + "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" + }, + { + "conditions": [ + { + "comparisonInfo": { + "caseSensitive": true, + "negate": false, + "operator": "CONTAINS", + "type": "STRING", + "value": "{{.tag}}" + }, + "key": { + "attribute": "CLOUD_APPLICATION_NAMESPACE_NAME" + } + } + ], + "enabled": true, + "propagationTypes": [], + "type": "CLOUD_APPLICATION_NAMESPACE" + }, + { + "conditions": [ + { + "comparisonInfo": { + "caseSensitive": true, + "negate": false, + "operator": "CONTAINS", + "type": "STRING", + "value": "{{.tag}}" + }, + "key": { + "attribute": "CLOUD_APPLICATION_NAME" + } + } + ], + "enabled": true, + "propagationTypes": [], + "type": "CLOUD_APPLICATION" + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_RemoteServices/management-zone/management-zone.yaml b/BMW-Dynatrace-config/CD_RemoteServices/management-zone/management-zone.yaml index fd3257b4..5c992b49 100644 --- a/BMW-Dynatrace-config/CD_RemoteServices/management-zone/management-zone.yaml +++ b/BMW-Dynatrace-config/CD_RemoteServices/management-zone/management-zone.yaml @@ -1,5 +1,6 @@ config: -- CDRemoteServices: CDRemoteServices.json +- CDRemoteServices: default.json CDRemoteServices: - name: CD_RemoteServices +- tag: RemoteServices diff --git a/BMW-Dynatrace-config/CD_RemoteServices/notification/README.md b/BMW-Dynatrace-config/CD_RemoteServices/notification/README.md new file mode 100644 index 00000000..e1a6af84 --- /dev/null +++ b/BMW-Dynatrace-config/CD_RemoteServices/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_RemoteServices/notification/email.json b/BMW-Dynatrace-config/CD_RemoteServices/notification/email.json new file mode 100644 index 00000000..486642a7 --- /dev/null +++ b/BMW-Dynatrace-config/CD_RemoteServices/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_RemoteServices/notification/msTeams.json b/BMW-Dynatrace-config/CD_RemoteServices/notification/msTeams.json new file mode 100644 index 00000000..33e92cf6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_RemoteServices/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_RemoteServices/notification/notification.yaml b/BMW-Dynatrace-config/CD_RemoteServices/notification/notification.yaml new file mode 100644 index 00000000..1ee931c0 --- /dev/null +++ b/BMW-Dynatrace-config/CD_RemoteServices/notification/notification.yaml @@ -0,0 +1,51 @@ +config: +- CDRemoteServices-PROD: msTeams.json +- CDRemoteServices-INT: msTeams.json + +#Prod notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDRemoteServices-PROD: +- name: CD_RemoteServices PROD +- alertingProfile: CD_RemoteServices/alerting-profile/CDRemoteServices-PROD.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDRemoteServices-PROD.EMEA-Prod: +- name: CD_RemoteServices PROD +- alertingProfile: CD_RemoteServices/alerting-profile/CDRemoteServices-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDRemoteServices-PROD.NA-Prod: +- name: CD_RemoteServices PROD +- alertingProfile: CD_RemoteServices/alerting-profile/CDRemoteServices-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDRemoteServices-PROD.CN-Prod: +- name: CD_RemoteServices PROD +- alertingProfile: CD_RemoteServices/alerting-profile/CDRemoteServices-PROD.id +- webhook: https://empty +- skipDeployment: "false" + +#INT notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDRemoteServices-INT: +- name: CD_RemoteServices INT +- alertingProfile: CD_RemoteServices/alerting-profile/CDRemoteServices-INT.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDRemoteServices-INT.EMEA-PreProd: +- name: CD_RemoteServices INT +- alertingProfile: CD_RemoteServices/alerting-profile/CDRemoteServices-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDRemoteServices-INT.NA-PreProd: +- name: CD_RemoteServices INT +- alertingProfile: CD_RemoteServices/alerting-profile/CDRemoteServices-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDRemoteServices-INT.CN-PreProd: +- name: CD_RemoteServices INT +- alertingProfile: CD_RemoteServices/alerting-profile/CDRemoteServices-INT.id +- webhook: https://empty +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_RemoteServices/synthetic-monitor/README.md b/BMW-Dynatrace-config/CD_RemoteServices/synthetic-monitor/README.md new file mode 100644 index 00000000..1695924c --- /dev/null +++ b/BMW-Dynatrace-config/CD_RemoteServices/synthetic-monitor/README.md @@ -0,0 +1,4 @@ + +### How to configure synthetics? + +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Synthetic+Monitors) page to configure your synthetics. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_RemoteServices/synthetic-monitor/default.json b/BMW-Dynatrace-config/CD_RemoteServices/synthetic-monitor/default.json new file mode 100644 index 00000000..cf83039b --- /dev/null +++ b/BMW-Dynatrace-config/CD_RemoteServices/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_RemoteServices/synthetic-monitor/synthetic-monitor.yaml b/BMW-Dynatrace-config/CD_RemoteServices/synthetic-monitor/synthetic-monitor.yaml new file mode 100644 index 00000000..3b5742dc --- /dev/null +++ b/BMW-Dynatrace-config/CD_RemoteServices/synthetic-monitor/synthetic-monitor.yaml @@ -0,0 +1,10 @@ +config: +- RemoteServices: default.json + +RemoteServices: +- name: CD_RemoteServices - +- mzName: CD_RemoteServices/management-zone/CDRemoteServices.name +- mzId: CD_RemoteServices/management-zone/CDRemoteServices.id +- endpoint: +- location: +- skipDeployment: "true" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_Speech/alerting-profile/NewComponent.json b/BMW-Dynatrace-config/CD_Speech/alerting-profile/NewComponent.json deleted file mode 100644 index 1a434e66..00000000 --- a/BMW-Dynatrace-config/CD_Speech/alerting-profile/NewComponent.json +++ /dev/null @@ -1,91 +0,0 @@ -{ - "displayName": "{{.name}}", - "eventTypeFilters": [], - "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_Speech/alerting-profile/alerting-profile.yaml b/BMW-Dynatrace-config/CD_Speech/alerting-profile/alerting-profile.yaml index 0c88c196..245ca9ed 100644 --- a/BMW-Dynatrace-config/CD_Speech/alerting-profile/alerting-profile.yaml +++ b/BMW-Dynatrace-config/CD_Speech/alerting-profile/alerting-profile.yaml @@ -1,14 +1,60 @@ config: -- CDHVD: NewComponent.json -- CDHTTS: NewComponent.json +- CDSpeech-PROD: default.json +- CDSpeech-INT: default.json -CDHVD: -- name: CD_Speech HVD -- mzId: "/CD_Speech/management-zone/CDSpeech.id" -- tag: HVD +#Prod alerting profiles for EMEA/NA/CN +#Dry-run needed for all hubs +CDSpeech-PROD: +- name: CD_Speech PROD +- tag: Speech +- mzId: CD_Speech/management-zone/CDSpeech.id +- env: PROD +- skipDeployment: "true" +#Configuration +CDSpeech-PROD.EMEA-Prod: +- name: CD_Speech PROD +- tag: Speech +- mzId: CD_Speech/management-zone/CDSpeech.id +- env: PROD +- skipDeployment: "false" +CDSpeech-PROD.NA-Prod: +- name: CD_Speech PROD +- tag: Speech +- mzId: CD_Speech/management-zone/CDSpeech.id +- env: PROD +- skipDeployment: "false" +CDSpeech-PROD.CN-Prod: +- name: CD_Speech PROD +- tag: Speech +- mzId: CD_Speech/management-zone/CDSpeech.id +- env: PROD +- skipDeployment: "false" -CDHTTS: -- name: CD_Speech HTTS -- mzId: "/CD_Speech/management-zone/CDSpeech.id" -- tag: HTTS +#INT alerting profiles for EMEA/NA/CN +#Dry-run needed for all hubs +CDSpeech-INT: +- name: CD_Speech INT +- tag: Speech +- mzId: CD_Speech/management-zone/CDSpeech.id +- env: INT +- skipDeployment: "true" +#Configuration +CDSpeech-INT.EMEA-PreProd: +- name: CD_Speech INT +- tag: Speech +- mzId: CD_Speech/management-zone/CDSpeech.id +- env: INT +- skipDeployment: "false" +CDSpeech-INT.NA-PreProd: +- name: CD_Speech INT +- tag: Speech +- mzId: CD_Speech/management-zone/CDSpeech.id +- env: INT +- skipDeployment: "false" +CDSpeech-INT.CN-PreProd: +- name: CD_Speech INT +- tag: Speech +- mzId: CD_Speech/management-zone/CDSpeech.id +- env: INT +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_Speech/alerting-profile/default.json b/BMW-Dynatrace-config/CD_Speech/alerting-profile/default.json new file mode 100644 index 00000000..681a4c64 --- /dev/null +++ b/BMW-Dynatrace-config/CD_Speech/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_Speech/calculated-metrics-service/README.md b/BMW-Dynatrace-config/CD_Speech/calculated-metrics-service/README.md new file mode 100644 index 00000000..0bf8efbc --- /dev/null +++ b/BMW-Dynatrace-config/CD_Speech/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_Speech/conditional-naming-processgroup/README.md b/BMW-Dynatrace-config/CD_Speech/conditional-naming-processgroup/README.md new file mode 100644 index 00000000..f94196a5 --- /dev/null +++ b/BMW-Dynatrace-config/CD_Speech/conditional-naming-processgroup/README.md @@ -0,0 +1,67 @@ +### Process Group Detection Rules and Naming + +#### Detection Rule or Naming? + +For the explanation, we're using a real example of the Infotainment application: + +!(PGNaming1)[../../../../img/PGNaming1.PNG] + +Before working with your dashboards and alerting profiles, an important task to do when working with Dynatrace is checking +the structure of your applications (process groups). You can do that clicking under *technologies* and filter using your +application Management Zone. + +In the picture above, there are two Process Groups called bon-information-prod. **If you see duplicated process groups like in** +**this case, you MUST follow this guideline** + +Next step would be to open both process groups and compare the metadata. In that way, you can identify if all process instances are +part of the same application or not. An easy way to do that is asking yourself: how many instances of my application do i have? + +If you have 4 instances in total and you're able to see 2 in one PG and other 2 in other PG it means that **they are part of the ** +**same application** + +Another situation could be that checking on the metadata, then you see that are **two different application** and Dynatrace is just naming +the process group in the same way + +*Same application* +- Problem: Dynatrace is creating two different process groups, what transalates in two separated services for the same application. Instead of +seeing all the traffic in one service, you will have it splitted and it will complicate your monitoring +- Solution: create a process group detection rule. Contact Dynatrace Expert + +*Different application* +- Problem: Dynatrace is just naming in the same way applications that are different. +- Solution: This case is less severe, since it can be fixed with a process group naming rule. + + +What about our example? +!(PGNaming2)[../../../../img/PGNaming2.PNG] +!(PGNaming3)[../../../../img/PGNaming3.PNG] + +Based on the feedback of the infotaiment team, each process group is a different application (microservice) and it's visible in the kubernetes container/workload +within the metadata of each Process Group. + +#### How to create a Process Group Detection Rule +1. Open the *conditional-naming-processgroup.yaml* file and create a rule that looks like this: +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName} +- tag: Infotainment +- skipDeployment: false +``` +The result of the rule will be renaming the PG to this: +``` +bon-information-prod ipa +bon-information-prod rsl +``` + +Other possible placeholders that you can use are for example: +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName/[^\\-]*$} +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesFullPodName/buffet-(.*?)-} +{ProcessGroup:DetectedName} - {HostGroup:Name/[^\\_]*$} +{ProcessGroup:KubernetesNamespace} +{ProcessGroup:CommandLineArgs/.*?\\-f\\s\\/www\\/(.*?)\\/generated\\/httpd\\.conf.*?} + +You can combine different ones. Check the (documentation)[link] for more \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_Speech/conditional-naming-processgroup/conditional-naming-processgroup.yaml b/BMW-Dynatrace-config/CD_Speech/conditional-naming-processgroup/conditional-naming-processgroup.yaml new file mode 100644 index 00000000..0b10daf1 --- /dev/null +++ b/BMW-Dynatrace-config/CD_Speech/conditional-naming-processgroup/conditional-naming-processgroup.yaml @@ -0,0 +1,8 @@ +config: +- CDSpeech: template.json + +CDSpeech: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: Speech +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_Speech/conditional-naming-processgroup/template.json b/BMW-Dynatrace-config/CD_Speech/conditional-naming-processgroup/template.json new file mode 100644 index 00000000..7c039808 --- /dev/null +++ b/BMW-Dynatrace-config/CD_Speech/conditional-naming-processgroup/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "type": "PROCESS_GROUP" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_Speech/conditional-naming-service/README.md b/BMW-Dynatrace-config/CD_Speech/conditional-naming-service/README.md new file mode 100644 index 00000000..c34ef308 --- /dev/null +++ b/BMW-Dynatrace-config/CD_Speech/conditional-naming-service/README.md @@ -0,0 +1,35 @@ +### Service Naming Rules + +A typical case could be that you access to *Transaction & Services* and you find two services that are exactly the same: +*DataDownloadV1* +*DataDownloadV1* + +If you drilldown into the service and you check in the process group, you may have a PROD and a E2E for each service. + +*Note: if you see that both process group are exactly the same, please contact a Dynatrace expert to create a Process* +*Group detection rule* + +In the case the PG are PROD and E2E, then we need to create a rule that looks like this: + +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {Service:DetectedName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +- tag: Infotainment +- skipDeployment: false +``` + +The rule will get the Service Detected Name (current name) and it will extract (with a regex) the part of the kubernetes namespace after the "-", so -prod or -e2e, resulting in: +*DataDownloadV1 - prod* +*DataDownloadV1 - e2e* + +Now, services will be easy to identify. + +You can create rules based on any property/metadata. Some other placeholder's eamples: +{Service:DatabaseName} - E2E +{Service:WebServiceName} - {ProcessGroup:Kubernetes:microservice} - {ProcessGroup:Kubernetes:environment} +{Service:DetectedName} - {ProcessGroup:KubernetesContainerName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +{Service:DetectedName} - {ProcessGroup:SpringBootProfileName/[^\\-]*$} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_Speech/conditional-naming-service/conditional-naming-service.yaml b/BMW-Dynatrace-config/CD_Speech/conditional-naming-service/conditional-naming-service.yaml new file mode 100644 index 00000000..0b10daf1 --- /dev/null +++ b/BMW-Dynatrace-config/CD_Speech/conditional-naming-service/conditional-naming-service.yaml @@ -0,0 +1,8 @@ +config: +- CDSpeech: template.json + +CDSpeech: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: Speech +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_Speech/conditional-naming-service/template.json b/BMW-Dynatrace-config/CD_Speech/conditional-naming-service/template.json new file mode 100644 index 00000000..5d4fac56 --- /dev/null +++ b/BMW-Dynatrace-config/CD_Speech/conditional-naming-service/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "type": "SERVICE" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_Speech/custom-service-java/README.md b/BMW-Dynatrace-config/CD_Speech/custom-service-java/README.md new file mode 100644 index 00000000..5f35e5c1 --- /dev/null +++ b/BMW-Dynatrace-config/CD_Speech/custom-service-java/README.md @@ -0,0 +1,4 @@ + +### How to configure custom services? + +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Custom+Services) page to configure your custom services. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_Speech/custom-service-java/custom-service-java.yaml b/BMW-Dynatrace-config/CD_Speech/custom-service-java/custom-service-java.yaml new file mode 100644 index 00000000..25f8a028 --- /dev/null +++ b/BMW-Dynatrace-config/CD_Speech/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_Speech/custom-service-java/template-1-1.json b/BMW-Dynatrace-config/CD_Speech/custom-service-java/template-1-1.json new file mode 100644 index 00000000..b3003515 --- /dev/null +++ b/BMW-Dynatrace-config/CD_Speech/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_Speech/dashboard/README.md b/BMW-Dynatrace-config/CD_Speech/dashboard/README.md new file mode 100644 index 00000000..dffcdc8a --- /dev/null +++ b/BMW-Dynatrace-config/CD_Speech/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_Speech/dashboard/dashboard.yaml b/BMW-Dynatrace-config/CD_Speech/dashboard/dashboard.yaml new file mode 100644 index 00000000..cc4140b3 --- /dev/null +++ b/BMW-Dynatrace-config/CD_Speech/dashboard/dashboard.yaml @@ -0,0 +1,127 @@ +config: +- CDSpeech-PROD: default.json +- CDSpeech-E2E: default.json +- CDSpeech-INT: default.json +- CDSpeech-TEST: default.json + +#PROD dashboards for EMEA/NA/CN Prod +#Dry-run needed for all hubs +CDSpeech-PROD: +- name: CD_Speech PROD +- mzName: CD_Speech/management-zone/CDSpeech.name +- mzId: CD_Speech/management-zone/CDSpeech.id +- env: PROD +- skipDeployment: "true" +#Configuration +CDSpeech-PROD.EMEA-Prod: +- name: CD_Speech PROD +- mzName: CD_Speech/management-zone/CDSpeech.name +- mzId: CD_Speech/management-zone/CDSpeech.id +- tag: Speech +- env: PROD +- skipDeployment: "false" +CDSpeech-PROD.NA-Prod: +- name: CD_Speech PROD +- mzName: CD_Speech/management-zone/CDSpeech.name +- mzId: CD_Speech/management-zone/CDSpeech.id +- tag: Speech +- env: PROD +- skipDeployment: "false" +CDSpeech-PROD.CN-Prod: +- name: CD_Speech PROD +- mzName: CD_Speech/management-zone/CDSpeech.name +- mzId: CD_Speech/management-zone/CDSpeech.id +- tag: Speech +- env: PROD +- skipDeployment: "false" + +#E2E dashboards for EMEA/NA/CN E2E +#Dry-run needed for all hubs +CDSpeech-E2E: +- name: CD_Speech E2E +- mzName: CD_Speech/management-zone/CDSpeech.name +- mzId: CD_Speech/management-zone/CDSpeech.id +- env: E2E +- skipDeployment: "true" +#Configuration +CDSpeech-E2E.EMEA-Prod: +- name: CD_Speech E2E +- mzName: CD_Speech/management-zone/CDSpeech.name +- mzId: CD_Speech/management-zone/CDSpeech.id +- env: E2E +- tag: Speech +- skipDeployment: "true" +CDSpeech-E2E.NA-Prod: +- name: CD_Speech E2E +- mzName: CD_Speech/management-zone/CDSpeech.name +- mzId: CD_Speech/management-zone/CDSpeech.id +- env: E2E +- tag: Speech +- skipDeployment: "true" +CDSpeech-E2E.CN-Prod: +- name: CD_Speech E2E +- mzName: CD_Speech/management-zone/CDSpeech.name +- mzId: CD_Speech/management-zone/CDSpeech.id +- env: E2E +- tag: Speech +- skipDeployment: "true" + +#INT dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDSpeech-INT: +- name: CD_Speech INT +- mzName: CD_Speech/management-zone/CDSpeech.name +- mzId: CD_Speech/management-zone/CDSpeech.id +- env: INT +- tag: Speech +- skipDeployment: "true" +#Configuration +CDSpeech-INT.EMEA-PreProd: +- name: CD_Speech INT +- mzName: CD_Speech/management-zone/CDSpeech.name +- mzId: CD_Speech/management-zone/CDSpeech.id +- env: INT +- tag: Speech +- skipDeployment: "false" +CDSpeech-INT.NA-PreProd: +- name: CD_Speech INT +- mzName: CD_Speech/management-zone/CDSpeech.name +- mzId: CD_Speech/management-zone/CDSpeech.id +- env: INT +- skipDeployment: "false" +CDSpeech-INT.CN-PreProd: +- name: CD_Speech INT +- mzName: CD_Speech/management-zone/CDSpeech.name +- mzId: CD_Speech/management-zone/CDSpeech.id +- env: INT +- skipDeployment: "false" + +#TEST dashboards for EMEA/NA/CN +#Dry-run needed for all hubs +CDSpeech-TEST: +- name: CD_Speech TEST +- mzName: CD_Speech/management-zone/CDSpeech.name +- mzId: CD_Speech/management-zone/CDSpeech.id +- tag: Speech +- env: TEST +- skipDeployment: "true" +#Configuration +CDSpeech-TEST.EMEA-PreProd: +- name: CD_Speech TEST +- mzName: CD_Speech/management-zone/CDSpeech.name +- mzId: CD_Speech/management-zone/CDSpeech.id +- tag: Speech +- env: TEST +- skipDeployment: "false" +CDSpeech-TEST.NA-PreProd: +- name: CD_Speech TEST +- mzName: CD_Speech/management-zone/CDSpeech.name +- mzId: CD_Speech/management-zone/CDSpeech.id +- env: TEST +- skipDeployment: "false" +CDSpeech-TEST.CN-PreProd: +- name: CD_Speech TEST +- mzName: CD_Speech/management-zone/CDSpeech.name +- mzId: CD_Speech/management-zone/CDSpeech.id +- env: TEST +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_Speech/dashboard/default.json b/BMW-Dynatrace-config/CD_Speech/dashboard/default.json new file mode 100644 index 00000000..6c685810 --- /dev/null +++ b/BMW-Dynatrace-config/CD_Speech/dashboard/default.json @@ -0,0 +1,308 @@ +{ + "metadata": { + "configurationVersions": [ + 3 + ], + "clusterVersion": "1.214.107.20210407-223952" + }, + "dashboardMetadata": { + "name": "{{.name}}", + "shared": true, + "owner": "Ignacio.Goldman@partner.bmwgroup.com", + "dashboardFilter": { + "timeframe": "-24h to now" + }, + "tags": [ + "{{.tag}}" + ] + }, + "tiles": [ + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 228, + "left": 38, + "width": 1064, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Failure rate (HTTP 4xx/5xx errors)", + "defaultName": "Custom chart", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [ + { + "metric": "builtin:service.errors.fourxx.rate", + "aggregation": "AVG", + "type": "BAR", + "entityType": "SERVICE", + "dimensions": [], + "sortAscending": false, + "sortColumn": false, + "aggregationRate": "TOTAL" + }, + { + "metric": "builtin:service.errors.fivexx.rate", + "aggregation": "AVG", + "type": "BAR", + "entityType": "SERVICE", + "dimensions": [], + "sortAscending": false, + "sortColumn": true, + "aggregationRate": "TOTAL" + } + ], + "resultMetadata": { + "nullbuiltin:service.errors.fivexx.rate|AVG|TOTAL|BAR|SERVICE": { + "lastModified": 1617956393463, + "customColor": "#ff0000" + }, + "nullbuiltin:service.errors.fourxx.rate|AVG|TOTAL|BAR|SERVICE": { + "lastModified": 1617956441725, + "customColor": "#fff29a" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:{{.env}}", + "Component:{{.tag}}" + ] + } + } + } + }, + { + "name": "Problems", + "tileType": "OPEN_PROBLEMS", + "configured": true, + "bounds": { + "top": 38, + "left": 950, + "width": 152, + "height": 152 + }, + "tileFilter": { + "managementZone": { + "id": "{{.mzId}}", + "name": "{{.mzName}}" + } + } + }, + { + "name": "Overall Health", + "tileType": "HEADER", + "configured": true, + "bounds": { + "top": 0, + "left": 38, + "width": 1064, + "height": 38 + }, + "tileFilter": {} + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 532, + "left": 38, + "width": 1064, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "Custom chart", + "tileType": "CUSTOM_CHARTING", + "configured": true, + "bounds": { + "top": 570, + "left": 38, + "width": 1064, + "height": 304 + }, + "tileFilter": {}, + "filterConfig": { + "type": "MIXED", + "customName": "Response time, Request Count and Number of Errors", + "defaultName": "Custom chart", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [ + { + "metric": "builtin:service.response.time", + "aggregation": "AVG", + "type": "LINE", + "entityType": "SERVICE", + "dimensions": [], + "sortAscending": false, + "sortColumn": false, + "aggregationRate": "TOTAL" + }, + { + "metric": "builtin:service.requestCount.total", + "aggregation": "NONE", + "type": "BAR", + "entityType": "SERVICE", + "dimensions": [], + "sortAscending": false, + "sortColumn": false, + "aggregationRate": "TOTAL" + }, + { + "metric": "builtin:service.errors.total.count", + "aggregation": "NONE", + "type": "BAR", + "entityType": "SERVICE", + "dimensions": [], + "sortAscending": false, + "sortColumn": true, + "aggregationRate": "TOTAL" + } + ], + "resultMetadata": { + "nullbuiltin:service.requestCount.total|NONE|TOTAL|BAR|SERVICE": { + "lastModified": 1595275720776, + "customColor": "#008cdb" + }, + "nullbuiltin:service.errors.total.count|NONE|TOTAL|BAR|SERVICE": { + "lastModified": 1595275955999, + "customColor": "#ef651f" + }, + "nullbuiltin:service.response.time|AVG|TOTAL|LINE|SERVICE": { + "lastModified": 1595275686773, + "customColor": "#b4e5f9" + } + } + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:{{.env}}", + "Component:{{.tag}}" + ] + } + } + } + }, + { + "name": "Markdown", + "tileType": "MARKDOWN", + "configured": true, + "bounds": { + "top": 190, + "left": 38, + "width": 1064, + "height": 38 + }, + "tileFilter": {}, + "markdown": "---\n" + }, + { + "name": "", + "tileType": "DATABASES_OVERVIEW", + "configured": true, + "bounds": { + "top": 38, + "left": 646, + "width": 190, + "height": 152 + }, + "tileFilter": {}, + "filterConfig": { + "type": "DATABASE", + "customName": "Databases", + "defaultName": "Databases", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "DATABASE": { + "AUTO_TAGS": [ + "Environment:{{.env}}", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "SERVICES", + "configured": true, + "bounds": { + "top": 38, + "left": 342, + "width": 190, + "height": 152 + }, + "tileFilter": {}, + "filterConfig": { + "type": "SERVICE", + "customName": "Services", + "defaultName": "Services", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "SERVICE": { + "AUTO_TAGS": [ + "Environment:{{.env}}", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + }, + { + "name": "", + "tileType": "HOSTS", + "configured": true, + "bounds": { + "top": 38, + "left": 38, + "width": 190, + "height": 152 + }, + "tileFilter": {}, + "filterConfig": { + "type": "HOST", + "customName": "Hosts", + "defaultName": "Hosts", + "chartConfig": { + "legendShown": true, + "type": "TIMESERIES", + "series": [], + "resultMetadata": {} + }, + "filtersPerEntityType": { + "HOST": { + "AUTO_TAGS": [ + "Environment:{{.env}}", + "Component:{{.tag}}" + ] + } + } + }, + "chartVisible": true + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_Speech/management-zone/README.md b/BMW-Dynatrace-config/CD_Speech/management-zone/README.md new file mode 100644 index 00000000..3244b3e6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_Speech/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_Speech/management-zone/default.json b/BMW-Dynatrace-config/CD_Speech/management-zone/default.json new file mode 100644 index 00000000..bffa0c3b --- /dev/null +++ b/BMW-Dynatrace-config/CD_Speech/management-zone/default.json @@ -0,0 +1,114 @@ +{ + "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" + }, + { + "conditions": [ + { + "comparisonInfo": { + "caseSensitive": true, + "negate": false, + "operator": "CONTAINS", + "type": "STRING", + "value": "{{.tag}}" + }, + "key": { + "attribute": "CLOUD_APPLICATION_NAMESPACE_NAME" + } + } + ], + "enabled": true, + "propagationTypes": [], + "type": "CLOUD_APPLICATION_NAMESPACE" + }, + { + "conditions": [ + { + "comparisonInfo": { + "caseSensitive": true, + "negate": false, + "operator": "CONTAINS", + "type": "STRING", + "value": "{{.tag}}" + }, + "key": { + "attribute": "CLOUD_APPLICATION_NAME" + } + } + ], + "enabled": true, + "propagationTypes": [], + "type": "CLOUD_APPLICATION" + } + ] +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_Speech/management-zone/management-zone.yaml b/BMW-Dynatrace-config/CD_Speech/management-zone/management-zone.yaml index e19ef12b..4b2a88b7 100644 --- a/BMW-Dynatrace-config/CD_Speech/management-zone/management-zone.yaml +++ b/BMW-Dynatrace-config/CD_Speech/management-zone/management-zone.yaml @@ -1,7 +1,6 @@ config: -- CDSpeech: CDTemplate.json +- CDSpeech: default.json CDSpeech: - name: CD_Speech -- tag: HVD -- tag2: HTTS +- tag: Speech diff --git a/BMW-Dynatrace-config/CD_Speech/notification/README.md b/BMW-Dynatrace-config/CD_Speech/notification/README.md new file mode 100644 index 00000000..e1a6af84 --- /dev/null +++ b/BMW-Dynatrace-config/CD_Speech/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_Speech/notification/email.json b/BMW-Dynatrace-config/CD_Speech/notification/email.json new file mode 100644 index 00000000..486642a7 --- /dev/null +++ b/BMW-Dynatrace-config/CD_Speech/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_Speech/notification/msTeams.json b/BMW-Dynatrace-config/CD_Speech/notification/msTeams.json new file mode 100644 index 00000000..33e92cf6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_Speech/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_Speech/notification/notification.yaml b/BMW-Dynatrace-config/CD_Speech/notification/notification.yaml index e015c4da..6fa5832a 100644 --- a/BMW-Dynatrace-config/CD_Speech/notification/notification.yaml +++ b/BMW-Dynatrace-config/CD_Speech/notification/notification.yaml @@ -1,11 +1,51 @@ config: -- CDSpeech-MSTeams-HVD: CDSpeech-MSTeams.json -- CDSpeech-MSTeams-HTTS: CDSpeech-MSTeams.json +- CDSpeech-PROD: msTeams.json +- CDSpeech-INT: msTeams.json -CDSpeech-MSTeams-HVD: -- name: CD_Speech - MS Teams - HVD -- apid: "/CD_Speech/alerting-profile/CDHVD.id" +#Prod notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDSpeech-PROD: +- name: CD_Speech PROD +- alertingProfile: CD_Speech/alerting-profile/CDSpeech-PROD.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDSpeech-PROD.EMEA-Prod: +- name: CD_Speech PROD +- alertingProfile: CD_Speech/alerting-profile/CDSpeech-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDSpeech-PROD.NA-Prod: +- name: CD_Speech PROD +- alertingProfile: CD_Speech/alerting-profile/CDSpeech-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDSpeech-PROD.CN-Prod: +- name: CD_Speech PROD +- alertingProfile: CD_Speech/alerting-profile/CDSpeech-PROD.id +- webhook: https://empty +- skipDeployment: "false" -CDSpeech-MSTeams-HTTS: -- name: CD_Speech - MS Teams - HTTS -- apid: "/CD_Speech/alerting-profile/CDHTTS.id" \ No newline at end of file +#INT notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDSpeech-INT: +- name: CD_Speech INT +- alertingProfile: CD_Speech/alerting-profile/CDSpeech-INT.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDSpeech-INT.EMEA-PreProd: +- name: CD_Speech INT +- alertingProfile: CD_Speech/alerting-profile/CDSpeech-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDSpeech-INT.NA-PreProd: +- name: CD_Speech INT +- alertingProfile: CD_Speech/alerting-profile/CDSpeech-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDSpeech-INT.CN-PreProd: +- name: CD_Speech INT +- alertingProfile: CD_Speech/alerting-profile/CDSpeech-INT.id +- webhook: https://empty +- skipDeployment: "false" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_Speech/synthetic-monitor/README.md b/BMW-Dynatrace-config/CD_Speech/synthetic-monitor/README.md new file mode 100644 index 00000000..1695924c --- /dev/null +++ b/BMW-Dynatrace-config/CD_Speech/synthetic-monitor/README.md @@ -0,0 +1,4 @@ + +### How to configure synthetics? + +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Synthetic+Monitors) page to configure your synthetics. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_Speech/synthetic-monitor/default.json b/BMW-Dynatrace-config/CD_Speech/synthetic-monitor/default.json new file mode 100644 index 00000000..cf83039b --- /dev/null +++ b/BMW-Dynatrace-config/CD_Speech/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_Speech/synthetic-monitor/synthetic-monitor.yaml b/BMW-Dynatrace-config/CD_Speech/synthetic-monitor/synthetic-monitor.yaml new file mode 100644 index 00000000..fc84c581 --- /dev/null +++ b/BMW-Dynatrace-config/CD_Speech/synthetic-monitor/synthetic-monitor.yaml @@ -0,0 +1,10 @@ +config: +- Speech: default.json + +Speech: +- name: CD_Speech - +- mzName: CD_Speech/management-zone/CDSpeech.name +- mzId: CD_Speech/management-zone/CDSpeech.id +- endpoint: +- location: +- skipDeployment: "true" \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_agent-service/conditional-naming-processgroup/README.md b/BMW-Dynatrace-config/CD_agent-service/conditional-naming-processgroup/README.md new file mode 100644 index 00000000..f94196a5 --- /dev/null +++ b/BMW-Dynatrace-config/CD_agent-service/conditional-naming-processgroup/README.md @@ -0,0 +1,67 @@ +### Process Group Detection Rules and Naming + +#### Detection Rule or Naming? + +For the explanation, we're using a real example of the Infotainment application: + +!(PGNaming1)[../../../../img/PGNaming1.PNG] + +Before working with your dashboards and alerting profiles, an important task to do when working with Dynatrace is checking +the structure of your applications (process groups). You can do that clicking under *technologies* and filter using your +application Management Zone. + +In the picture above, there are two Process Groups called bon-information-prod. **If you see duplicated process groups like in** +**this case, you MUST follow this guideline** + +Next step would be to open both process groups and compare the metadata. In that way, you can identify if all process instances are +part of the same application or not. An easy way to do that is asking yourself: how many instances of my application do i have? + +If you have 4 instances in total and you're able to see 2 in one PG and other 2 in other PG it means that **they are part of the ** +**same application** + +Another situation could be that checking on the metadata, then you see that are **two different application** and Dynatrace is just naming +the process group in the same way + +*Same application* +- Problem: Dynatrace is creating two different process groups, what transalates in two separated services for the same application. Instead of +seeing all the traffic in one service, you will have it splitted and it will complicate your monitoring +- Solution: create a process group detection rule. Contact Dynatrace Expert + +*Different application* +- Problem: Dynatrace is just naming in the same way applications that are different. +- Solution: This case is less severe, since it can be fixed with a process group naming rule. + + +What about our example? +!(PGNaming2)[../../../../img/PGNaming2.PNG] +!(PGNaming3)[../../../../img/PGNaming3.PNG] + +Based on the feedback of the infotaiment team, each process group is a different application (microservice) and it's visible in the kubernetes container/workload +within the metadata of each Process Group. + +#### How to create a Process Group Detection Rule +1. Open the *conditional-naming-processgroup.yaml* file and create a rule that looks like this: +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName} +- tag: Infotainment +- skipDeployment: false +``` +The result of the rule will be renaming the PG to this: +``` +bon-information-prod ipa +bon-information-prod rsl +``` + +Other possible placeholders that you can use are for example: +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName/[^\\-]*$} +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesFullPodName/buffet-(.*?)-} +{ProcessGroup:DetectedName} - {HostGroup:Name/[^\\_]*$} +{ProcessGroup:KubernetesNamespace} +{ProcessGroup:CommandLineArgs/.*?\\-f\\s\\/www\\/(.*?)\\/generated\\/httpd\\.conf.*?} + +You can combine different ones. Check the (documentation)[link] for more \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_agent-service/conditional-naming-processgroup/conditional-naming-processgroup.yaml b/BMW-Dynatrace-config/CD_agent-service/conditional-naming-processgroup/conditional-naming-processgroup.yaml new file mode 100644 index 00000000..d3d53700 --- /dev/null +++ b/BMW-Dynatrace-config/CD_agent-service/conditional-naming-processgroup/conditional-naming-processgroup.yaml @@ -0,0 +1,8 @@ +config: +- CDagent-service: template.json + +CDagent-service: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: agent-service +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_agent-service/conditional-naming-processgroup/template.json b/BMW-Dynatrace-config/CD_agent-service/conditional-naming-processgroup/template.json new file mode 100644 index 00000000..7c039808 --- /dev/null +++ b/BMW-Dynatrace-config/CD_agent-service/conditional-naming-processgroup/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "type": "PROCESS_GROUP" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_agent-service/conditional-naming-service/README.md b/BMW-Dynatrace-config/CD_agent-service/conditional-naming-service/README.md new file mode 100644 index 00000000..c34ef308 --- /dev/null +++ b/BMW-Dynatrace-config/CD_agent-service/conditional-naming-service/README.md @@ -0,0 +1,35 @@ +### Service Naming Rules + +A typical case could be that you access to *Transaction & Services* and you find two services that are exactly the same: +*DataDownloadV1* +*DataDownloadV1* + +If you drilldown into the service and you check in the process group, you may have a PROD and a E2E for each service. + +*Note: if you see that both process group are exactly the same, please contact a Dynatrace expert to create a Process* +*Group detection rule* + +In the case the PG are PROD and E2E, then we need to create a rule that looks like this: + +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {Service:DetectedName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +- tag: Infotainment +- skipDeployment: false +``` + +The rule will get the Service Detected Name (current name) and it will extract (with a regex) the part of the kubernetes namespace after the "-", so -prod or -e2e, resulting in: +*DataDownloadV1 - prod* +*DataDownloadV1 - e2e* + +Now, services will be easy to identify. + +You can create rules based on any property/metadata. Some other placeholder's eamples: +{Service:DatabaseName} - E2E +{Service:WebServiceName} - {ProcessGroup:Kubernetes:microservice} - {ProcessGroup:Kubernetes:environment} +{Service:DetectedName} - {ProcessGroup:KubernetesContainerName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +{Service:DetectedName} - {ProcessGroup:SpringBootProfileName/[^\\-]*$} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_agent-service/conditional-naming-service/conditional-naming-service.yaml b/BMW-Dynatrace-config/CD_agent-service/conditional-naming-service/conditional-naming-service.yaml new file mode 100644 index 00000000..d3d53700 --- /dev/null +++ b/BMW-Dynatrace-config/CD_agent-service/conditional-naming-service/conditional-naming-service.yaml @@ -0,0 +1,8 @@ +config: +- CDagent-service: template.json + +CDagent-service: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: agent-service +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_agent-service/conditional-naming-service/template.json b/BMW-Dynatrace-config/CD_agent-service/conditional-naming-service/template.json new file mode 100644 index 00000000..5d4fac56 --- /dev/null +++ b/BMW-Dynatrace-config/CD_agent-service/conditional-naming-service/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "type": "SERVICE" +} \ 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 index d41c4c77..5f35e5c1 100644 --- a/BMW-Dynatrace-config/CD_agent-service/custom-service-java/README.md +++ b/BMW-Dynatrace-config/CD_agent-service/custom-service-java/README.md @@ -1,30 +1,4 @@ -## 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 configure custom services? -## 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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Custom+Services) page to configure your custom services. \ 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 index 92e734fa..1695924c 100644 --- a/BMW-Dynatrace-config/CD_agent-service/synthetic-monitor/README.md +++ b/BMW-Dynatrace-config/CD_agent-service/synthetic-monitor/README.md @@ -1,37 +1,4 @@ -# Synthetic Configuration -To calculate the Availability KPI, a synthetic must be configured. +### How to configure synthetics? -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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Synthetic+Monitors) page to configure your synthetics. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_aluis/conditional-naming-processgroup/README.md b/BMW-Dynatrace-config/CD_aluis/conditional-naming-processgroup/README.md new file mode 100644 index 00000000..f94196a5 --- /dev/null +++ b/BMW-Dynatrace-config/CD_aluis/conditional-naming-processgroup/README.md @@ -0,0 +1,67 @@ +### Process Group Detection Rules and Naming + +#### Detection Rule or Naming? + +For the explanation, we're using a real example of the Infotainment application: + +!(PGNaming1)[../../../../img/PGNaming1.PNG] + +Before working with your dashboards and alerting profiles, an important task to do when working with Dynatrace is checking +the structure of your applications (process groups). You can do that clicking under *technologies* and filter using your +application Management Zone. + +In the picture above, there are two Process Groups called bon-information-prod. **If you see duplicated process groups like in** +**this case, you MUST follow this guideline** + +Next step would be to open both process groups and compare the metadata. In that way, you can identify if all process instances are +part of the same application or not. An easy way to do that is asking yourself: how many instances of my application do i have? + +If you have 4 instances in total and you're able to see 2 in one PG and other 2 in other PG it means that **they are part of the ** +**same application** + +Another situation could be that checking on the metadata, then you see that are **two different application** and Dynatrace is just naming +the process group in the same way + +*Same application* +- Problem: Dynatrace is creating two different process groups, what transalates in two separated services for the same application. Instead of +seeing all the traffic in one service, you will have it splitted and it will complicate your monitoring +- Solution: create a process group detection rule. Contact Dynatrace Expert + +*Different application* +- Problem: Dynatrace is just naming in the same way applications that are different. +- Solution: This case is less severe, since it can be fixed with a process group naming rule. + + +What about our example? +!(PGNaming2)[../../../../img/PGNaming2.PNG] +!(PGNaming3)[../../../../img/PGNaming3.PNG] + +Based on the feedback of the infotaiment team, each process group is a different application (microservice) and it's visible in the kubernetes container/workload +within the metadata of each Process Group. + +#### How to create a Process Group Detection Rule +1. Open the *conditional-naming-processgroup.yaml* file and create a rule that looks like this: +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName} +- tag: Infotainment +- skipDeployment: false +``` +The result of the rule will be renaming the PG to this: +``` +bon-information-prod ipa +bon-information-prod rsl +``` + +Other possible placeholders that you can use are for example: +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName/[^\\-]*$} +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesFullPodName/buffet-(.*?)-} +{ProcessGroup:DetectedName} - {HostGroup:Name/[^\\_]*$} +{ProcessGroup:KubernetesNamespace} +{ProcessGroup:CommandLineArgs/.*?\\-f\\s\\/www\\/(.*?)\\/generated\\/httpd\\.conf.*?} + +You can combine different ones. Check the (documentation)[link] for more \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_aluis/conditional-naming-processgroup/conditional-naming-processgroup.yaml b/BMW-Dynatrace-config/CD_aluis/conditional-naming-processgroup/conditional-naming-processgroup.yaml new file mode 100644 index 00000000..03dd67a4 --- /dev/null +++ b/BMW-Dynatrace-config/CD_aluis/conditional-naming-processgroup/conditional-naming-processgroup.yaml @@ -0,0 +1,8 @@ +config: +- CDaluis: template.json + +CDaluis: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: aluis +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_aluis/conditional-naming-processgroup/template.json b/BMW-Dynatrace-config/CD_aluis/conditional-naming-processgroup/template.json new file mode 100644 index 00000000..7c039808 --- /dev/null +++ b/BMW-Dynatrace-config/CD_aluis/conditional-naming-processgroup/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "type": "PROCESS_GROUP" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_aluis/conditional-naming-service/README.md b/BMW-Dynatrace-config/CD_aluis/conditional-naming-service/README.md new file mode 100644 index 00000000..c34ef308 --- /dev/null +++ b/BMW-Dynatrace-config/CD_aluis/conditional-naming-service/README.md @@ -0,0 +1,35 @@ +### Service Naming Rules + +A typical case could be that you access to *Transaction & Services* and you find two services that are exactly the same: +*DataDownloadV1* +*DataDownloadV1* + +If you drilldown into the service and you check in the process group, you may have a PROD and a E2E for each service. + +*Note: if you see that both process group are exactly the same, please contact a Dynatrace expert to create a Process* +*Group detection rule* + +In the case the PG are PROD and E2E, then we need to create a rule that looks like this: + +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {Service:DetectedName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +- tag: Infotainment +- skipDeployment: false +``` + +The rule will get the Service Detected Name (current name) and it will extract (with a regex) the part of the kubernetes namespace after the "-", so -prod or -e2e, resulting in: +*DataDownloadV1 - prod* +*DataDownloadV1 - e2e* + +Now, services will be easy to identify. + +You can create rules based on any property/metadata. Some other placeholder's eamples: +{Service:DatabaseName} - E2E +{Service:WebServiceName} - {ProcessGroup:Kubernetes:microservice} - {ProcessGroup:Kubernetes:environment} +{Service:DetectedName} - {ProcessGroup:KubernetesContainerName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +{Service:DetectedName} - {ProcessGroup:SpringBootProfileName/[^\\-]*$} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_aluis/conditional-naming-service/conditional-naming-service.yaml b/BMW-Dynatrace-config/CD_aluis/conditional-naming-service/conditional-naming-service.yaml new file mode 100644 index 00000000..03dd67a4 --- /dev/null +++ b/BMW-Dynatrace-config/CD_aluis/conditional-naming-service/conditional-naming-service.yaml @@ -0,0 +1,8 @@ +config: +- CDaluis: template.json + +CDaluis: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: aluis +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_aluis/conditional-naming-service/template.json b/BMW-Dynatrace-config/CD_aluis/conditional-naming-service/template.json new file mode 100644 index 00000000..5d4fac56 --- /dev/null +++ b/BMW-Dynatrace-config/CD_aluis/conditional-naming-service/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "type": "SERVICE" +} \ 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 index d41c4c77..5f35e5c1 100644 --- a/BMW-Dynatrace-config/CD_aluis/custom-service-java/README.md +++ b/BMW-Dynatrace-config/CD_aluis/custom-service-java/README.md @@ -1,30 +1,4 @@ -## 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 configure custom services? -## 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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Custom+Services) page to configure your custom services. \ 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 index 92e734fa..1695924c 100644 --- a/BMW-Dynatrace-config/CD_aluis/synthetic-monitor/README.md +++ b/BMW-Dynatrace-config/CD_aluis/synthetic-monitor/README.md @@ -1,37 +1,4 @@ -# Synthetic Configuration -To calculate the Availability KPI, a synthetic must be configured. +### How to configure synthetics? -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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Synthetic+Monitors) page to configure your synthetics. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_am-casa/conditional-naming-processgroup/README.md b/BMW-Dynatrace-config/CD_am-casa/conditional-naming-processgroup/README.md new file mode 100644 index 00000000..f94196a5 --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-casa/conditional-naming-processgroup/README.md @@ -0,0 +1,67 @@ +### Process Group Detection Rules and Naming + +#### Detection Rule or Naming? + +For the explanation, we're using a real example of the Infotainment application: + +!(PGNaming1)[../../../../img/PGNaming1.PNG] + +Before working with your dashboards and alerting profiles, an important task to do when working with Dynatrace is checking +the structure of your applications (process groups). You can do that clicking under *technologies* and filter using your +application Management Zone. + +In the picture above, there are two Process Groups called bon-information-prod. **If you see duplicated process groups like in** +**this case, you MUST follow this guideline** + +Next step would be to open both process groups and compare the metadata. In that way, you can identify if all process instances are +part of the same application or not. An easy way to do that is asking yourself: how many instances of my application do i have? + +If you have 4 instances in total and you're able to see 2 in one PG and other 2 in other PG it means that **they are part of the ** +**same application** + +Another situation could be that checking on the metadata, then you see that are **two different application** and Dynatrace is just naming +the process group in the same way + +*Same application* +- Problem: Dynatrace is creating two different process groups, what transalates in two separated services for the same application. Instead of +seeing all the traffic in one service, you will have it splitted and it will complicate your monitoring +- Solution: create a process group detection rule. Contact Dynatrace Expert + +*Different application* +- Problem: Dynatrace is just naming in the same way applications that are different. +- Solution: This case is less severe, since it can be fixed with a process group naming rule. + + +What about our example? +!(PGNaming2)[../../../../img/PGNaming2.PNG] +!(PGNaming3)[../../../../img/PGNaming3.PNG] + +Based on the feedback of the infotaiment team, each process group is a different application (microservice) and it's visible in the kubernetes container/workload +within the metadata of each Process Group. + +#### How to create a Process Group Detection Rule +1. Open the *conditional-naming-processgroup.yaml* file and create a rule that looks like this: +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName} +- tag: Infotainment +- skipDeployment: false +``` +The result of the rule will be renaming the PG to this: +``` +bon-information-prod ipa +bon-information-prod rsl +``` + +Other possible placeholders that you can use are for example: +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName/[^\\-]*$} +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesFullPodName/buffet-(.*?)-} +{ProcessGroup:DetectedName} - {HostGroup:Name/[^\\_]*$} +{ProcessGroup:KubernetesNamespace} +{ProcessGroup:CommandLineArgs/.*?\\-f\\s\\/www\\/(.*?)\\/generated\\/httpd\\.conf.*?} + +You can combine different ones. Check the (documentation)[link] for more \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_am-casa/conditional-naming-processgroup/conditional-naming-processgroup.yaml b/BMW-Dynatrace-config/CD_am-casa/conditional-naming-processgroup/conditional-naming-processgroup.yaml new file mode 100644 index 00000000..b5b70089 --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-casa/conditional-naming-processgroup/conditional-naming-processgroup.yaml @@ -0,0 +1,8 @@ +config: +- CDam-casa: template.json + +CDam-casa: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: am-casa +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_am-casa/conditional-naming-processgroup/template.json b/BMW-Dynatrace-config/CD_am-casa/conditional-naming-processgroup/template.json new file mode 100644 index 00000000..7c039808 --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-casa/conditional-naming-processgroup/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "type": "PROCESS_GROUP" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_am-casa/conditional-naming-service/README.md b/BMW-Dynatrace-config/CD_am-casa/conditional-naming-service/README.md new file mode 100644 index 00000000..c34ef308 --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-casa/conditional-naming-service/README.md @@ -0,0 +1,35 @@ +### Service Naming Rules + +A typical case could be that you access to *Transaction & Services* and you find two services that are exactly the same: +*DataDownloadV1* +*DataDownloadV1* + +If you drilldown into the service and you check in the process group, you may have a PROD and a E2E for each service. + +*Note: if you see that both process group are exactly the same, please contact a Dynatrace expert to create a Process* +*Group detection rule* + +In the case the PG are PROD and E2E, then we need to create a rule that looks like this: + +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {Service:DetectedName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +- tag: Infotainment +- skipDeployment: false +``` + +The rule will get the Service Detected Name (current name) and it will extract (with a regex) the part of the kubernetes namespace after the "-", so -prod or -e2e, resulting in: +*DataDownloadV1 - prod* +*DataDownloadV1 - e2e* + +Now, services will be easy to identify. + +You can create rules based on any property/metadata. Some other placeholder's eamples: +{Service:DatabaseName} - E2E +{Service:WebServiceName} - {ProcessGroup:Kubernetes:microservice} - {ProcessGroup:Kubernetes:environment} +{Service:DetectedName} - {ProcessGroup:KubernetesContainerName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +{Service:DetectedName} - {ProcessGroup:SpringBootProfileName/[^\\-]*$} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_am-casa/conditional-naming-service/conditional-naming-service.yaml b/BMW-Dynatrace-config/CD_am-casa/conditional-naming-service/conditional-naming-service.yaml new file mode 100644 index 00000000..b5b70089 --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-casa/conditional-naming-service/conditional-naming-service.yaml @@ -0,0 +1,8 @@ +config: +- CDam-casa: template.json + +CDam-casa: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: am-casa +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_am-casa/conditional-naming-service/template.json b/BMW-Dynatrace-config/CD_am-casa/conditional-naming-service/template.json new file mode 100644 index 00000000..5d4fac56 --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-casa/conditional-naming-service/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "type": "SERVICE" +} \ 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 index d41c4c77..5f35e5c1 100644 --- a/BMW-Dynatrace-config/CD_am-casa/custom-service-java/README.md +++ b/BMW-Dynatrace-config/CD_am-casa/custom-service-java/README.md @@ -1,30 +1,4 @@ -## 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 configure custom services? -## 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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Custom+Services) page to configure your custom services. \ 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 index 92e734fa..1695924c 100644 --- a/BMW-Dynatrace-config/CD_am-casa/synthetic-monitor/README.md +++ b/BMW-Dynatrace-config/CD_am-casa/synthetic-monitor/README.md @@ -1,37 +1,4 @@ -# Synthetic Configuration -To calculate the Availability KPI, a synthetic must be configured. +### How to configure synthetics? -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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Synthetic+Monitors) page to configure your synthetics. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_am-cesim/conditional-naming-processgroup/README.md b/BMW-Dynatrace-config/CD_am-cesim/conditional-naming-processgroup/README.md new file mode 100644 index 00000000..f94196a5 --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-cesim/conditional-naming-processgroup/README.md @@ -0,0 +1,67 @@ +### Process Group Detection Rules and Naming + +#### Detection Rule or Naming? + +For the explanation, we're using a real example of the Infotainment application: + +!(PGNaming1)[../../../../img/PGNaming1.PNG] + +Before working with your dashboards and alerting profiles, an important task to do when working with Dynatrace is checking +the structure of your applications (process groups). You can do that clicking under *technologies* and filter using your +application Management Zone. + +In the picture above, there are two Process Groups called bon-information-prod. **If you see duplicated process groups like in** +**this case, you MUST follow this guideline** + +Next step would be to open both process groups and compare the metadata. In that way, you can identify if all process instances are +part of the same application or not. An easy way to do that is asking yourself: how many instances of my application do i have? + +If you have 4 instances in total and you're able to see 2 in one PG and other 2 in other PG it means that **they are part of the ** +**same application** + +Another situation could be that checking on the metadata, then you see that are **two different application** and Dynatrace is just naming +the process group in the same way + +*Same application* +- Problem: Dynatrace is creating two different process groups, what transalates in two separated services for the same application. Instead of +seeing all the traffic in one service, you will have it splitted and it will complicate your monitoring +- Solution: create a process group detection rule. Contact Dynatrace Expert + +*Different application* +- Problem: Dynatrace is just naming in the same way applications that are different. +- Solution: This case is less severe, since it can be fixed with a process group naming rule. + + +What about our example? +!(PGNaming2)[../../../../img/PGNaming2.PNG] +!(PGNaming3)[../../../../img/PGNaming3.PNG] + +Based on the feedback of the infotaiment team, each process group is a different application (microservice) and it's visible in the kubernetes container/workload +within the metadata of each Process Group. + +#### How to create a Process Group Detection Rule +1. Open the *conditional-naming-processgroup.yaml* file and create a rule that looks like this: +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName} +- tag: Infotainment +- skipDeployment: false +``` +The result of the rule will be renaming the PG to this: +``` +bon-information-prod ipa +bon-information-prod rsl +``` + +Other possible placeholders that you can use are for example: +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName/[^\\-]*$} +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesFullPodName/buffet-(.*?)-} +{ProcessGroup:DetectedName} - {HostGroup:Name/[^\\_]*$} +{ProcessGroup:KubernetesNamespace} +{ProcessGroup:CommandLineArgs/.*?\\-f\\s\\/www\\/(.*?)\\/generated\\/httpd\\.conf.*?} + +You can combine different ones. Check the (documentation)[link] for more \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_am-cesim/conditional-naming-processgroup/conditional-naming-processgroup.yaml b/BMW-Dynatrace-config/CD_am-cesim/conditional-naming-processgroup/conditional-naming-processgroup.yaml new file mode 100644 index 00000000..74c6c599 --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-cesim/conditional-naming-processgroup/conditional-naming-processgroup.yaml @@ -0,0 +1,8 @@ +config: +- CDam-cesim: template.json + +CDam-cesim: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: am-cesim +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_am-cesim/conditional-naming-processgroup/template.json b/BMW-Dynatrace-config/CD_am-cesim/conditional-naming-processgroup/template.json new file mode 100644 index 00000000..7c039808 --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-cesim/conditional-naming-processgroup/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "type": "PROCESS_GROUP" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_am-cesim/conditional-naming-service/README.md b/BMW-Dynatrace-config/CD_am-cesim/conditional-naming-service/README.md new file mode 100644 index 00000000..c34ef308 --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-cesim/conditional-naming-service/README.md @@ -0,0 +1,35 @@ +### Service Naming Rules + +A typical case could be that you access to *Transaction & Services* and you find two services that are exactly the same: +*DataDownloadV1* +*DataDownloadV1* + +If you drilldown into the service and you check in the process group, you may have a PROD and a E2E for each service. + +*Note: if you see that both process group are exactly the same, please contact a Dynatrace expert to create a Process* +*Group detection rule* + +In the case the PG are PROD and E2E, then we need to create a rule that looks like this: + +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {Service:DetectedName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +- tag: Infotainment +- skipDeployment: false +``` + +The rule will get the Service Detected Name (current name) and it will extract (with a regex) the part of the kubernetes namespace after the "-", so -prod or -e2e, resulting in: +*DataDownloadV1 - prod* +*DataDownloadV1 - e2e* + +Now, services will be easy to identify. + +You can create rules based on any property/metadata. Some other placeholder's eamples: +{Service:DatabaseName} - E2E +{Service:WebServiceName} - {ProcessGroup:Kubernetes:microservice} - {ProcessGroup:Kubernetes:environment} +{Service:DetectedName} - {ProcessGroup:KubernetesContainerName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +{Service:DetectedName} - {ProcessGroup:SpringBootProfileName/[^\\-]*$} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_am-cesim/conditional-naming-service/conditional-naming-service.yaml b/BMW-Dynatrace-config/CD_am-cesim/conditional-naming-service/conditional-naming-service.yaml new file mode 100644 index 00000000..74c6c599 --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-cesim/conditional-naming-service/conditional-naming-service.yaml @@ -0,0 +1,8 @@ +config: +- CDam-cesim: template.json + +CDam-cesim: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: am-cesim +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_am-cesim/conditional-naming-service/template.json b/BMW-Dynatrace-config/CD_am-cesim/conditional-naming-service/template.json new file mode 100644 index 00000000..5d4fac56 --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-cesim/conditional-naming-service/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "type": "SERVICE" +} \ 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 index d41c4c77..5f35e5c1 100644 --- a/BMW-Dynatrace-config/CD_am-cesim/custom-service-java/README.md +++ b/BMW-Dynatrace-config/CD_am-cesim/custom-service-java/README.md @@ -1,30 +1,4 @@ -## 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 configure custom services? -## 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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Custom+Services) page to configure your custom services. \ 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 index 92e734fa..1695924c 100644 --- a/BMW-Dynatrace-config/CD_am-cesim/synthetic-monitor/README.md +++ b/BMW-Dynatrace-config/CD_am-cesim/synthetic-monitor/README.md @@ -1,37 +1,4 @@ -# Synthetic Configuration -To calculate the Availability KPI, a synthetic must be configured. +### How to configure synthetics? -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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Synthetic+Monitors) page to configure your synthetics. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_am-cns/conditional-naming-processgroup/README.md b/BMW-Dynatrace-config/CD_am-cns/conditional-naming-processgroup/README.md new file mode 100644 index 00000000..f94196a5 --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-cns/conditional-naming-processgroup/README.md @@ -0,0 +1,67 @@ +### Process Group Detection Rules and Naming + +#### Detection Rule or Naming? + +For the explanation, we're using a real example of the Infotainment application: + +!(PGNaming1)[../../../../img/PGNaming1.PNG] + +Before working with your dashboards and alerting profiles, an important task to do when working with Dynatrace is checking +the structure of your applications (process groups). You can do that clicking under *technologies* and filter using your +application Management Zone. + +In the picture above, there are two Process Groups called bon-information-prod. **If you see duplicated process groups like in** +**this case, you MUST follow this guideline** + +Next step would be to open both process groups and compare the metadata. In that way, you can identify if all process instances are +part of the same application or not. An easy way to do that is asking yourself: how many instances of my application do i have? + +If you have 4 instances in total and you're able to see 2 in one PG and other 2 in other PG it means that **they are part of the ** +**same application** + +Another situation could be that checking on the metadata, then you see that are **two different application** and Dynatrace is just naming +the process group in the same way + +*Same application* +- Problem: Dynatrace is creating two different process groups, what transalates in two separated services for the same application. Instead of +seeing all the traffic in one service, you will have it splitted and it will complicate your monitoring +- Solution: create a process group detection rule. Contact Dynatrace Expert + +*Different application* +- Problem: Dynatrace is just naming in the same way applications that are different. +- Solution: This case is less severe, since it can be fixed with a process group naming rule. + + +What about our example? +!(PGNaming2)[../../../../img/PGNaming2.PNG] +!(PGNaming3)[../../../../img/PGNaming3.PNG] + +Based on the feedback of the infotaiment team, each process group is a different application (microservice) and it's visible in the kubernetes container/workload +within the metadata of each Process Group. + +#### How to create a Process Group Detection Rule +1. Open the *conditional-naming-processgroup.yaml* file and create a rule that looks like this: +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName} +- tag: Infotainment +- skipDeployment: false +``` +The result of the rule will be renaming the PG to this: +``` +bon-information-prod ipa +bon-information-prod rsl +``` + +Other possible placeholders that you can use are for example: +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName/[^\\-]*$} +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesFullPodName/buffet-(.*?)-} +{ProcessGroup:DetectedName} - {HostGroup:Name/[^\\_]*$} +{ProcessGroup:KubernetesNamespace} +{ProcessGroup:CommandLineArgs/.*?\\-f\\s\\/www\\/(.*?)\\/generated\\/httpd\\.conf.*?} + +You can combine different ones. Check the (documentation)[link] for more \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_am-cns/conditional-naming-processgroup/conditional-naming-processgroup.yaml b/BMW-Dynatrace-config/CD_am-cns/conditional-naming-processgroup/conditional-naming-processgroup.yaml new file mode 100644 index 00000000..0aacc063 --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-cns/conditional-naming-processgroup/conditional-naming-processgroup.yaml @@ -0,0 +1,8 @@ +config: +- CDam-cns: template.json + +CDam-cns: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: am-cns +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_am-cns/conditional-naming-processgroup/template.json b/BMW-Dynatrace-config/CD_am-cns/conditional-naming-processgroup/template.json new file mode 100644 index 00000000..7c039808 --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-cns/conditional-naming-processgroup/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "type": "PROCESS_GROUP" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_am-cns/conditional-naming-service/README.md b/BMW-Dynatrace-config/CD_am-cns/conditional-naming-service/README.md new file mode 100644 index 00000000..c34ef308 --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-cns/conditional-naming-service/README.md @@ -0,0 +1,35 @@ +### Service Naming Rules + +A typical case could be that you access to *Transaction & Services* and you find two services that are exactly the same: +*DataDownloadV1* +*DataDownloadV1* + +If you drilldown into the service and you check in the process group, you may have a PROD and a E2E for each service. + +*Note: if you see that both process group are exactly the same, please contact a Dynatrace expert to create a Process* +*Group detection rule* + +In the case the PG are PROD and E2E, then we need to create a rule that looks like this: + +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {Service:DetectedName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +- tag: Infotainment +- skipDeployment: false +``` + +The rule will get the Service Detected Name (current name) and it will extract (with a regex) the part of the kubernetes namespace after the "-", so -prod or -e2e, resulting in: +*DataDownloadV1 - prod* +*DataDownloadV1 - e2e* + +Now, services will be easy to identify. + +You can create rules based on any property/metadata. Some other placeholder's eamples: +{Service:DatabaseName} - E2E +{Service:WebServiceName} - {ProcessGroup:Kubernetes:microservice} - {ProcessGroup:Kubernetes:environment} +{Service:DetectedName} - {ProcessGroup:KubernetesContainerName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +{Service:DetectedName} - {ProcessGroup:SpringBootProfileName/[^\\-]*$} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_am-cns/conditional-naming-service/conditional-naming-service.yaml b/BMW-Dynatrace-config/CD_am-cns/conditional-naming-service/conditional-naming-service.yaml new file mode 100644 index 00000000..0aacc063 --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-cns/conditional-naming-service/conditional-naming-service.yaml @@ -0,0 +1,8 @@ +config: +- CDam-cns: template.json + +CDam-cns: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: am-cns +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_am-cns/conditional-naming-service/template.json b/BMW-Dynatrace-config/CD_am-cns/conditional-naming-service/template.json new file mode 100644 index 00000000..5d4fac56 --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-cns/conditional-naming-service/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "type": "SERVICE" +} \ 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 index d41c4c77..5f35e5c1 100644 --- a/BMW-Dynatrace-config/CD_am-cns/custom-service-java/README.md +++ b/BMW-Dynatrace-config/CD_am-cns/custom-service-java/README.md @@ -1,30 +1,4 @@ -## 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 configure custom services? -## 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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Custom+Services) page to configure your custom services. \ 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 index 92e734fa..1695924c 100644 --- a/BMW-Dynatrace-config/CD_am-cns/synthetic-monitor/README.md +++ b/BMW-Dynatrace-config/CD_am-cns/synthetic-monitor/README.md @@ -1,37 +1,4 @@ -# Synthetic Configuration -To calculate the Availability KPI, a synthetic must be configured. +### How to configure synthetics? -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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Synthetic+Monitors) page to configure your synthetics. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_am-device/conditional-naming-processgroup/README.md b/BMW-Dynatrace-config/CD_am-device/conditional-naming-processgroup/README.md new file mode 100644 index 00000000..f94196a5 --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-device/conditional-naming-processgroup/README.md @@ -0,0 +1,67 @@ +### Process Group Detection Rules and Naming + +#### Detection Rule or Naming? + +For the explanation, we're using a real example of the Infotainment application: + +!(PGNaming1)[../../../../img/PGNaming1.PNG] + +Before working with your dashboards and alerting profiles, an important task to do when working with Dynatrace is checking +the structure of your applications (process groups). You can do that clicking under *technologies* and filter using your +application Management Zone. + +In the picture above, there are two Process Groups called bon-information-prod. **If you see duplicated process groups like in** +**this case, you MUST follow this guideline** + +Next step would be to open both process groups and compare the metadata. In that way, you can identify if all process instances are +part of the same application or not. An easy way to do that is asking yourself: how many instances of my application do i have? + +If you have 4 instances in total and you're able to see 2 in one PG and other 2 in other PG it means that **they are part of the ** +**same application** + +Another situation could be that checking on the metadata, then you see that are **two different application** and Dynatrace is just naming +the process group in the same way + +*Same application* +- Problem: Dynatrace is creating two different process groups, what transalates in two separated services for the same application. Instead of +seeing all the traffic in one service, you will have it splitted and it will complicate your monitoring +- Solution: create a process group detection rule. Contact Dynatrace Expert + +*Different application* +- Problem: Dynatrace is just naming in the same way applications that are different. +- Solution: This case is less severe, since it can be fixed with a process group naming rule. + + +What about our example? +!(PGNaming2)[../../../../img/PGNaming2.PNG] +!(PGNaming3)[../../../../img/PGNaming3.PNG] + +Based on the feedback of the infotaiment team, each process group is a different application (microservice) and it's visible in the kubernetes container/workload +within the metadata of each Process Group. + +#### How to create a Process Group Detection Rule +1. Open the *conditional-naming-processgroup.yaml* file and create a rule that looks like this: +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName} +- tag: Infotainment +- skipDeployment: false +``` +The result of the rule will be renaming the PG to this: +``` +bon-information-prod ipa +bon-information-prod rsl +``` + +Other possible placeholders that you can use are for example: +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName/[^\\-]*$} +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesFullPodName/buffet-(.*?)-} +{ProcessGroup:DetectedName} - {HostGroup:Name/[^\\_]*$} +{ProcessGroup:KubernetesNamespace} +{ProcessGroup:CommandLineArgs/.*?\\-f\\s\\/www\\/(.*?)\\/generated\\/httpd\\.conf.*?} + +You can combine different ones. Check the (documentation)[link] for more \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_am-device/conditional-naming-processgroup/conditional-naming-processgroup.yaml b/BMW-Dynatrace-config/CD_am-device/conditional-naming-processgroup/conditional-naming-processgroup.yaml new file mode 100644 index 00000000..ffa7b065 --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-device/conditional-naming-processgroup/conditional-naming-processgroup.yaml @@ -0,0 +1,8 @@ +config: +- CDam-device: template.json + +CDam-device: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: am-device +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_am-device/conditional-naming-processgroup/template.json b/BMW-Dynatrace-config/CD_am-device/conditional-naming-processgroup/template.json new file mode 100644 index 00000000..7c039808 --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-device/conditional-naming-processgroup/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "type": "PROCESS_GROUP" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_am-device/conditional-naming-service/README.md b/BMW-Dynatrace-config/CD_am-device/conditional-naming-service/README.md new file mode 100644 index 00000000..c34ef308 --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-device/conditional-naming-service/README.md @@ -0,0 +1,35 @@ +### Service Naming Rules + +A typical case could be that you access to *Transaction & Services* and you find two services that are exactly the same: +*DataDownloadV1* +*DataDownloadV1* + +If you drilldown into the service and you check in the process group, you may have a PROD and a E2E for each service. + +*Note: if you see that both process group are exactly the same, please contact a Dynatrace expert to create a Process* +*Group detection rule* + +In the case the PG are PROD and E2E, then we need to create a rule that looks like this: + +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {Service:DetectedName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +- tag: Infotainment +- skipDeployment: false +``` + +The rule will get the Service Detected Name (current name) and it will extract (with a regex) the part of the kubernetes namespace after the "-", so -prod or -e2e, resulting in: +*DataDownloadV1 - prod* +*DataDownloadV1 - e2e* + +Now, services will be easy to identify. + +You can create rules based on any property/metadata. Some other placeholder's eamples: +{Service:DatabaseName} - E2E +{Service:WebServiceName} - {ProcessGroup:Kubernetes:microservice} - {ProcessGroup:Kubernetes:environment} +{Service:DetectedName} - {ProcessGroup:KubernetesContainerName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +{Service:DetectedName} - {ProcessGroup:SpringBootProfileName/[^\\-]*$} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_am-device/conditional-naming-service/conditional-naming-service.yaml b/BMW-Dynatrace-config/CD_am-device/conditional-naming-service/conditional-naming-service.yaml new file mode 100644 index 00000000..ffa7b065 --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-device/conditional-naming-service/conditional-naming-service.yaml @@ -0,0 +1,8 @@ +config: +- CDam-device: template.json + +CDam-device: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: am-device +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_am-device/conditional-naming-service/template.json b/BMW-Dynatrace-config/CD_am-device/conditional-naming-service/template.json new file mode 100644 index 00000000..5d4fac56 --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-device/conditional-naming-service/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "type": "SERVICE" +} \ 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 index d41c4c77..5f35e5c1 100644 --- a/BMW-Dynatrace-config/CD_am-device/custom-service-java/README.md +++ b/BMW-Dynatrace-config/CD_am-device/custom-service-java/README.md @@ -1,30 +1,4 @@ -## 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 configure custom services? -## 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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Custom+Services) page to configure your custom services. \ 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 index 92e734fa..1695924c 100644 --- a/BMW-Dynatrace-config/CD_am-device/synthetic-monitor/README.md +++ b/BMW-Dynatrace-config/CD_am-device/synthetic-monitor/README.md @@ -1,37 +1,4 @@ -# Synthetic Configuration -To calculate the Availability KPI, a synthetic must be configured. +### How to configure synthetics? -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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Synthetic+Monitors) page to configure your synthetics. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_am-ecs/conditional-naming-processgroup/README.md b/BMW-Dynatrace-config/CD_am-ecs/conditional-naming-processgroup/README.md new file mode 100644 index 00000000..f94196a5 --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-ecs/conditional-naming-processgroup/README.md @@ -0,0 +1,67 @@ +### Process Group Detection Rules and Naming + +#### Detection Rule or Naming? + +For the explanation, we're using a real example of the Infotainment application: + +!(PGNaming1)[../../../../img/PGNaming1.PNG] + +Before working with your dashboards and alerting profiles, an important task to do when working with Dynatrace is checking +the structure of your applications (process groups). You can do that clicking under *technologies* and filter using your +application Management Zone. + +In the picture above, there are two Process Groups called bon-information-prod. **If you see duplicated process groups like in** +**this case, you MUST follow this guideline** + +Next step would be to open both process groups and compare the metadata. In that way, you can identify if all process instances are +part of the same application or not. An easy way to do that is asking yourself: how many instances of my application do i have? + +If you have 4 instances in total and you're able to see 2 in one PG and other 2 in other PG it means that **they are part of the ** +**same application** + +Another situation could be that checking on the metadata, then you see that are **two different application** and Dynatrace is just naming +the process group in the same way + +*Same application* +- Problem: Dynatrace is creating two different process groups, what transalates in two separated services for the same application. Instead of +seeing all the traffic in one service, you will have it splitted and it will complicate your monitoring +- Solution: create a process group detection rule. Contact Dynatrace Expert + +*Different application* +- Problem: Dynatrace is just naming in the same way applications that are different. +- Solution: This case is less severe, since it can be fixed with a process group naming rule. + + +What about our example? +!(PGNaming2)[../../../../img/PGNaming2.PNG] +!(PGNaming3)[../../../../img/PGNaming3.PNG] + +Based on the feedback of the infotaiment team, each process group is a different application (microservice) and it's visible in the kubernetes container/workload +within the metadata of each Process Group. + +#### How to create a Process Group Detection Rule +1. Open the *conditional-naming-processgroup.yaml* file and create a rule that looks like this: +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName} +- tag: Infotainment +- skipDeployment: false +``` +The result of the rule will be renaming the PG to this: +``` +bon-information-prod ipa +bon-information-prod rsl +``` + +Other possible placeholders that you can use are for example: +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName/[^\\-]*$} +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesFullPodName/buffet-(.*?)-} +{ProcessGroup:DetectedName} - {HostGroup:Name/[^\\_]*$} +{ProcessGroup:KubernetesNamespace} +{ProcessGroup:CommandLineArgs/.*?\\-f\\s\\/www\\/(.*?)\\/generated\\/httpd\\.conf.*?} + +You can combine different ones. Check the (documentation)[link] for more \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_am-ecs/conditional-naming-processgroup/conditional-naming-processgroup.yaml b/BMW-Dynatrace-config/CD_am-ecs/conditional-naming-processgroup/conditional-naming-processgroup.yaml new file mode 100644 index 00000000..e991cf03 --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-ecs/conditional-naming-processgroup/conditional-naming-processgroup.yaml @@ -0,0 +1,8 @@ +config: +- CDam-ecs: template.json + +CDam-ecs: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: am-ecs +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_am-ecs/conditional-naming-processgroup/template.json b/BMW-Dynatrace-config/CD_am-ecs/conditional-naming-processgroup/template.json new file mode 100644 index 00000000..7c039808 --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-ecs/conditional-naming-processgroup/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "type": "PROCESS_GROUP" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_am-ecs/conditional-naming-service/README.md b/BMW-Dynatrace-config/CD_am-ecs/conditional-naming-service/README.md new file mode 100644 index 00000000..c34ef308 --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-ecs/conditional-naming-service/README.md @@ -0,0 +1,35 @@ +### Service Naming Rules + +A typical case could be that you access to *Transaction & Services* and you find two services that are exactly the same: +*DataDownloadV1* +*DataDownloadV1* + +If you drilldown into the service and you check in the process group, you may have a PROD and a E2E for each service. + +*Note: if you see that both process group are exactly the same, please contact a Dynatrace expert to create a Process* +*Group detection rule* + +In the case the PG are PROD and E2E, then we need to create a rule that looks like this: + +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {Service:DetectedName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +- tag: Infotainment +- skipDeployment: false +``` + +The rule will get the Service Detected Name (current name) and it will extract (with a regex) the part of the kubernetes namespace after the "-", so -prod or -e2e, resulting in: +*DataDownloadV1 - prod* +*DataDownloadV1 - e2e* + +Now, services will be easy to identify. + +You can create rules based on any property/metadata. Some other placeholder's eamples: +{Service:DatabaseName} - E2E +{Service:WebServiceName} - {ProcessGroup:Kubernetes:microservice} - {ProcessGroup:Kubernetes:environment} +{Service:DetectedName} - {ProcessGroup:KubernetesContainerName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +{Service:DetectedName} - {ProcessGroup:SpringBootProfileName/[^\\-]*$} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_am-ecs/conditional-naming-service/conditional-naming-service.yaml b/BMW-Dynatrace-config/CD_am-ecs/conditional-naming-service/conditional-naming-service.yaml new file mode 100644 index 00000000..e991cf03 --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-ecs/conditional-naming-service/conditional-naming-service.yaml @@ -0,0 +1,8 @@ +config: +- CDam-ecs: template.json + +CDam-ecs: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: am-ecs +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_am-ecs/conditional-naming-service/template.json b/BMW-Dynatrace-config/CD_am-ecs/conditional-naming-service/template.json new file mode 100644 index 00000000..5d4fac56 --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-ecs/conditional-naming-service/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "type": "SERVICE" +} \ 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 index d41c4c77..5f35e5c1 100644 --- a/BMW-Dynatrace-config/CD_am-ecs/custom-service-java/README.md +++ b/BMW-Dynatrace-config/CD_am-ecs/custom-service-java/README.md @@ -1,30 +1,4 @@ -## 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 configure custom services? -## 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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Custom+Services) page to configure your custom services. \ 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 index 92e734fa..1695924c 100644 --- a/BMW-Dynatrace-config/CD_am-ecs/synthetic-monitor/README.md +++ b/BMW-Dynatrace-config/CD_am-ecs/synthetic-monitor/README.md @@ -1,37 +1,4 @@ -# Synthetic Configuration -To calculate the Availability KPI, a synthetic must be configured. +### How to configure synthetics? -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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Synthetic+Monitors) page to configure your synthetics. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_am-egim/conditional-naming-processgroup/README.md b/BMW-Dynatrace-config/CD_am-egim/conditional-naming-processgroup/README.md new file mode 100644 index 00000000..f94196a5 --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-egim/conditional-naming-processgroup/README.md @@ -0,0 +1,67 @@ +### Process Group Detection Rules and Naming + +#### Detection Rule or Naming? + +For the explanation, we're using a real example of the Infotainment application: + +!(PGNaming1)[../../../../img/PGNaming1.PNG] + +Before working with your dashboards and alerting profiles, an important task to do when working with Dynatrace is checking +the structure of your applications (process groups). You can do that clicking under *technologies* and filter using your +application Management Zone. + +In the picture above, there are two Process Groups called bon-information-prod. **If you see duplicated process groups like in** +**this case, you MUST follow this guideline** + +Next step would be to open both process groups and compare the metadata. In that way, you can identify if all process instances are +part of the same application or not. An easy way to do that is asking yourself: how many instances of my application do i have? + +If you have 4 instances in total and you're able to see 2 in one PG and other 2 in other PG it means that **they are part of the ** +**same application** + +Another situation could be that checking on the metadata, then you see that are **two different application** and Dynatrace is just naming +the process group in the same way + +*Same application* +- Problem: Dynatrace is creating two different process groups, what transalates in two separated services for the same application. Instead of +seeing all the traffic in one service, you will have it splitted and it will complicate your monitoring +- Solution: create a process group detection rule. Contact Dynatrace Expert + +*Different application* +- Problem: Dynatrace is just naming in the same way applications that are different. +- Solution: This case is less severe, since it can be fixed with a process group naming rule. + + +What about our example? +!(PGNaming2)[../../../../img/PGNaming2.PNG] +!(PGNaming3)[../../../../img/PGNaming3.PNG] + +Based on the feedback of the infotaiment team, each process group is a different application (microservice) and it's visible in the kubernetes container/workload +within the metadata of each Process Group. + +#### How to create a Process Group Detection Rule +1. Open the *conditional-naming-processgroup.yaml* file and create a rule that looks like this: +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName} +- tag: Infotainment +- skipDeployment: false +``` +The result of the rule will be renaming the PG to this: +``` +bon-information-prod ipa +bon-information-prod rsl +``` + +Other possible placeholders that you can use are for example: +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName/[^\\-]*$} +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesFullPodName/buffet-(.*?)-} +{ProcessGroup:DetectedName} - {HostGroup:Name/[^\\_]*$} +{ProcessGroup:KubernetesNamespace} +{ProcessGroup:CommandLineArgs/.*?\\-f\\s\\/www\\/(.*?)\\/generated\\/httpd\\.conf.*?} + +You can combine different ones. Check the (documentation)[link] for more \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_am-egim/conditional-naming-processgroup/conditional-naming-processgroup.yaml b/BMW-Dynatrace-config/CD_am-egim/conditional-naming-processgroup/conditional-naming-processgroup.yaml new file mode 100644 index 00000000..b2ae78dc --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-egim/conditional-naming-processgroup/conditional-naming-processgroup.yaml @@ -0,0 +1,8 @@ +config: +- CDam-egim: template.json + +CDam-egim: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: am-egim +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_am-egim/conditional-naming-processgroup/template.json b/BMW-Dynatrace-config/CD_am-egim/conditional-naming-processgroup/template.json new file mode 100644 index 00000000..7c039808 --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-egim/conditional-naming-processgroup/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "type": "PROCESS_GROUP" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_am-egim/conditional-naming-service/README.md b/BMW-Dynatrace-config/CD_am-egim/conditional-naming-service/README.md new file mode 100644 index 00000000..c34ef308 --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-egim/conditional-naming-service/README.md @@ -0,0 +1,35 @@ +### Service Naming Rules + +A typical case could be that you access to *Transaction & Services* and you find two services that are exactly the same: +*DataDownloadV1* +*DataDownloadV1* + +If you drilldown into the service and you check in the process group, you may have a PROD and a E2E for each service. + +*Note: if you see that both process group are exactly the same, please contact a Dynatrace expert to create a Process* +*Group detection rule* + +In the case the PG are PROD and E2E, then we need to create a rule that looks like this: + +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {Service:DetectedName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +- tag: Infotainment +- skipDeployment: false +``` + +The rule will get the Service Detected Name (current name) and it will extract (with a regex) the part of the kubernetes namespace after the "-", so -prod or -e2e, resulting in: +*DataDownloadV1 - prod* +*DataDownloadV1 - e2e* + +Now, services will be easy to identify. + +You can create rules based on any property/metadata. Some other placeholder's eamples: +{Service:DatabaseName} - E2E +{Service:WebServiceName} - {ProcessGroup:Kubernetes:microservice} - {ProcessGroup:Kubernetes:environment} +{Service:DetectedName} - {ProcessGroup:KubernetesContainerName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +{Service:DetectedName} - {ProcessGroup:SpringBootProfileName/[^\\-]*$} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_am-egim/conditional-naming-service/conditional-naming-service.yaml b/BMW-Dynatrace-config/CD_am-egim/conditional-naming-service/conditional-naming-service.yaml new file mode 100644 index 00000000..b2ae78dc --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-egim/conditional-naming-service/conditional-naming-service.yaml @@ -0,0 +1,8 @@ +config: +- CDam-egim: template.json + +CDam-egim: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: am-egim +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_am-egim/conditional-naming-service/template.json b/BMW-Dynatrace-config/CD_am-egim/conditional-naming-service/template.json new file mode 100644 index 00000000..5d4fac56 --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-egim/conditional-naming-service/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "type": "SERVICE" +} \ 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 index d41c4c77..5f35e5c1 100644 --- a/BMW-Dynatrace-config/CD_am-egim/custom-service-java/README.md +++ b/BMW-Dynatrace-config/CD_am-egim/custom-service-java/README.md @@ -1,30 +1,4 @@ -## 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 configure custom services? -## 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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Custom+Services) page to configure your custom services. \ 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 index 92e734fa..1695924c 100644 --- a/BMW-Dynatrace-config/CD_am-egim/synthetic-monitor/README.md +++ b/BMW-Dynatrace-config/CD_am-egim/synthetic-monitor/README.md @@ -1,37 +1,4 @@ -# Synthetic Configuration -To calculate the Availability KPI, a synthetic must be configured. +### How to configure synthetics? -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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Synthetic+Monitors) page to configure your synthetics. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_am-esim-ui/conditional-naming-processgroup/README.md b/BMW-Dynatrace-config/CD_am-esim-ui/conditional-naming-processgroup/README.md new file mode 100644 index 00000000..f94196a5 --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-esim-ui/conditional-naming-processgroup/README.md @@ -0,0 +1,67 @@ +### Process Group Detection Rules and Naming + +#### Detection Rule or Naming? + +For the explanation, we're using a real example of the Infotainment application: + +!(PGNaming1)[../../../../img/PGNaming1.PNG] + +Before working with your dashboards and alerting profiles, an important task to do when working with Dynatrace is checking +the structure of your applications (process groups). You can do that clicking under *technologies* and filter using your +application Management Zone. + +In the picture above, there are two Process Groups called bon-information-prod. **If you see duplicated process groups like in** +**this case, you MUST follow this guideline** + +Next step would be to open both process groups and compare the metadata. In that way, you can identify if all process instances are +part of the same application or not. An easy way to do that is asking yourself: how many instances of my application do i have? + +If you have 4 instances in total and you're able to see 2 in one PG and other 2 in other PG it means that **they are part of the ** +**same application** + +Another situation could be that checking on the metadata, then you see that are **two different application** and Dynatrace is just naming +the process group in the same way + +*Same application* +- Problem: Dynatrace is creating two different process groups, what transalates in two separated services for the same application. Instead of +seeing all the traffic in one service, you will have it splitted and it will complicate your monitoring +- Solution: create a process group detection rule. Contact Dynatrace Expert + +*Different application* +- Problem: Dynatrace is just naming in the same way applications that are different. +- Solution: This case is less severe, since it can be fixed with a process group naming rule. + + +What about our example? +!(PGNaming2)[../../../../img/PGNaming2.PNG] +!(PGNaming3)[../../../../img/PGNaming3.PNG] + +Based on the feedback of the infotaiment team, each process group is a different application (microservice) and it's visible in the kubernetes container/workload +within the metadata of each Process Group. + +#### How to create a Process Group Detection Rule +1. Open the *conditional-naming-processgroup.yaml* file and create a rule that looks like this: +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName} +- tag: Infotainment +- skipDeployment: false +``` +The result of the rule will be renaming the PG to this: +``` +bon-information-prod ipa +bon-information-prod rsl +``` + +Other possible placeholders that you can use are for example: +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName/[^\\-]*$} +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesFullPodName/buffet-(.*?)-} +{ProcessGroup:DetectedName} - {HostGroup:Name/[^\\_]*$} +{ProcessGroup:KubernetesNamespace} +{ProcessGroup:CommandLineArgs/.*?\\-f\\s\\/www\\/(.*?)\\/generated\\/httpd\\.conf.*?} + +You can combine different ones. Check the (documentation)[link] for more \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_am-esim-ui/conditional-naming-processgroup/conditional-naming-processgroup.yaml b/BMW-Dynatrace-config/CD_am-esim-ui/conditional-naming-processgroup/conditional-naming-processgroup.yaml new file mode 100644 index 00000000..d97b25b7 --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-esim-ui/conditional-naming-processgroup/conditional-naming-processgroup.yaml @@ -0,0 +1,8 @@ +config: +- CDam-esim-ui: template.json + +CDam-esim-ui: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: am-esim-ui +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_am-esim-ui/conditional-naming-processgroup/template.json b/BMW-Dynatrace-config/CD_am-esim-ui/conditional-naming-processgroup/template.json new file mode 100644 index 00000000..7c039808 --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-esim-ui/conditional-naming-processgroup/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "type": "PROCESS_GROUP" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_am-esim-ui/conditional-naming-service/README.md b/BMW-Dynatrace-config/CD_am-esim-ui/conditional-naming-service/README.md new file mode 100644 index 00000000..c34ef308 --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-esim-ui/conditional-naming-service/README.md @@ -0,0 +1,35 @@ +### Service Naming Rules + +A typical case could be that you access to *Transaction & Services* and you find two services that are exactly the same: +*DataDownloadV1* +*DataDownloadV1* + +If you drilldown into the service and you check in the process group, you may have a PROD and a E2E for each service. + +*Note: if you see that both process group are exactly the same, please contact a Dynatrace expert to create a Process* +*Group detection rule* + +In the case the PG are PROD and E2E, then we need to create a rule that looks like this: + +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {Service:DetectedName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +- tag: Infotainment +- skipDeployment: false +``` + +The rule will get the Service Detected Name (current name) and it will extract (with a regex) the part of the kubernetes namespace after the "-", so -prod or -e2e, resulting in: +*DataDownloadV1 - prod* +*DataDownloadV1 - e2e* + +Now, services will be easy to identify. + +You can create rules based on any property/metadata. Some other placeholder's eamples: +{Service:DatabaseName} - E2E +{Service:WebServiceName} - {ProcessGroup:Kubernetes:microservice} - {ProcessGroup:Kubernetes:environment} +{Service:DetectedName} - {ProcessGroup:KubernetesContainerName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +{Service:DetectedName} - {ProcessGroup:SpringBootProfileName/[^\\-]*$} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_am-esim-ui/conditional-naming-service/conditional-naming-service.yaml b/BMW-Dynatrace-config/CD_am-esim-ui/conditional-naming-service/conditional-naming-service.yaml new file mode 100644 index 00000000..d97b25b7 --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-esim-ui/conditional-naming-service/conditional-naming-service.yaml @@ -0,0 +1,8 @@ +config: +- CDam-esim-ui: template.json + +CDam-esim-ui: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: am-esim-ui +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_am-esim-ui/conditional-naming-service/template.json b/BMW-Dynatrace-config/CD_am-esim-ui/conditional-naming-service/template.json new file mode 100644 index 00000000..5d4fac56 --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-esim-ui/conditional-naming-service/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "type": "SERVICE" +} \ 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 index d41c4c77..5f35e5c1 100644 --- 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 @@ -1,30 +1,4 @@ -## 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 configure custom services? -## 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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Custom+Services) page to configure your custom services. \ 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 index 92e734fa..1695924c 100644 --- a/BMW-Dynatrace-config/CD_am-esim-ui/synthetic-monitor/README.md +++ b/BMW-Dynatrace-config/CD_am-esim-ui/synthetic-monitor/README.md @@ -1,37 +1,4 @@ -# Synthetic Configuration -To calculate the Availability KPI, a synthetic must be configured. +### How to configure synthetics? -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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Synthetic+Monitors) page to configure your synthetics. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_am-lmcs/conditional-naming-processgroup/README.md b/BMW-Dynatrace-config/CD_am-lmcs/conditional-naming-processgroup/README.md new file mode 100644 index 00000000..f94196a5 --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-lmcs/conditional-naming-processgroup/README.md @@ -0,0 +1,67 @@ +### Process Group Detection Rules and Naming + +#### Detection Rule or Naming? + +For the explanation, we're using a real example of the Infotainment application: + +!(PGNaming1)[../../../../img/PGNaming1.PNG] + +Before working with your dashboards and alerting profiles, an important task to do when working with Dynatrace is checking +the structure of your applications (process groups). You can do that clicking under *technologies* and filter using your +application Management Zone. + +In the picture above, there are two Process Groups called bon-information-prod. **If you see duplicated process groups like in** +**this case, you MUST follow this guideline** + +Next step would be to open both process groups and compare the metadata. In that way, you can identify if all process instances are +part of the same application or not. An easy way to do that is asking yourself: how many instances of my application do i have? + +If you have 4 instances in total and you're able to see 2 in one PG and other 2 in other PG it means that **they are part of the ** +**same application** + +Another situation could be that checking on the metadata, then you see that are **two different application** and Dynatrace is just naming +the process group in the same way + +*Same application* +- Problem: Dynatrace is creating two different process groups, what transalates in two separated services for the same application. Instead of +seeing all the traffic in one service, you will have it splitted and it will complicate your monitoring +- Solution: create a process group detection rule. Contact Dynatrace Expert + +*Different application* +- Problem: Dynatrace is just naming in the same way applications that are different. +- Solution: This case is less severe, since it can be fixed with a process group naming rule. + + +What about our example? +!(PGNaming2)[../../../../img/PGNaming2.PNG] +!(PGNaming3)[../../../../img/PGNaming3.PNG] + +Based on the feedback of the infotaiment team, each process group is a different application (microservice) and it's visible in the kubernetes container/workload +within the metadata of each Process Group. + +#### How to create a Process Group Detection Rule +1. Open the *conditional-naming-processgroup.yaml* file and create a rule that looks like this: +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName} +- tag: Infotainment +- skipDeployment: false +``` +The result of the rule will be renaming the PG to this: +``` +bon-information-prod ipa +bon-information-prod rsl +``` + +Other possible placeholders that you can use are for example: +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName/[^\\-]*$} +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesFullPodName/buffet-(.*?)-} +{ProcessGroup:DetectedName} - {HostGroup:Name/[^\\_]*$} +{ProcessGroup:KubernetesNamespace} +{ProcessGroup:CommandLineArgs/.*?\\-f\\s\\/www\\/(.*?)\\/generated\\/httpd\\.conf.*?} + +You can combine different ones. Check the (documentation)[link] for more \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_am-lmcs/conditional-naming-processgroup/conditional-naming-processgroup.yaml b/BMW-Dynatrace-config/CD_am-lmcs/conditional-naming-processgroup/conditional-naming-processgroup.yaml new file mode 100644 index 00000000..191d5730 --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-lmcs/conditional-naming-processgroup/conditional-naming-processgroup.yaml @@ -0,0 +1,8 @@ +config: +- CDam-lmcs: template.json + +CDam-lmcs: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: am-lmcs +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_am-lmcs/conditional-naming-processgroup/template.json b/BMW-Dynatrace-config/CD_am-lmcs/conditional-naming-processgroup/template.json new file mode 100644 index 00000000..7c039808 --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-lmcs/conditional-naming-processgroup/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "type": "PROCESS_GROUP" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_am-lmcs/conditional-naming-service/README.md b/BMW-Dynatrace-config/CD_am-lmcs/conditional-naming-service/README.md new file mode 100644 index 00000000..c34ef308 --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-lmcs/conditional-naming-service/README.md @@ -0,0 +1,35 @@ +### Service Naming Rules + +A typical case could be that you access to *Transaction & Services* and you find two services that are exactly the same: +*DataDownloadV1* +*DataDownloadV1* + +If you drilldown into the service and you check in the process group, you may have a PROD and a E2E for each service. + +*Note: if you see that both process group are exactly the same, please contact a Dynatrace expert to create a Process* +*Group detection rule* + +In the case the PG are PROD and E2E, then we need to create a rule that looks like this: + +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {Service:DetectedName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +- tag: Infotainment +- skipDeployment: false +``` + +The rule will get the Service Detected Name (current name) and it will extract (with a regex) the part of the kubernetes namespace after the "-", so -prod or -e2e, resulting in: +*DataDownloadV1 - prod* +*DataDownloadV1 - e2e* + +Now, services will be easy to identify. + +You can create rules based on any property/metadata. Some other placeholder's eamples: +{Service:DatabaseName} - E2E +{Service:WebServiceName} - {ProcessGroup:Kubernetes:microservice} - {ProcessGroup:Kubernetes:environment} +{Service:DetectedName} - {ProcessGroup:KubernetesContainerName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +{Service:DetectedName} - {ProcessGroup:SpringBootProfileName/[^\\-]*$} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_am-lmcs/conditional-naming-service/conditional-naming-service.yaml b/BMW-Dynatrace-config/CD_am-lmcs/conditional-naming-service/conditional-naming-service.yaml new file mode 100644 index 00000000..191d5730 --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-lmcs/conditional-naming-service/conditional-naming-service.yaml @@ -0,0 +1,8 @@ +config: +- CDam-lmcs: template.json + +CDam-lmcs: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: am-lmcs +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_am-lmcs/conditional-naming-service/template.json b/BMW-Dynatrace-config/CD_am-lmcs/conditional-naming-service/template.json new file mode 100644 index 00000000..5d4fac56 --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-lmcs/conditional-naming-service/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "type": "SERVICE" +} \ 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 index d41c4c77..5f35e5c1 100644 --- a/BMW-Dynatrace-config/CD_am-lmcs/custom-service-java/README.md +++ b/BMW-Dynatrace-config/CD_am-lmcs/custom-service-java/README.md @@ -1,30 +1,4 @@ -## 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 configure custom services? -## 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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Custom+Services) page to configure your custom services. \ 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 index 92e734fa..1695924c 100644 --- a/BMW-Dynatrace-config/CD_am-lmcs/synthetic-monitor/README.md +++ b/BMW-Dynatrace-config/CD_am-lmcs/synthetic-monitor/README.md @@ -1,37 +1,4 @@ -# Synthetic Configuration -To calculate the Availability KPI, a synthetic must be configured. +### How to configure synthetics? -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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Synthetic+Monitors) page to configure your synthetics. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_am-mno-manager/conditional-naming-processgroup/README.md b/BMW-Dynatrace-config/CD_am-mno-manager/conditional-naming-processgroup/README.md new file mode 100644 index 00000000..f94196a5 --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-mno-manager/conditional-naming-processgroup/README.md @@ -0,0 +1,67 @@ +### Process Group Detection Rules and Naming + +#### Detection Rule or Naming? + +For the explanation, we're using a real example of the Infotainment application: + +!(PGNaming1)[../../../../img/PGNaming1.PNG] + +Before working with your dashboards and alerting profiles, an important task to do when working with Dynatrace is checking +the structure of your applications (process groups). You can do that clicking under *technologies* and filter using your +application Management Zone. + +In the picture above, there are two Process Groups called bon-information-prod. **If you see duplicated process groups like in** +**this case, you MUST follow this guideline** + +Next step would be to open both process groups and compare the metadata. In that way, you can identify if all process instances are +part of the same application or not. An easy way to do that is asking yourself: how many instances of my application do i have? + +If you have 4 instances in total and you're able to see 2 in one PG and other 2 in other PG it means that **they are part of the ** +**same application** + +Another situation could be that checking on the metadata, then you see that are **two different application** and Dynatrace is just naming +the process group in the same way + +*Same application* +- Problem: Dynatrace is creating two different process groups, what transalates in two separated services for the same application. Instead of +seeing all the traffic in one service, you will have it splitted and it will complicate your monitoring +- Solution: create a process group detection rule. Contact Dynatrace Expert + +*Different application* +- Problem: Dynatrace is just naming in the same way applications that are different. +- Solution: This case is less severe, since it can be fixed with a process group naming rule. + + +What about our example? +!(PGNaming2)[../../../../img/PGNaming2.PNG] +!(PGNaming3)[../../../../img/PGNaming3.PNG] + +Based on the feedback of the infotaiment team, each process group is a different application (microservice) and it's visible in the kubernetes container/workload +within the metadata of each Process Group. + +#### How to create a Process Group Detection Rule +1. Open the *conditional-naming-processgroup.yaml* file and create a rule that looks like this: +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName} +- tag: Infotainment +- skipDeployment: false +``` +The result of the rule will be renaming the PG to this: +``` +bon-information-prod ipa +bon-information-prod rsl +``` + +Other possible placeholders that you can use are for example: +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName/[^\\-]*$} +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesFullPodName/buffet-(.*?)-} +{ProcessGroup:DetectedName} - {HostGroup:Name/[^\\_]*$} +{ProcessGroup:KubernetesNamespace} +{ProcessGroup:CommandLineArgs/.*?\\-f\\s\\/www\\/(.*?)\\/generated\\/httpd\\.conf.*?} + +You can combine different ones. Check the (documentation)[link] for more \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_am-mno-manager/conditional-naming-processgroup/conditional-naming-processgroup.yaml b/BMW-Dynatrace-config/CD_am-mno-manager/conditional-naming-processgroup/conditional-naming-processgroup.yaml new file mode 100644 index 00000000..cdbf7bbb --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-mno-manager/conditional-naming-processgroup/conditional-naming-processgroup.yaml @@ -0,0 +1,8 @@ +config: +- CDam-mno-manager: template.json + +CDam-mno-manager: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: am-mno-manager +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_am-mno-manager/conditional-naming-processgroup/template.json b/BMW-Dynatrace-config/CD_am-mno-manager/conditional-naming-processgroup/template.json new file mode 100644 index 00000000..7c039808 --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-mno-manager/conditional-naming-processgroup/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "type": "PROCESS_GROUP" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_am-mno-manager/conditional-naming-service/README.md b/BMW-Dynatrace-config/CD_am-mno-manager/conditional-naming-service/README.md new file mode 100644 index 00000000..c34ef308 --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-mno-manager/conditional-naming-service/README.md @@ -0,0 +1,35 @@ +### Service Naming Rules + +A typical case could be that you access to *Transaction & Services* and you find two services that are exactly the same: +*DataDownloadV1* +*DataDownloadV1* + +If you drilldown into the service and you check in the process group, you may have a PROD and a E2E for each service. + +*Note: if you see that both process group are exactly the same, please contact a Dynatrace expert to create a Process* +*Group detection rule* + +In the case the PG are PROD and E2E, then we need to create a rule that looks like this: + +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {Service:DetectedName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +- tag: Infotainment +- skipDeployment: false +``` + +The rule will get the Service Detected Name (current name) and it will extract (with a regex) the part of the kubernetes namespace after the "-", so -prod or -e2e, resulting in: +*DataDownloadV1 - prod* +*DataDownloadV1 - e2e* + +Now, services will be easy to identify. + +You can create rules based on any property/metadata. Some other placeholder's eamples: +{Service:DatabaseName} - E2E +{Service:WebServiceName} - {ProcessGroup:Kubernetes:microservice} - {ProcessGroup:Kubernetes:environment} +{Service:DetectedName} - {ProcessGroup:KubernetesContainerName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +{Service:DetectedName} - {ProcessGroup:SpringBootProfileName/[^\\-]*$} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_am-mno-manager/conditional-naming-service/conditional-naming-service.yaml b/BMW-Dynatrace-config/CD_am-mno-manager/conditional-naming-service/conditional-naming-service.yaml new file mode 100644 index 00000000..cdbf7bbb --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-mno-manager/conditional-naming-service/conditional-naming-service.yaml @@ -0,0 +1,8 @@ +config: +- CDam-mno-manager: template.json + +CDam-mno-manager: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: am-mno-manager +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_am-mno-manager/conditional-naming-service/template.json b/BMW-Dynatrace-config/CD_am-mno-manager/conditional-naming-service/template.json new file mode 100644 index 00000000..5d4fac56 --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-mno-manager/conditional-naming-service/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "type": "SERVICE" +} \ 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 index d41c4c77..5f35e5c1 100644 --- 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 @@ -1,30 +1,4 @@ -## 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 configure custom services? -## 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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Custom+Services) page to configure your custom services. \ 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 index 92e734fa..1695924c 100644 --- a/BMW-Dynatrace-config/CD_am-mno-manager/synthetic-monitor/README.md +++ b/BMW-Dynatrace-config/CD_am-mno-manager/synthetic-monitor/README.md @@ -1,37 +1,4 @@ -# Synthetic Configuration -To calculate the Availability KPI, a synthetic must be configured. +### How to configure synthetics? -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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Synthetic+Monitors) page to configure your synthetics. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_am-proxy/conditional-naming-processgroup/README.md b/BMW-Dynatrace-config/CD_am-proxy/conditional-naming-processgroup/README.md new file mode 100644 index 00000000..f94196a5 --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-proxy/conditional-naming-processgroup/README.md @@ -0,0 +1,67 @@ +### Process Group Detection Rules and Naming + +#### Detection Rule or Naming? + +For the explanation, we're using a real example of the Infotainment application: + +!(PGNaming1)[../../../../img/PGNaming1.PNG] + +Before working with your dashboards and alerting profiles, an important task to do when working with Dynatrace is checking +the structure of your applications (process groups). You can do that clicking under *technologies* and filter using your +application Management Zone. + +In the picture above, there are two Process Groups called bon-information-prod. **If you see duplicated process groups like in** +**this case, you MUST follow this guideline** + +Next step would be to open both process groups and compare the metadata. In that way, you can identify if all process instances are +part of the same application or not. An easy way to do that is asking yourself: how many instances of my application do i have? + +If you have 4 instances in total and you're able to see 2 in one PG and other 2 in other PG it means that **they are part of the ** +**same application** + +Another situation could be that checking on the metadata, then you see that are **two different application** and Dynatrace is just naming +the process group in the same way + +*Same application* +- Problem: Dynatrace is creating two different process groups, what transalates in two separated services for the same application. Instead of +seeing all the traffic in one service, you will have it splitted and it will complicate your monitoring +- Solution: create a process group detection rule. Contact Dynatrace Expert + +*Different application* +- Problem: Dynatrace is just naming in the same way applications that are different. +- Solution: This case is less severe, since it can be fixed with a process group naming rule. + + +What about our example? +!(PGNaming2)[../../../../img/PGNaming2.PNG] +!(PGNaming3)[../../../../img/PGNaming3.PNG] + +Based on the feedback of the infotaiment team, each process group is a different application (microservice) and it's visible in the kubernetes container/workload +within the metadata of each Process Group. + +#### How to create a Process Group Detection Rule +1. Open the *conditional-naming-processgroup.yaml* file and create a rule that looks like this: +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName} +- tag: Infotainment +- skipDeployment: false +``` +The result of the rule will be renaming the PG to this: +``` +bon-information-prod ipa +bon-information-prod rsl +``` + +Other possible placeholders that you can use are for example: +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName/[^\\-]*$} +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesFullPodName/buffet-(.*?)-} +{ProcessGroup:DetectedName} - {HostGroup:Name/[^\\_]*$} +{ProcessGroup:KubernetesNamespace} +{ProcessGroup:CommandLineArgs/.*?\\-f\\s\\/www\\/(.*?)\\/generated\\/httpd\\.conf.*?} + +You can combine different ones. Check the (documentation)[link] for more \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_am-proxy/conditional-naming-processgroup/conditional-naming-processgroup.yaml b/BMW-Dynatrace-config/CD_am-proxy/conditional-naming-processgroup/conditional-naming-processgroup.yaml new file mode 100644 index 00000000..488af1cc --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-proxy/conditional-naming-processgroup/conditional-naming-processgroup.yaml @@ -0,0 +1,8 @@ +config: +- CDam-proxy: template.json + +CDam-proxy: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: am-proxy +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_am-proxy/conditional-naming-processgroup/template.json b/BMW-Dynatrace-config/CD_am-proxy/conditional-naming-processgroup/template.json new file mode 100644 index 00000000..7c039808 --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-proxy/conditional-naming-processgroup/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "type": "PROCESS_GROUP" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_am-proxy/conditional-naming-service/README.md b/BMW-Dynatrace-config/CD_am-proxy/conditional-naming-service/README.md new file mode 100644 index 00000000..c34ef308 --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-proxy/conditional-naming-service/README.md @@ -0,0 +1,35 @@ +### Service Naming Rules + +A typical case could be that you access to *Transaction & Services* and you find two services that are exactly the same: +*DataDownloadV1* +*DataDownloadV1* + +If you drilldown into the service and you check in the process group, you may have a PROD and a E2E for each service. + +*Note: if you see that both process group are exactly the same, please contact a Dynatrace expert to create a Process* +*Group detection rule* + +In the case the PG are PROD and E2E, then we need to create a rule that looks like this: + +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {Service:DetectedName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +- tag: Infotainment +- skipDeployment: false +``` + +The rule will get the Service Detected Name (current name) and it will extract (with a regex) the part of the kubernetes namespace after the "-", so -prod or -e2e, resulting in: +*DataDownloadV1 - prod* +*DataDownloadV1 - e2e* + +Now, services will be easy to identify. + +You can create rules based on any property/metadata. Some other placeholder's eamples: +{Service:DatabaseName} - E2E +{Service:WebServiceName} - {ProcessGroup:Kubernetes:microservice} - {ProcessGroup:Kubernetes:environment} +{Service:DetectedName} - {ProcessGroup:KubernetesContainerName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +{Service:DetectedName} - {ProcessGroup:SpringBootProfileName/[^\\-]*$} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_am-proxy/conditional-naming-service/conditional-naming-service.yaml b/BMW-Dynatrace-config/CD_am-proxy/conditional-naming-service/conditional-naming-service.yaml new file mode 100644 index 00000000..488af1cc --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-proxy/conditional-naming-service/conditional-naming-service.yaml @@ -0,0 +1,8 @@ +config: +- CDam-proxy: template.json + +CDam-proxy: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: am-proxy +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_am-proxy/conditional-naming-service/template.json b/BMW-Dynatrace-config/CD_am-proxy/conditional-naming-service/template.json new file mode 100644 index 00000000..5d4fac56 --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-proxy/conditional-naming-service/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "type": "SERVICE" +} \ 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 index d41c4c77..5f35e5c1 100644 --- a/BMW-Dynatrace-config/CD_am-proxy/custom-service-java/README.md +++ b/BMW-Dynatrace-config/CD_am-proxy/custom-service-java/README.md @@ -1,30 +1,4 @@ -## 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 configure custom services? -## 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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Custom+Services) page to configure your custom services. \ 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 index 92e734fa..1695924c 100644 --- a/BMW-Dynatrace-config/CD_am-proxy/synthetic-monitor/README.md +++ b/BMW-Dynatrace-config/CD_am-proxy/synthetic-monitor/README.md @@ -1,37 +1,4 @@ -# Synthetic Configuration -To calculate the Availability KPI, a synthetic must be configured. +### How to configure synthetics? -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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Synthetic+Monitors) page to configure your synthetics. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_am-store/conditional-naming-processgroup/README.md b/BMW-Dynatrace-config/CD_am-store/conditional-naming-processgroup/README.md new file mode 100644 index 00000000..f94196a5 --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-store/conditional-naming-processgroup/README.md @@ -0,0 +1,67 @@ +### Process Group Detection Rules and Naming + +#### Detection Rule or Naming? + +For the explanation, we're using a real example of the Infotainment application: + +!(PGNaming1)[../../../../img/PGNaming1.PNG] + +Before working with your dashboards and alerting profiles, an important task to do when working with Dynatrace is checking +the structure of your applications (process groups). You can do that clicking under *technologies* and filter using your +application Management Zone. + +In the picture above, there are two Process Groups called bon-information-prod. **If you see duplicated process groups like in** +**this case, you MUST follow this guideline** + +Next step would be to open both process groups and compare the metadata. In that way, you can identify if all process instances are +part of the same application or not. An easy way to do that is asking yourself: how many instances of my application do i have? + +If you have 4 instances in total and you're able to see 2 in one PG and other 2 in other PG it means that **they are part of the ** +**same application** + +Another situation could be that checking on the metadata, then you see that are **two different application** and Dynatrace is just naming +the process group in the same way + +*Same application* +- Problem: Dynatrace is creating two different process groups, what transalates in two separated services for the same application. Instead of +seeing all the traffic in one service, you will have it splitted and it will complicate your monitoring +- Solution: create a process group detection rule. Contact Dynatrace Expert + +*Different application* +- Problem: Dynatrace is just naming in the same way applications that are different. +- Solution: This case is less severe, since it can be fixed with a process group naming rule. + + +What about our example? +!(PGNaming2)[../../../../img/PGNaming2.PNG] +!(PGNaming3)[../../../../img/PGNaming3.PNG] + +Based on the feedback of the infotaiment team, each process group is a different application (microservice) and it's visible in the kubernetes container/workload +within the metadata of each Process Group. + +#### How to create a Process Group Detection Rule +1. Open the *conditional-naming-processgroup.yaml* file and create a rule that looks like this: +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName} +- tag: Infotainment +- skipDeployment: false +``` +The result of the rule will be renaming the PG to this: +``` +bon-information-prod ipa +bon-information-prod rsl +``` + +Other possible placeholders that you can use are for example: +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName/[^\\-]*$} +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesFullPodName/buffet-(.*?)-} +{ProcessGroup:DetectedName} - {HostGroup:Name/[^\\_]*$} +{ProcessGroup:KubernetesNamespace} +{ProcessGroup:CommandLineArgs/.*?\\-f\\s\\/www\\/(.*?)\\/generated\\/httpd\\.conf.*?} + +You can combine different ones. Check the (documentation)[link] for more \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_am-store/conditional-naming-processgroup/conditional-naming-processgroup.yaml b/BMW-Dynatrace-config/CD_am-store/conditional-naming-processgroup/conditional-naming-processgroup.yaml new file mode 100644 index 00000000..b44d6f8d --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-store/conditional-naming-processgroup/conditional-naming-processgroup.yaml @@ -0,0 +1,8 @@ +config: +- CDam-store: template.json + +CDam-store: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: am-store +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_am-store/conditional-naming-processgroup/template.json b/BMW-Dynatrace-config/CD_am-store/conditional-naming-processgroup/template.json new file mode 100644 index 00000000..7c039808 --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-store/conditional-naming-processgroup/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "type": "PROCESS_GROUP" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_am-store/conditional-naming-service/README.md b/BMW-Dynatrace-config/CD_am-store/conditional-naming-service/README.md new file mode 100644 index 00000000..c34ef308 --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-store/conditional-naming-service/README.md @@ -0,0 +1,35 @@ +### Service Naming Rules + +A typical case could be that you access to *Transaction & Services* and you find two services that are exactly the same: +*DataDownloadV1* +*DataDownloadV1* + +If you drilldown into the service and you check in the process group, you may have a PROD and a E2E for each service. + +*Note: if you see that both process group are exactly the same, please contact a Dynatrace expert to create a Process* +*Group detection rule* + +In the case the PG are PROD and E2E, then we need to create a rule that looks like this: + +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {Service:DetectedName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +- tag: Infotainment +- skipDeployment: false +``` + +The rule will get the Service Detected Name (current name) and it will extract (with a regex) the part of the kubernetes namespace after the "-", so -prod or -e2e, resulting in: +*DataDownloadV1 - prod* +*DataDownloadV1 - e2e* + +Now, services will be easy to identify. + +You can create rules based on any property/metadata. Some other placeholder's eamples: +{Service:DatabaseName} - E2E +{Service:WebServiceName} - {ProcessGroup:Kubernetes:microservice} - {ProcessGroup:Kubernetes:environment} +{Service:DetectedName} - {ProcessGroup:KubernetesContainerName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +{Service:DetectedName} - {ProcessGroup:SpringBootProfileName/[^\\-]*$} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_am-store/conditional-naming-service/conditional-naming-service.yaml b/BMW-Dynatrace-config/CD_am-store/conditional-naming-service/conditional-naming-service.yaml new file mode 100644 index 00000000..b44d6f8d --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-store/conditional-naming-service/conditional-naming-service.yaml @@ -0,0 +1,8 @@ +config: +- CDam-store: template.json + +CDam-store: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: am-store +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_am-store/conditional-naming-service/template.json b/BMW-Dynatrace-config/CD_am-store/conditional-naming-service/template.json new file mode 100644 index 00000000..5d4fac56 --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-store/conditional-naming-service/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "type": "SERVICE" +} \ 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 index d41c4c77..5f35e5c1 100644 --- a/BMW-Dynatrace-config/CD_am-store/custom-service-java/README.md +++ b/BMW-Dynatrace-config/CD_am-store/custom-service-java/README.md @@ -1,30 +1,4 @@ -## 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 configure custom services? -## 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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Custom+Services) page to configure your custom services. \ 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 index 92e734fa..1695924c 100644 --- a/BMW-Dynatrace-config/CD_am-store/synthetic-monitor/README.md +++ b/BMW-Dynatrace-config/CD_am-store/synthetic-monitor/README.md @@ -1,37 +1,4 @@ -# Synthetic Configuration -To calculate the Availability KPI, a synthetic must be configured. +### How to configure synthetics? -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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Synthetic+Monitors) page to configure your synthetics. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_am-svms/conditional-naming-processgroup/README.md b/BMW-Dynatrace-config/CD_am-svms/conditional-naming-processgroup/README.md new file mode 100644 index 00000000..f94196a5 --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-svms/conditional-naming-processgroup/README.md @@ -0,0 +1,67 @@ +### Process Group Detection Rules and Naming + +#### Detection Rule or Naming? + +For the explanation, we're using a real example of the Infotainment application: + +!(PGNaming1)[../../../../img/PGNaming1.PNG] + +Before working with your dashboards and alerting profiles, an important task to do when working with Dynatrace is checking +the structure of your applications (process groups). You can do that clicking under *technologies* and filter using your +application Management Zone. + +In the picture above, there are two Process Groups called bon-information-prod. **If you see duplicated process groups like in** +**this case, you MUST follow this guideline** + +Next step would be to open both process groups and compare the metadata. In that way, you can identify if all process instances are +part of the same application or not. An easy way to do that is asking yourself: how many instances of my application do i have? + +If you have 4 instances in total and you're able to see 2 in one PG and other 2 in other PG it means that **they are part of the ** +**same application** + +Another situation could be that checking on the metadata, then you see that are **two different application** and Dynatrace is just naming +the process group in the same way + +*Same application* +- Problem: Dynatrace is creating two different process groups, what transalates in two separated services for the same application. Instead of +seeing all the traffic in one service, you will have it splitted and it will complicate your monitoring +- Solution: create a process group detection rule. Contact Dynatrace Expert + +*Different application* +- Problem: Dynatrace is just naming in the same way applications that are different. +- Solution: This case is less severe, since it can be fixed with a process group naming rule. + + +What about our example? +!(PGNaming2)[../../../../img/PGNaming2.PNG] +!(PGNaming3)[../../../../img/PGNaming3.PNG] + +Based on the feedback of the infotaiment team, each process group is a different application (microservice) and it's visible in the kubernetes container/workload +within the metadata of each Process Group. + +#### How to create a Process Group Detection Rule +1. Open the *conditional-naming-processgroup.yaml* file and create a rule that looks like this: +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName} +- tag: Infotainment +- skipDeployment: false +``` +The result of the rule will be renaming the PG to this: +``` +bon-information-prod ipa +bon-information-prod rsl +``` + +Other possible placeholders that you can use are for example: +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName/[^\\-]*$} +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesFullPodName/buffet-(.*?)-} +{ProcessGroup:DetectedName} - {HostGroup:Name/[^\\_]*$} +{ProcessGroup:KubernetesNamespace} +{ProcessGroup:CommandLineArgs/.*?\\-f\\s\\/www\\/(.*?)\\/generated\\/httpd\\.conf.*?} + +You can combine different ones. Check the (documentation)[link] for more \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_am-svms/conditional-naming-processgroup/conditional-naming-processgroup.yaml b/BMW-Dynatrace-config/CD_am-svms/conditional-naming-processgroup/conditional-naming-processgroup.yaml new file mode 100644 index 00000000..3ff59e79 --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-svms/conditional-naming-processgroup/conditional-naming-processgroup.yaml @@ -0,0 +1,8 @@ +config: +- CDam-svms: template.json + +CDam-svms: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: am-svms +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_am-svms/conditional-naming-processgroup/template.json b/BMW-Dynatrace-config/CD_am-svms/conditional-naming-processgroup/template.json new file mode 100644 index 00000000..7c039808 --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-svms/conditional-naming-processgroup/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "type": "PROCESS_GROUP" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_am-svms/conditional-naming-service/README.md b/BMW-Dynatrace-config/CD_am-svms/conditional-naming-service/README.md new file mode 100644 index 00000000..c34ef308 --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-svms/conditional-naming-service/README.md @@ -0,0 +1,35 @@ +### Service Naming Rules + +A typical case could be that you access to *Transaction & Services* and you find two services that are exactly the same: +*DataDownloadV1* +*DataDownloadV1* + +If you drilldown into the service and you check in the process group, you may have a PROD and a E2E for each service. + +*Note: if you see that both process group are exactly the same, please contact a Dynatrace expert to create a Process* +*Group detection rule* + +In the case the PG are PROD and E2E, then we need to create a rule that looks like this: + +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {Service:DetectedName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +- tag: Infotainment +- skipDeployment: false +``` + +The rule will get the Service Detected Name (current name) and it will extract (with a regex) the part of the kubernetes namespace after the "-", so -prod or -e2e, resulting in: +*DataDownloadV1 - prod* +*DataDownloadV1 - e2e* + +Now, services will be easy to identify. + +You can create rules based on any property/metadata. Some other placeholder's eamples: +{Service:DatabaseName} - E2E +{Service:WebServiceName} - {ProcessGroup:Kubernetes:microservice} - {ProcessGroup:Kubernetes:environment} +{Service:DetectedName} - {ProcessGroup:KubernetesContainerName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +{Service:DetectedName} - {ProcessGroup:SpringBootProfileName/[^\\-]*$} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_am-svms/conditional-naming-service/conditional-naming-service.yaml b/BMW-Dynatrace-config/CD_am-svms/conditional-naming-service/conditional-naming-service.yaml new file mode 100644 index 00000000..3ff59e79 --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-svms/conditional-naming-service/conditional-naming-service.yaml @@ -0,0 +1,8 @@ +config: +- CDam-svms: template.json + +CDam-svms: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: am-svms +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_am-svms/conditional-naming-service/template.json b/BMW-Dynatrace-config/CD_am-svms/conditional-naming-service/template.json new file mode 100644 index 00000000..5d4fac56 --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-svms/conditional-naming-service/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "type": "SERVICE" +} \ 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 index d41c4c77..5f35e5c1 100644 --- a/BMW-Dynatrace-config/CD_am-svms/custom-service-java/README.md +++ b/BMW-Dynatrace-config/CD_am-svms/custom-service-java/README.md @@ -1,30 +1,4 @@ -## 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 configure custom services? -## 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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Custom+Services) page to configure your custom services. \ 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 index 92e734fa..1695924c 100644 --- a/BMW-Dynatrace-config/CD_am-svms/synthetic-monitor/README.md +++ b/BMW-Dynatrace-config/CD_am-svms/synthetic-monitor/README.md @@ -1,37 +1,4 @@ -# Synthetic Configuration -To calculate the Availability KPI, a synthetic must be configured. +### How to configure synthetics? -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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Synthetic+Monitors) page to configure your synthetics. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_am-ui/conditional-naming-processgroup/README.md b/BMW-Dynatrace-config/CD_am-ui/conditional-naming-processgroup/README.md new file mode 100644 index 00000000..f94196a5 --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-ui/conditional-naming-processgroup/README.md @@ -0,0 +1,67 @@ +### Process Group Detection Rules and Naming + +#### Detection Rule or Naming? + +For the explanation, we're using a real example of the Infotainment application: + +!(PGNaming1)[../../../../img/PGNaming1.PNG] + +Before working with your dashboards and alerting profiles, an important task to do when working with Dynatrace is checking +the structure of your applications (process groups). You can do that clicking under *technologies* and filter using your +application Management Zone. + +In the picture above, there are two Process Groups called bon-information-prod. **If you see duplicated process groups like in** +**this case, you MUST follow this guideline** + +Next step would be to open both process groups and compare the metadata. In that way, you can identify if all process instances are +part of the same application or not. An easy way to do that is asking yourself: how many instances of my application do i have? + +If you have 4 instances in total and you're able to see 2 in one PG and other 2 in other PG it means that **they are part of the ** +**same application** + +Another situation could be that checking on the metadata, then you see that are **two different application** and Dynatrace is just naming +the process group in the same way + +*Same application* +- Problem: Dynatrace is creating two different process groups, what transalates in two separated services for the same application. Instead of +seeing all the traffic in one service, you will have it splitted and it will complicate your monitoring +- Solution: create a process group detection rule. Contact Dynatrace Expert + +*Different application* +- Problem: Dynatrace is just naming in the same way applications that are different. +- Solution: This case is less severe, since it can be fixed with a process group naming rule. + + +What about our example? +!(PGNaming2)[../../../../img/PGNaming2.PNG] +!(PGNaming3)[../../../../img/PGNaming3.PNG] + +Based on the feedback of the infotaiment team, each process group is a different application (microservice) and it's visible in the kubernetes container/workload +within the metadata of each Process Group. + +#### How to create a Process Group Detection Rule +1. Open the *conditional-naming-processgroup.yaml* file and create a rule that looks like this: +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName} +- tag: Infotainment +- skipDeployment: false +``` +The result of the rule will be renaming the PG to this: +``` +bon-information-prod ipa +bon-information-prod rsl +``` + +Other possible placeholders that you can use are for example: +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName/[^\\-]*$} +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesFullPodName/buffet-(.*?)-} +{ProcessGroup:DetectedName} - {HostGroup:Name/[^\\_]*$} +{ProcessGroup:KubernetesNamespace} +{ProcessGroup:CommandLineArgs/.*?\\-f\\s\\/www\\/(.*?)\\/generated\\/httpd\\.conf.*?} + +You can combine different ones. Check the (documentation)[link] for more \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_am-ui/conditional-naming-processgroup/conditional-naming-processgroup.yaml b/BMW-Dynatrace-config/CD_am-ui/conditional-naming-processgroup/conditional-naming-processgroup.yaml new file mode 100644 index 00000000..d40fc9d0 --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-ui/conditional-naming-processgroup/conditional-naming-processgroup.yaml @@ -0,0 +1,8 @@ +config: +- CDam-ui: template.json + +CDam-ui: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: am-ui +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_am-ui/conditional-naming-processgroup/template.json b/BMW-Dynatrace-config/CD_am-ui/conditional-naming-processgroup/template.json new file mode 100644 index 00000000..7c039808 --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-ui/conditional-naming-processgroup/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "type": "PROCESS_GROUP" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_am-ui/conditional-naming-service/README.md b/BMW-Dynatrace-config/CD_am-ui/conditional-naming-service/README.md new file mode 100644 index 00000000..c34ef308 --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-ui/conditional-naming-service/README.md @@ -0,0 +1,35 @@ +### Service Naming Rules + +A typical case could be that you access to *Transaction & Services* and you find two services that are exactly the same: +*DataDownloadV1* +*DataDownloadV1* + +If you drilldown into the service and you check in the process group, you may have a PROD and a E2E for each service. + +*Note: if you see that both process group are exactly the same, please contact a Dynatrace expert to create a Process* +*Group detection rule* + +In the case the PG are PROD and E2E, then we need to create a rule that looks like this: + +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {Service:DetectedName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +- tag: Infotainment +- skipDeployment: false +``` + +The rule will get the Service Detected Name (current name) and it will extract (with a regex) the part of the kubernetes namespace after the "-", so -prod or -e2e, resulting in: +*DataDownloadV1 - prod* +*DataDownloadV1 - e2e* + +Now, services will be easy to identify. + +You can create rules based on any property/metadata. Some other placeholder's eamples: +{Service:DatabaseName} - E2E +{Service:WebServiceName} - {ProcessGroup:Kubernetes:microservice} - {ProcessGroup:Kubernetes:environment} +{Service:DetectedName} - {ProcessGroup:KubernetesContainerName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +{Service:DetectedName} - {ProcessGroup:SpringBootProfileName/[^\\-]*$} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_am-ui/conditional-naming-service/conditional-naming-service.yaml b/BMW-Dynatrace-config/CD_am-ui/conditional-naming-service/conditional-naming-service.yaml new file mode 100644 index 00000000..d40fc9d0 --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-ui/conditional-naming-service/conditional-naming-service.yaml @@ -0,0 +1,8 @@ +config: +- CDam-ui: template.json + +CDam-ui: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: am-ui +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_am-ui/conditional-naming-service/template.json b/BMW-Dynatrace-config/CD_am-ui/conditional-naming-service/template.json new file mode 100644 index 00000000..5d4fac56 --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-ui/conditional-naming-service/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "type": "SERVICE" +} \ 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 index d41c4c77..5f35e5c1 100644 --- a/BMW-Dynatrace-config/CD_am-ui/custom-service-java/README.md +++ b/BMW-Dynatrace-config/CD_am-ui/custom-service-java/README.md @@ -1,30 +1,4 @@ -## 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 configure custom services? -## 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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Custom+Services) page to configure your custom services. \ 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 index 92e734fa..1695924c 100644 --- a/BMW-Dynatrace-config/CD_am-ui/synthetic-monitor/README.md +++ b/BMW-Dynatrace-config/CD_am-ui/synthetic-monitor/README.md @@ -1,37 +1,4 @@ -# Synthetic Configuration -To calculate the Availability KPI, a synthetic must be configured. +### How to configure synthetics? -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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Synthetic+Monitors) page to configure your synthetics. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_am-usage/conditional-naming-processgroup/README.md b/BMW-Dynatrace-config/CD_am-usage/conditional-naming-processgroup/README.md new file mode 100644 index 00000000..f94196a5 --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-usage/conditional-naming-processgroup/README.md @@ -0,0 +1,67 @@ +### Process Group Detection Rules and Naming + +#### Detection Rule or Naming? + +For the explanation, we're using a real example of the Infotainment application: + +!(PGNaming1)[../../../../img/PGNaming1.PNG] + +Before working with your dashboards and alerting profiles, an important task to do when working with Dynatrace is checking +the structure of your applications (process groups). You can do that clicking under *technologies* and filter using your +application Management Zone. + +In the picture above, there are two Process Groups called bon-information-prod. **If you see duplicated process groups like in** +**this case, you MUST follow this guideline** + +Next step would be to open both process groups and compare the metadata. In that way, you can identify if all process instances are +part of the same application or not. An easy way to do that is asking yourself: how many instances of my application do i have? + +If you have 4 instances in total and you're able to see 2 in one PG and other 2 in other PG it means that **they are part of the ** +**same application** + +Another situation could be that checking on the metadata, then you see that are **two different application** and Dynatrace is just naming +the process group in the same way + +*Same application* +- Problem: Dynatrace is creating two different process groups, what transalates in two separated services for the same application. Instead of +seeing all the traffic in one service, you will have it splitted and it will complicate your monitoring +- Solution: create a process group detection rule. Contact Dynatrace Expert + +*Different application* +- Problem: Dynatrace is just naming in the same way applications that are different. +- Solution: This case is less severe, since it can be fixed with a process group naming rule. + + +What about our example? +!(PGNaming2)[../../../../img/PGNaming2.PNG] +!(PGNaming3)[../../../../img/PGNaming3.PNG] + +Based on the feedback of the infotaiment team, each process group is a different application (microservice) and it's visible in the kubernetes container/workload +within the metadata of each Process Group. + +#### How to create a Process Group Detection Rule +1. Open the *conditional-naming-processgroup.yaml* file and create a rule that looks like this: +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName} +- tag: Infotainment +- skipDeployment: false +``` +The result of the rule will be renaming the PG to this: +``` +bon-information-prod ipa +bon-information-prod rsl +``` + +Other possible placeholders that you can use are for example: +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName/[^\\-]*$} +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesFullPodName/buffet-(.*?)-} +{ProcessGroup:DetectedName} - {HostGroup:Name/[^\\_]*$} +{ProcessGroup:KubernetesNamespace} +{ProcessGroup:CommandLineArgs/.*?\\-f\\s\\/www\\/(.*?)\\/generated\\/httpd\\.conf.*?} + +You can combine different ones. Check the (documentation)[link] for more \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_am-usage/conditional-naming-processgroup/conditional-naming-processgroup.yaml b/BMW-Dynatrace-config/CD_am-usage/conditional-naming-processgroup/conditional-naming-processgroup.yaml new file mode 100644 index 00000000..28aa67d4 --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-usage/conditional-naming-processgroup/conditional-naming-processgroup.yaml @@ -0,0 +1,8 @@ +config: +- CDam-usage: template.json + +CDam-usage: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: am-usage +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_am-usage/conditional-naming-processgroup/template.json b/BMW-Dynatrace-config/CD_am-usage/conditional-naming-processgroup/template.json new file mode 100644 index 00000000..7c039808 --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-usage/conditional-naming-processgroup/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "type": "PROCESS_GROUP" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_am-usage/conditional-naming-service/README.md b/BMW-Dynatrace-config/CD_am-usage/conditional-naming-service/README.md new file mode 100644 index 00000000..c34ef308 --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-usage/conditional-naming-service/README.md @@ -0,0 +1,35 @@ +### Service Naming Rules + +A typical case could be that you access to *Transaction & Services* and you find two services that are exactly the same: +*DataDownloadV1* +*DataDownloadV1* + +If you drilldown into the service and you check in the process group, you may have a PROD and a E2E for each service. + +*Note: if you see that both process group are exactly the same, please contact a Dynatrace expert to create a Process* +*Group detection rule* + +In the case the PG are PROD and E2E, then we need to create a rule that looks like this: + +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {Service:DetectedName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +- tag: Infotainment +- skipDeployment: false +``` + +The rule will get the Service Detected Name (current name) and it will extract (with a regex) the part of the kubernetes namespace after the "-", so -prod or -e2e, resulting in: +*DataDownloadV1 - prod* +*DataDownloadV1 - e2e* + +Now, services will be easy to identify. + +You can create rules based on any property/metadata. Some other placeholder's eamples: +{Service:DatabaseName} - E2E +{Service:WebServiceName} - {ProcessGroup:Kubernetes:microservice} - {ProcessGroup:Kubernetes:environment} +{Service:DetectedName} - {ProcessGroup:KubernetesContainerName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +{Service:DetectedName} - {ProcessGroup:SpringBootProfileName/[^\\-]*$} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_am-usage/conditional-naming-service/conditional-naming-service.yaml b/BMW-Dynatrace-config/CD_am-usage/conditional-naming-service/conditional-naming-service.yaml new file mode 100644 index 00000000..28aa67d4 --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-usage/conditional-naming-service/conditional-naming-service.yaml @@ -0,0 +1,8 @@ +config: +- CDam-usage: template.json + +CDam-usage: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: am-usage +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_am-usage/conditional-naming-service/template.json b/BMW-Dynatrace-config/CD_am-usage/conditional-naming-service/template.json new file mode 100644 index 00000000..5d4fac56 --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-usage/conditional-naming-service/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "type": "SERVICE" +} \ 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 index d41c4c77..5f35e5c1 100644 --- a/BMW-Dynatrace-config/CD_am-usage/custom-service-java/README.md +++ b/BMW-Dynatrace-config/CD_am-usage/custom-service-java/README.md @@ -1,30 +1,4 @@ -## 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 configure custom services? -## 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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Custom+Services) page to configure your custom services. \ 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 index 92e734fa..1695924c 100644 --- a/BMW-Dynatrace-config/CD_am-usage/synthetic-monitor/README.md +++ b/BMW-Dynatrace-config/CD_am-usage/synthetic-monitor/README.md @@ -1,37 +1,4 @@ -# Synthetic Configuration -To calculate the Availability KPI, a synthetic must be configured. +### How to configure synthetics? -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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Synthetic+Monitors) page to configure your synthetics. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_am-vehicle-activation/conditional-naming-processgroup/README.md b/BMW-Dynatrace-config/CD_am-vehicle-activation/conditional-naming-processgroup/README.md new file mode 100644 index 00000000..f94196a5 --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-vehicle-activation/conditional-naming-processgroup/README.md @@ -0,0 +1,67 @@ +### Process Group Detection Rules and Naming + +#### Detection Rule or Naming? + +For the explanation, we're using a real example of the Infotainment application: + +!(PGNaming1)[../../../../img/PGNaming1.PNG] + +Before working with your dashboards and alerting profiles, an important task to do when working with Dynatrace is checking +the structure of your applications (process groups). You can do that clicking under *technologies* and filter using your +application Management Zone. + +In the picture above, there are two Process Groups called bon-information-prod. **If you see duplicated process groups like in** +**this case, you MUST follow this guideline** + +Next step would be to open both process groups and compare the metadata. In that way, you can identify if all process instances are +part of the same application or not. An easy way to do that is asking yourself: how many instances of my application do i have? + +If you have 4 instances in total and you're able to see 2 in one PG and other 2 in other PG it means that **they are part of the ** +**same application** + +Another situation could be that checking on the metadata, then you see that are **two different application** and Dynatrace is just naming +the process group in the same way + +*Same application* +- Problem: Dynatrace is creating two different process groups, what transalates in two separated services for the same application. Instead of +seeing all the traffic in one service, you will have it splitted and it will complicate your monitoring +- Solution: create a process group detection rule. Contact Dynatrace Expert + +*Different application* +- Problem: Dynatrace is just naming in the same way applications that are different. +- Solution: This case is less severe, since it can be fixed with a process group naming rule. + + +What about our example? +!(PGNaming2)[../../../../img/PGNaming2.PNG] +!(PGNaming3)[../../../../img/PGNaming3.PNG] + +Based on the feedback of the infotaiment team, each process group is a different application (microservice) and it's visible in the kubernetes container/workload +within the metadata of each Process Group. + +#### How to create a Process Group Detection Rule +1. Open the *conditional-naming-processgroup.yaml* file and create a rule that looks like this: +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName} +- tag: Infotainment +- skipDeployment: false +``` +The result of the rule will be renaming the PG to this: +``` +bon-information-prod ipa +bon-information-prod rsl +``` + +Other possible placeholders that you can use are for example: +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName/[^\\-]*$} +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesFullPodName/buffet-(.*?)-} +{ProcessGroup:DetectedName} - {HostGroup:Name/[^\\_]*$} +{ProcessGroup:KubernetesNamespace} +{ProcessGroup:CommandLineArgs/.*?\\-f\\s\\/www\\/(.*?)\\/generated\\/httpd\\.conf.*?} + +You can combine different ones. Check the (documentation)[link] for more \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_am-vehicle-activation/conditional-naming-processgroup/conditional-naming-processgroup.yaml b/BMW-Dynatrace-config/CD_am-vehicle-activation/conditional-naming-processgroup/conditional-naming-processgroup.yaml new file mode 100644 index 00000000..43844dc8 --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-vehicle-activation/conditional-naming-processgroup/conditional-naming-processgroup.yaml @@ -0,0 +1,8 @@ +config: +- CDam-vehicle-activation: template.json + +CDam-vehicle-activation: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: am-vehicle-activation +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_am-vehicle-activation/conditional-naming-processgroup/template.json b/BMW-Dynatrace-config/CD_am-vehicle-activation/conditional-naming-processgroup/template.json new file mode 100644 index 00000000..7c039808 --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-vehicle-activation/conditional-naming-processgroup/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "type": "PROCESS_GROUP" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_am-vehicle-activation/conditional-naming-service/README.md b/BMW-Dynatrace-config/CD_am-vehicle-activation/conditional-naming-service/README.md new file mode 100644 index 00000000..c34ef308 --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-vehicle-activation/conditional-naming-service/README.md @@ -0,0 +1,35 @@ +### Service Naming Rules + +A typical case could be that you access to *Transaction & Services* and you find two services that are exactly the same: +*DataDownloadV1* +*DataDownloadV1* + +If you drilldown into the service and you check in the process group, you may have a PROD and a E2E for each service. + +*Note: if you see that both process group are exactly the same, please contact a Dynatrace expert to create a Process* +*Group detection rule* + +In the case the PG are PROD and E2E, then we need to create a rule that looks like this: + +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {Service:DetectedName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +- tag: Infotainment +- skipDeployment: false +``` + +The rule will get the Service Detected Name (current name) and it will extract (with a regex) the part of the kubernetes namespace after the "-", so -prod or -e2e, resulting in: +*DataDownloadV1 - prod* +*DataDownloadV1 - e2e* + +Now, services will be easy to identify. + +You can create rules based on any property/metadata. Some other placeholder's eamples: +{Service:DatabaseName} - E2E +{Service:WebServiceName} - {ProcessGroup:Kubernetes:microservice} - {ProcessGroup:Kubernetes:environment} +{Service:DetectedName} - {ProcessGroup:KubernetesContainerName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +{Service:DetectedName} - {ProcessGroup:SpringBootProfileName/[^\\-]*$} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_am-vehicle-activation/conditional-naming-service/conditional-naming-service.yaml b/BMW-Dynatrace-config/CD_am-vehicle-activation/conditional-naming-service/conditional-naming-service.yaml new file mode 100644 index 00000000..43844dc8 --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-vehicle-activation/conditional-naming-service/conditional-naming-service.yaml @@ -0,0 +1,8 @@ +config: +- CDam-vehicle-activation: template.json + +CDam-vehicle-activation: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: am-vehicle-activation +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_am-vehicle-activation/conditional-naming-service/template.json b/BMW-Dynatrace-config/CD_am-vehicle-activation/conditional-naming-service/template.json new file mode 100644 index 00000000..5d4fac56 --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-vehicle-activation/conditional-naming-service/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "type": "SERVICE" +} \ 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 index d41c4c77..5f35e5c1 100644 --- 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 @@ -1,30 +1,4 @@ -## 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 configure custom services? -## 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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Custom+Services) page to configure your custom services. \ 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 index 92e734fa..1695924c 100644 --- a/BMW-Dynatrace-config/CD_am-vehicle-activation/synthetic-monitor/README.md +++ b/BMW-Dynatrace-config/CD_am-vehicle-activation/synthetic-monitor/README.md @@ -1,37 +1,4 @@ -# Synthetic Configuration -To calculate the Availability KPI, a synthetic must be configured. +### How to configure synthetics? -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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Synthetic+Monitors) page to configure your synthetics. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_am-vms/conditional-naming-processgroup/README.md b/BMW-Dynatrace-config/CD_am-vms/conditional-naming-processgroup/README.md new file mode 100644 index 00000000..f94196a5 --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-vms/conditional-naming-processgroup/README.md @@ -0,0 +1,67 @@ +### Process Group Detection Rules and Naming + +#### Detection Rule or Naming? + +For the explanation, we're using a real example of the Infotainment application: + +!(PGNaming1)[../../../../img/PGNaming1.PNG] + +Before working with your dashboards and alerting profiles, an important task to do when working with Dynatrace is checking +the structure of your applications (process groups). You can do that clicking under *technologies* and filter using your +application Management Zone. + +In the picture above, there are two Process Groups called bon-information-prod. **If you see duplicated process groups like in** +**this case, you MUST follow this guideline** + +Next step would be to open both process groups and compare the metadata. In that way, you can identify if all process instances are +part of the same application or not. An easy way to do that is asking yourself: how many instances of my application do i have? + +If you have 4 instances in total and you're able to see 2 in one PG and other 2 in other PG it means that **they are part of the ** +**same application** + +Another situation could be that checking on the metadata, then you see that are **two different application** and Dynatrace is just naming +the process group in the same way + +*Same application* +- Problem: Dynatrace is creating two different process groups, what transalates in two separated services for the same application. Instead of +seeing all the traffic in one service, you will have it splitted and it will complicate your monitoring +- Solution: create a process group detection rule. Contact Dynatrace Expert + +*Different application* +- Problem: Dynatrace is just naming in the same way applications that are different. +- Solution: This case is less severe, since it can be fixed with a process group naming rule. + + +What about our example? +!(PGNaming2)[../../../../img/PGNaming2.PNG] +!(PGNaming3)[../../../../img/PGNaming3.PNG] + +Based on the feedback of the infotaiment team, each process group is a different application (microservice) and it's visible in the kubernetes container/workload +within the metadata of each Process Group. + +#### How to create a Process Group Detection Rule +1. Open the *conditional-naming-processgroup.yaml* file and create a rule that looks like this: +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName} +- tag: Infotainment +- skipDeployment: false +``` +The result of the rule will be renaming the PG to this: +``` +bon-information-prod ipa +bon-information-prod rsl +``` + +Other possible placeholders that you can use are for example: +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName/[^\\-]*$} +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesFullPodName/buffet-(.*?)-} +{ProcessGroup:DetectedName} - {HostGroup:Name/[^\\_]*$} +{ProcessGroup:KubernetesNamespace} +{ProcessGroup:CommandLineArgs/.*?\\-f\\s\\/www\\/(.*?)\\/generated\\/httpd\\.conf.*?} + +You can combine different ones. Check the (documentation)[link] for more \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_am-vms/conditional-naming-processgroup/conditional-naming-processgroup.yaml b/BMW-Dynatrace-config/CD_am-vms/conditional-naming-processgroup/conditional-naming-processgroup.yaml new file mode 100644 index 00000000..e186c59f --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-vms/conditional-naming-processgroup/conditional-naming-processgroup.yaml @@ -0,0 +1,8 @@ +config: +- CDam-vms: template.json + +CDam-vms: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: am-vms +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_am-vms/conditional-naming-processgroup/template.json b/BMW-Dynatrace-config/CD_am-vms/conditional-naming-processgroup/template.json new file mode 100644 index 00000000..7c039808 --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-vms/conditional-naming-processgroup/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "type": "PROCESS_GROUP" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_am-vms/conditional-naming-service/README.md b/BMW-Dynatrace-config/CD_am-vms/conditional-naming-service/README.md new file mode 100644 index 00000000..c34ef308 --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-vms/conditional-naming-service/README.md @@ -0,0 +1,35 @@ +### Service Naming Rules + +A typical case could be that you access to *Transaction & Services* and you find two services that are exactly the same: +*DataDownloadV1* +*DataDownloadV1* + +If you drilldown into the service and you check in the process group, you may have a PROD and a E2E for each service. + +*Note: if you see that both process group are exactly the same, please contact a Dynatrace expert to create a Process* +*Group detection rule* + +In the case the PG are PROD and E2E, then we need to create a rule that looks like this: + +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {Service:DetectedName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +- tag: Infotainment +- skipDeployment: false +``` + +The rule will get the Service Detected Name (current name) and it will extract (with a regex) the part of the kubernetes namespace after the "-", so -prod or -e2e, resulting in: +*DataDownloadV1 - prod* +*DataDownloadV1 - e2e* + +Now, services will be easy to identify. + +You can create rules based on any property/metadata. Some other placeholder's eamples: +{Service:DatabaseName} - E2E +{Service:WebServiceName} - {ProcessGroup:Kubernetes:microservice} - {ProcessGroup:Kubernetes:environment} +{Service:DetectedName} - {ProcessGroup:KubernetesContainerName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +{Service:DetectedName} - {ProcessGroup:SpringBootProfileName/[^\\-]*$} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_am-vms/conditional-naming-service/conditional-naming-service.yaml b/BMW-Dynatrace-config/CD_am-vms/conditional-naming-service/conditional-naming-service.yaml new file mode 100644 index 00000000..e186c59f --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-vms/conditional-naming-service/conditional-naming-service.yaml @@ -0,0 +1,8 @@ +config: +- CDam-vms: template.json + +CDam-vms: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: am-vms +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_am-vms/conditional-naming-service/template.json b/BMW-Dynatrace-config/CD_am-vms/conditional-naming-service/template.json new file mode 100644 index 00000000..5d4fac56 --- /dev/null +++ b/BMW-Dynatrace-config/CD_am-vms/conditional-naming-service/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "type": "SERVICE" +} \ 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 index d41c4c77..5f35e5c1 100644 --- a/BMW-Dynatrace-config/CD_am-vms/custom-service-java/README.md +++ b/BMW-Dynatrace-config/CD_am-vms/custom-service-java/README.md @@ -1,30 +1,4 @@ -## 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 configure custom services? -## 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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Custom+Services) page to configure your custom services. \ 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 index 92e734fa..1695924c 100644 --- a/BMW-Dynatrace-config/CD_am-vms/synthetic-monitor/README.md +++ b/BMW-Dynatrace-config/CD_am-vms/synthetic-monitor/README.md @@ -1,37 +1,4 @@ -# Synthetic Configuration -To calculate the Availability KPI, a synthetic must be configured. +### How to configure synthetics? -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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Synthetic+Monitors) page to configure your synthetics. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_analytics-user-data-service/conditional-naming-processgroup/README.md b/BMW-Dynatrace-config/CD_analytics-user-data-service/conditional-naming-processgroup/README.md new file mode 100644 index 00000000..f94196a5 --- /dev/null +++ b/BMW-Dynatrace-config/CD_analytics-user-data-service/conditional-naming-processgroup/README.md @@ -0,0 +1,67 @@ +### Process Group Detection Rules and Naming + +#### Detection Rule or Naming? + +For the explanation, we're using a real example of the Infotainment application: + +!(PGNaming1)[../../../../img/PGNaming1.PNG] + +Before working with your dashboards and alerting profiles, an important task to do when working with Dynatrace is checking +the structure of your applications (process groups). You can do that clicking under *technologies* and filter using your +application Management Zone. + +In the picture above, there are two Process Groups called bon-information-prod. **If you see duplicated process groups like in** +**this case, you MUST follow this guideline** + +Next step would be to open both process groups and compare the metadata. In that way, you can identify if all process instances are +part of the same application or not. An easy way to do that is asking yourself: how many instances of my application do i have? + +If you have 4 instances in total and you're able to see 2 in one PG and other 2 in other PG it means that **they are part of the ** +**same application** + +Another situation could be that checking on the metadata, then you see that are **two different application** and Dynatrace is just naming +the process group in the same way + +*Same application* +- Problem: Dynatrace is creating two different process groups, what transalates in two separated services for the same application. Instead of +seeing all the traffic in one service, you will have it splitted and it will complicate your monitoring +- Solution: create a process group detection rule. Contact Dynatrace Expert + +*Different application* +- Problem: Dynatrace is just naming in the same way applications that are different. +- Solution: This case is less severe, since it can be fixed with a process group naming rule. + + +What about our example? +!(PGNaming2)[../../../../img/PGNaming2.PNG] +!(PGNaming3)[../../../../img/PGNaming3.PNG] + +Based on the feedback of the infotaiment team, each process group is a different application (microservice) and it's visible in the kubernetes container/workload +within the metadata of each Process Group. + +#### How to create a Process Group Detection Rule +1. Open the *conditional-naming-processgroup.yaml* file and create a rule that looks like this: +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName} +- tag: Infotainment +- skipDeployment: false +``` +The result of the rule will be renaming the PG to this: +``` +bon-information-prod ipa +bon-information-prod rsl +``` + +Other possible placeholders that you can use are for example: +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName/[^\\-]*$} +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesFullPodName/buffet-(.*?)-} +{ProcessGroup:DetectedName} - {HostGroup:Name/[^\\_]*$} +{ProcessGroup:KubernetesNamespace} +{ProcessGroup:CommandLineArgs/.*?\\-f\\s\\/www\\/(.*?)\\/generated\\/httpd\\.conf.*?} + +You can combine different ones. Check the (documentation)[link] for more \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_analytics-user-data-service/conditional-naming-processgroup/conditional-naming-processgroup.yaml b/BMW-Dynatrace-config/CD_analytics-user-data-service/conditional-naming-processgroup/conditional-naming-processgroup.yaml new file mode 100644 index 00000000..8e953e96 --- /dev/null +++ b/BMW-Dynatrace-config/CD_analytics-user-data-service/conditional-naming-processgroup/conditional-naming-processgroup.yaml @@ -0,0 +1,8 @@ +config: +- CDanalytics-user-data-service: template.json + +CDanalytics-user-data-service: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: analytics-user-data-service +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_analytics-user-data-service/conditional-naming-processgroup/template.json b/BMW-Dynatrace-config/CD_analytics-user-data-service/conditional-naming-processgroup/template.json new file mode 100644 index 00000000..7c039808 --- /dev/null +++ b/BMW-Dynatrace-config/CD_analytics-user-data-service/conditional-naming-processgroup/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "type": "PROCESS_GROUP" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_analytics-user-data-service/conditional-naming-service/README.md b/BMW-Dynatrace-config/CD_analytics-user-data-service/conditional-naming-service/README.md new file mode 100644 index 00000000..c34ef308 --- /dev/null +++ b/BMW-Dynatrace-config/CD_analytics-user-data-service/conditional-naming-service/README.md @@ -0,0 +1,35 @@ +### Service Naming Rules + +A typical case could be that you access to *Transaction & Services* and you find two services that are exactly the same: +*DataDownloadV1* +*DataDownloadV1* + +If you drilldown into the service and you check in the process group, you may have a PROD and a E2E for each service. + +*Note: if you see that both process group are exactly the same, please contact a Dynatrace expert to create a Process* +*Group detection rule* + +In the case the PG are PROD and E2E, then we need to create a rule that looks like this: + +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {Service:DetectedName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +- tag: Infotainment +- skipDeployment: false +``` + +The rule will get the Service Detected Name (current name) and it will extract (with a regex) the part of the kubernetes namespace after the "-", so -prod or -e2e, resulting in: +*DataDownloadV1 - prod* +*DataDownloadV1 - e2e* + +Now, services will be easy to identify. + +You can create rules based on any property/metadata. Some other placeholder's eamples: +{Service:DatabaseName} - E2E +{Service:WebServiceName} - {ProcessGroup:Kubernetes:microservice} - {ProcessGroup:Kubernetes:environment} +{Service:DetectedName} - {ProcessGroup:KubernetesContainerName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +{Service:DetectedName} - {ProcessGroup:SpringBootProfileName/[^\\-]*$} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_analytics-user-data-service/conditional-naming-service/conditional-naming-service.yaml b/BMW-Dynatrace-config/CD_analytics-user-data-service/conditional-naming-service/conditional-naming-service.yaml new file mode 100644 index 00000000..8e953e96 --- /dev/null +++ b/BMW-Dynatrace-config/CD_analytics-user-data-service/conditional-naming-service/conditional-naming-service.yaml @@ -0,0 +1,8 @@ +config: +- CDanalytics-user-data-service: template.json + +CDanalytics-user-data-service: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: analytics-user-data-service +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_analytics-user-data-service/conditional-naming-service/template.json b/BMW-Dynatrace-config/CD_analytics-user-data-service/conditional-naming-service/template.json new file mode 100644 index 00000000..5d4fac56 --- /dev/null +++ b/BMW-Dynatrace-config/CD_analytics-user-data-service/conditional-naming-service/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "type": "SERVICE" +} \ 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 index d41c4c77..5f35e5c1 100644 --- 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 @@ -1,30 +1,4 @@ -## 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 configure custom services? -## 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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Custom+Services) page to configure your custom services. \ 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 index 92e734fa..1695924c 100644 --- 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 @@ -1,37 +1,4 @@ -# Synthetic Configuration -To calculate the Availability KPI, a synthetic must be configured. +### How to configure synthetics? -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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Synthetic+Monitors) page to configure your synthetics. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_asbc-pki-oclisc2v/conditional-naming-processgroup/README.md b/BMW-Dynatrace-config/CD_asbc-pki-oclisc2v/conditional-naming-processgroup/README.md new file mode 100644 index 00000000..f94196a5 --- /dev/null +++ b/BMW-Dynatrace-config/CD_asbc-pki-oclisc2v/conditional-naming-processgroup/README.md @@ -0,0 +1,67 @@ +### Process Group Detection Rules and Naming + +#### Detection Rule or Naming? + +For the explanation, we're using a real example of the Infotainment application: + +!(PGNaming1)[../../../../img/PGNaming1.PNG] + +Before working with your dashboards and alerting profiles, an important task to do when working with Dynatrace is checking +the structure of your applications (process groups). You can do that clicking under *technologies* and filter using your +application Management Zone. + +In the picture above, there are two Process Groups called bon-information-prod. **If you see duplicated process groups like in** +**this case, you MUST follow this guideline** + +Next step would be to open both process groups and compare the metadata. In that way, you can identify if all process instances are +part of the same application or not. An easy way to do that is asking yourself: how many instances of my application do i have? + +If you have 4 instances in total and you're able to see 2 in one PG and other 2 in other PG it means that **they are part of the ** +**same application** + +Another situation could be that checking on the metadata, then you see that are **two different application** and Dynatrace is just naming +the process group in the same way + +*Same application* +- Problem: Dynatrace is creating two different process groups, what transalates in two separated services for the same application. Instead of +seeing all the traffic in one service, you will have it splitted and it will complicate your monitoring +- Solution: create a process group detection rule. Contact Dynatrace Expert + +*Different application* +- Problem: Dynatrace is just naming in the same way applications that are different. +- Solution: This case is less severe, since it can be fixed with a process group naming rule. + + +What about our example? +!(PGNaming2)[../../../../img/PGNaming2.PNG] +!(PGNaming3)[../../../../img/PGNaming3.PNG] + +Based on the feedback of the infotaiment team, each process group is a different application (microservice) and it's visible in the kubernetes container/workload +within the metadata of each Process Group. + +#### How to create a Process Group Detection Rule +1. Open the *conditional-naming-processgroup.yaml* file and create a rule that looks like this: +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName} +- tag: Infotainment +- skipDeployment: false +``` +The result of the rule will be renaming the PG to this: +``` +bon-information-prod ipa +bon-information-prod rsl +``` + +Other possible placeholders that you can use are for example: +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName/[^\\-]*$} +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesFullPodName/buffet-(.*?)-} +{ProcessGroup:DetectedName} - {HostGroup:Name/[^\\_]*$} +{ProcessGroup:KubernetesNamespace} +{ProcessGroup:CommandLineArgs/.*?\\-f\\s\\/www\\/(.*?)\\/generated\\/httpd\\.conf.*?} + +You can combine different ones. Check the (documentation)[link] for more \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_asbc-pki-oclisc2v/conditional-naming-processgroup/conditional-naming-processgroup.yaml b/BMW-Dynatrace-config/CD_asbc-pki-oclisc2v/conditional-naming-processgroup/conditional-naming-processgroup.yaml new file mode 100644 index 00000000..bd164c3f --- /dev/null +++ b/BMW-Dynatrace-config/CD_asbc-pki-oclisc2v/conditional-naming-processgroup/conditional-naming-processgroup.yaml @@ -0,0 +1,8 @@ +config: +- CDasbc-pki-oclisc2v: template.json + +CDasbc-pki-oclisc2v: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: asbc-pki-oclisc2v +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_asbc-pki-oclisc2v/conditional-naming-processgroup/template.json b/BMW-Dynatrace-config/CD_asbc-pki-oclisc2v/conditional-naming-processgroup/template.json new file mode 100644 index 00000000..7c039808 --- /dev/null +++ b/BMW-Dynatrace-config/CD_asbc-pki-oclisc2v/conditional-naming-processgroup/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "type": "PROCESS_GROUP" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_asbc-pki-oclisc2v/conditional-naming-service/README.md b/BMW-Dynatrace-config/CD_asbc-pki-oclisc2v/conditional-naming-service/README.md new file mode 100644 index 00000000..c34ef308 --- /dev/null +++ b/BMW-Dynatrace-config/CD_asbc-pki-oclisc2v/conditional-naming-service/README.md @@ -0,0 +1,35 @@ +### Service Naming Rules + +A typical case could be that you access to *Transaction & Services* and you find two services that are exactly the same: +*DataDownloadV1* +*DataDownloadV1* + +If you drilldown into the service and you check in the process group, you may have a PROD and a E2E for each service. + +*Note: if you see that both process group are exactly the same, please contact a Dynatrace expert to create a Process* +*Group detection rule* + +In the case the PG are PROD and E2E, then we need to create a rule that looks like this: + +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {Service:DetectedName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +- tag: Infotainment +- skipDeployment: false +``` + +The rule will get the Service Detected Name (current name) and it will extract (with a regex) the part of the kubernetes namespace after the "-", so -prod or -e2e, resulting in: +*DataDownloadV1 - prod* +*DataDownloadV1 - e2e* + +Now, services will be easy to identify. + +You can create rules based on any property/metadata. Some other placeholder's eamples: +{Service:DatabaseName} - E2E +{Service:WebServiceName} - {ProcessGroup:Kubernetes:microservice} - {ProcessGroup:Kubernetes:environment} +{Service:DetectedName} - {ProcessGroup:KubernetesContainerName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +{Service:DetectedName} - {ProcessGroup:SpringBootProfileName/[^\\-]*$} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_asbc-pki-oclisc2v/conditional-naming-service/conditional-naming-service.yaml b/BMW-Dynatrace-config/CD_asbc-pki-oclisc2v/conditional-naming-service/conditional-naming-service.yaml new file mode 100644 index 00000000..bd164c3f --- /dev/null +++ b/BMW-Dynatrace-config/CD_asbc-pki-oclisc2v/conditional-naming-service/conditional-naming-service.yaml @@ -0,0 +1,8 @@ +config: +- CDasbc-pki-oclisc2v: template.json + +CDasbc-pki-oclisc2v: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: asbc-pki-oclisc2v +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_asbc-pki-oclisc2v/conditional-naming-service/template.json b/BMW-Dynatrace-config/CD_asbc-pki-oclisc2v/conditional-naming-service/template.json new file mode 100644 index 00000000..5d4fac56 --- /dev/null +++ b/BMW-Dynatrace-config/CD_asbc-pki-oclisc2v/conditional-naming-service/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "type": "SERVICE" +} \ 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 index d41c4c77..5f35e5c1 100644 --- 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 @@ -1,30 +1,4 @@ -## 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 configure custom services? -## 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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Custom+Services) page to configure your custom services. \ 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 index 92e734fa..1695924c 100644 --- a/BMW-Dynatrace-config/CD_asbc-pki-oclisc2v/synthetic-monitor/README.md +++ b/BMW-Dynatrace-config/CD_asbc-pki-oclisc2v/synthetic-monitor/README.md @@ -1,37 +1,4 @@ -# Synthetic Configuration -To calculate the Availability KPI, a synthetic must be configured. +### How to configure synthetics? -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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Synthetic+Monitors) page to configure your synthetics. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_asbc-pki-oclisocsp/conditional-naming-processgroup/README.md b/BMW-Dynatrace-config/CD_asbc-pki-oclisocsp/conditional-naming-processgroup/README.md new file mode 100644 index 00000000..f94196a5 --- /dev/null +++ b/BMW-Dynatrace-config/CD_asbc-pki-oclisocsp/conditional-naming-processgroup/README.md @@ -0,0 +1,67 @@ +### Process Group Detection Rules and Naming + +#### Detection Rule or Naming? + +For the explanation, we're using a real example of the Infotainment application: + +!(PGNaming1)[../../../../img/PGNaming1.PNG] + +Before working with your dashboards and alerting profiles, an important task to do when working with Dynatrace is checking +the structure of your applications (process groups). You can do that clicking under *technologies* and filter using your +application Management Zone. + +In the picture above, there are two Process Groups called bon-information-prod. **If you see duplicated process groups like in** +**this case, you MUST follow this guideline** + +Next step would be to open both process groups and compare the metadata. In that way, you can identify if all process instances are +part of the same application or not. An easy way to do that is asking yourself: how many instances of my application do i have? + +If you have 4 instances in total and you're able to see 2 in one PG and other 2 in other PG it means that **they are part of the ** +**same application** + +Another situation could be that checking on the metadata, then you see that are **two different application** and Dynatrace is just naming +the process group in the same way + +*Same application* +- Problem: Dynatrace is creating two different process groups, what transalates in two separated services for the same application. Instead of +seeing all the traffic in one service, you will have it splitted and it will complicate your monitoring +- Solution: create a process group detection rule. Contact Dynatrace Expert + +*Different application* +- Problem: Dynatrace is just naming in the same way applications that are different. +- Solution: This case is less severe, since it can be fixed with a process group naming rule. + + +What about our example? +!(PGNaming2)[../../../../img/PGNaming2.PNG] +!(PGNaming3)[../../../../img/PGNaming3.PNG] + +Based on the feedback of the infotaiment team, each process group is a different application (microservice) and it's visible in the kubernetes container/workload +within the metadata of each Process Group. + +#### How to create a Process Group Detection Rule +1. Open the *conditional-naming-processgroup.yaml* file and create a rule that looks like this: +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName} +- tag: Infotainment +- skipDeployment: false +``` +The result of the rule will be renaming the PG to this: +``` +bon-information-prod ipa +bon-information-prod rsl +``` + +Other possible placeholders that you can use are for example: +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName/[^\\-]*$} +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesFullPodName/buffet-(.*?)-} +{ProcessGroup:DetectedName} - {HostGroup:Name/[^\\_]*$} +{ProcessGroup:KubernetesNamespace} +{ProcessGroup:CommandLineArgs/.*?\\-f\\s\\/www\\/(.*?)\\/generated\\/httpd\\.conf.*?} + +You can combine different ones. Check the (documentation)[link] for more \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_asbc-pki-oclisocsp/conditional-naming-processgroup/conditional-naming-processgroup.yaml b/BMW-Dynatrace-config/CD_asbc-pki-oclisocsp/conditional-naming-processgroup/conditional-naming-processgroup.yaml new file mode 100644 index 00000000..c8cab4fd --- /dev/null +++ b/BMW-Dynatrace-config/CD_asbc-pki-oclisocsp/conditional-naming-processgroup/conditional-naming-processgroup.yaml @@ -0,0 +1,8 @@ +config: +- CDasbc-pki-oclisocsp: template.json + +CDasbc-pki-oclisocsp: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: asbc-pki-oclisocsp +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_asbc-pki-oclisocsp/conditional-naming-processgroup/template.json b/BMW-Dynatrace-config/CD_asbc-pki-oclisocsp/conditional-naming-processgroup/template.json new file mode 100644 index 00000000..7c039808 --- /dev/null +++ b/BMW-Dynatrace-config/CD_asbc-pki-oclisocsp/conditional-naming-processgroup/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "type": "PROCESS_GROUP" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_asbc-pki-oclisocsp/conditional-naming-service/README.md b/BMW-Dynatrace-config/CD_asbc-pki-oclisocsp/conditional-naming-service/README.md new file mode 100644 index 00000000..c34ef308 --- /dev/null +++ b/BMW-Dynatrace-config/CD_asbc-pki-oclisocsp/conditional-naming-service/README.md @@ -0,0 +1,35 @@ +### Service Naming Rules + +A typical case could be that you access to *Transaction & Services* and you find two services that are exactly the same: +*DataDownloadV1* +*DataDownloadV1* + +If you drilldown into the service and you check in the process group, you may have a PROD and a E2E for each service. + +*Note: if you see that both process group are exactly the same, please contact a Dynatrace expert to create a Process* +*Group detection rule* + +In the case the PG are PROD and E2E, then we need to create a rule that looks like this: + +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {Service:DetectedName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +- tag: Infotainment +- skipDeployment: false +``` + +The rule will get the Service Detected Name (current name) and it will extract (with a regex) the part of the kubernetes namespace after the "-", so -prod or -e2e, resulting in: +*DataDownloadV1 - prod* +*DataDownloadV1 - e2e* + +Now, services will be easy to identify. + +You can create rules based on any property/metadata. Some other placeholder's eamples: +{Service:DatabaseName} - E2E +{Service:WebServiceName} - {ProcessGroup:Kubernetes:microservice} - {ProcessGroup:Kubernetes:environment} +{Service:DetectedName} - {ProcessGroup:KubernetesContainerName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +{Service:DetectedName} - {ProcessGroup:SpringBootProfileName/[^\\-]*$} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_asbc-pki-oclisocsp/conditional-naming-service/conditional-naming-service.yaml b/BMW-Dynatrace-config/CD_asbc-pki-oclisocsp/conditional-naming-service/conditional-naming-service.yaml new file mode 100644 index 00000000..c8cab4fd --- /dev/null +++ b/BMW-Dynatrace-config/CD_asbc-pki-oclisocsp/conditional-naming-service/conditional-naming-service.yaml @@ -0,0 +1,8 @@ +config: +- CDasbc-pki-oclisocsp: template.json + +CDasbc-pki-oclisocsp: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: asbc-pki-oclisocsp +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_asbc-pki-oclisocsp/conditional-naming-service/template.json b/BMW-Dynatrace-config/CD_asbc-pki-oclisocsp/conditional-naming-service/template.json new file mode 100644 index 00000000..5d4fac56 --- /dev/null +++ b/BMW-Dynatrace-config/CD_asbc-pki-oclisocsp/conditional-naming-service/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "type": "SERVICE" +} \ 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 index d41c4c77..5f35e5c1 100644 --- 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 @@ -1,30 +1,4 @@ -## 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 configure custom services? -## 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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Custom+Services) page to configure your custom services. \ 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 index 92e734fa..1695924c 100644 --- a/BMW-Dynatrace-config/CD_asbc-pki-oclisocsp/synthetic-monitor/README.md +++ b/BMW-Dynatrace-config/CD_asbc-pki-oclisocsp/synthetic-monitor/README.md @@ -1,37 +1,4 @@ -# Synthetic Configuration -To calculate the Availability KPI, a synthetic must be configured. +### How to configure synthetics? -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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Synthetic+Monitors) page to configure your synthetics. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_asbc-sfa-oh/conditional-naming-processgroup/README.md b/BMW-Dynatrace-config/CD_asbc-sfa-oh/conditional-naming-processgroup/README.md new file mode 100644 index 00000000..f94196a5 --- /dev/null +++ b/BMW-Dynatrace-config/CD_asbc-sfa-oh/conditional-naming-processgroup/README.md @@ -0,0 +1,67 @@ +### Process Group Detection Rules and Naming + +#### Detection Rule or Naming? + +For the explanation, we're using a real example of the Infotainment application: + +!(PGNaming1)[../../../../img/PGNaming1.PNG] + +Before working with your dashboards and alerting profiles, an important task to do when working with Dynatrace is checking +the structure of your applications (process groups). You can do that clicking under *technologies* and filter using your +application Management Zone. + +In the picture above, there are two Process Groups called bon-information-prod. **If you see duplicated process groups like in** +**this case, you MUST follow this guideline** + +Next step would be to open both process groups and compare the metadata. In that way, you can identify if all process instances are +part of the same application or not. An easy way to do that is asking yourself: how many instances of my application do i have? + +If you have 4 instances in total and you're able to see 2 in one PG and other 2 in other PG it means that **they are part of the ** +**same application** + +Another situation could be that checking on the metadata, then you see that are **two different application** and Dynatrace is just naming +the process group in the same way + +*Same application* +- Problem: Dynatrace is creating two different process groups, what transalates in two separated services for the same application. Instead of +seeing all the traffic in one service, you will have it splitted and it will complicate your monitoring +- Solution: create a process group detection rule. Contact Dynatrace Expert + +*Different application* +- Problem: Dynatrace is just naming in the same way applications that are different. +- Solution: This case is less severe, since it can be fixed with a process group naming rule. + + +What about our example? +!(PGNaming2)[../../../../img/PGNaming2.PNG] +!(PGNaming3)[../../../../img/PGNaming3.PNG] + +Based on the feedback of the infotaiment team, each process group is a different application (microservice) and it's visible in the kubernetes container/workload +within the metadata of each Process Group. + +#### How to create a Process Group Detection Rule +1. Open the *conditional-naming-processgroup.yaml* file and create a rule that looks like this: +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName} +- tag: Infotainment +- skipDeployment: false +``` +The result of the rule will be renaming the PG to this: +``` +bon-information-prod ipa +bon-information-prod rsl +``` + +Other possible placeholders that you can use are for example: +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName/[^\\-]*$} +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesFullPodName/buffet-(.*?)-} +{ProcessGroup:DetectedName} - {HostGroup:Name/[^\\_]*$} +{ProcessGroup:KubernetesNamespace} +{ProcessGroup:CommandLineArgs/.*?\\-f\\s\\/www\\/(.*?)\\/generated\\/httpd\\.conf.*?} + +You can combine different ones. Check the (documentation)[link] for more \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_asbc-sfa-oh/conditional-naming-processgroup/conditional-naming-processgroup.yaml b/BMW-Dynatrace-config/CD_asbc-sfa-oh/conditional-naming-processgroup/conditional-naming-processgroup.yaml new file mode 100644 index 00000000..c9554c92 --- /dev/null +++ b/BMW-Dynatrace-config/CD_asbc-sfa-oh/conditional-naming-processgroup/conditional-naming-processgroup.yaml @@ -0,0 +1,8 @@ +config: +- CDasbc-sfa-oh: template.json + +CDasbc-sfa-oh: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: asbc-sfa-oh +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_asbc-sfa-oh/conditional-naming-processgroup/template.json b/BMW-Dynatrace-config/CD_asbc-sfa-oh/conditional-naming-processgroup/template.json new file mode 100644 index 00000000..7c039808 --- /dev/null +++ b/BMW-Dynatrace-config/CD_asbc-sfa-oh/conditional-naming-processgroup/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "type": "PROCESS_GROUP" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_asbc-sfa-oh/conditional-naming-service/README.md b/BMW-Dynatrace-config/CD_asbc-sfa-oh/conditional-naming-service/README.md new file mode 100644 index 00000000..c34ef308 --- /dev/null +++ b/BMW-Dynatrace-config/CD_asbc-sfa-oh/conditional-naming-service/README.md @@ -0,0 +1,35 @@ +### Service Naming Rules + +A typical case could be that you access to *Transaction & Services* and you find two services that are exactly the same: +*DataDownloadV1* +*DataDownloadV1* + +If you drilldown into the service and you check in the process group, you may have a PROD and a E2E for each service. + +*Note: if you see that both process group are exactly the same, please contact a Dynatrace expert to create a Process* +*Group detection rule* + +In the case the PG are PROD and E2E, then we need to create a rule that looks like this: + +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {Service:DetectedName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +- tag: Infotainment +- skipDeployment: false +``` + +The rule will get the Service Detected Name (current name) and it will extract (with a regex) the part of the kubernetes namespace after the "-", so -prod or -e2e, resulting in: +*DataDownloadV1 - prod* +*DataDownloadV1 - e2e* + +Now, services will be easy to identify. + +You can create rules based on any property/metadata. Some other placeholder's eamples: +{Service:DatabaseName} - E2E +{Service:WebServiceName} - {ProcessGroup:Kubernetes:microservice} - {ProcessGroup:Kubernetes:environment} +{Service:DetectedName} - {ProcessGroup:KubernetesContainerName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +{Service:DetectedName} - {ProcessGroup:SpringBootProfileName/[^\\-]*$} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_asbc-sfa-oh/conditional-naming-service/conditional-naming-service.yaml b/BMW-Dynatrace-config/CD_asbc-sfa-oh/conditional-naming-service/conditional-naming-service.yaml new file mode 100644 index 00000000..c9554c92 --- /dev/null +++ b/BMW-Dynatrace-config/CD_asbc-sfa-oh/conditional-naming-service/conditional-naming-service.yaml @@ -0,0 +1,8 @@ +config: +- CDasbc-sfa-oh: template.json + +CDasbc-sfa-oh: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: asbc-sfa-oh +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_asbc-sfa-oh/conditional-naming-service/template.json b/BMW-Dynatrace-config/CD_asbc-sfa-oh/conditional-naming-service/template.json new file mode 100644 index 00000000..5d4fac56 --- /dev/null +++ b/BMW-Dynatrace-config/CD_asbc-sfa-oh/conditional-naming-service/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "type": "SERVICE" +} \ 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 index d41c4c77..5f35e5c1 100644 --- 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 @@ -1,30 +1,4 @@ -## 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 configure custom services? -## 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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Custom+Services) page to configure your custom services. \ 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 index 92e734fa..1695924c 100644 --- a/BMW-Dynatrace-config/CD_asbc-sfa-oh/synthetic-monitor/README.md +++ b/BMW-Dynatrace-config/CD_asbc-sfa-oh/synthetic-monitor/README.md @@ -1,37 +1,4 @@ -# Synthetic Configuration -To calculate the Availability KPI, a synthetic must be configured. +### How to configure synthetics? -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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Synthetic+Monitors) page to configure your synthetics. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_asbc-sts/conditional-naming-processgroup/README.md b/BMW-Dynatrace-config/CD_asbc-sts/conditional-naming-processgroup/README.md new file mode 100644 index 00000000..f94196a5 --- /dev/null +++ b/BMW-Dynatrace-config/CD_asbc-sts/conditional-naming-processgroup/README.md @@ -0,0 +1,67 @@ +### Process Group Detection Rules and Naming + +#### Detection Rule or Naming? + +For the explanation, we're using a real example of the Infotainment application: + +!(PGNaming1)[../../../../img/PGNaming1.PNG] + +Before working with your dashboards and alerting profiles, an important task to do when working with Dynatrace is checking +the structure of your applications (process groups). You can do that clicking under *technologies* and filter using your +application Management Zone. + +In the picture above, there are two Process Groups called bon-information-prod. **If you see duplicated process groups like in** +**this case, you MUST follow this guideline** + +Next step would be to open both process groups and compare the metadata. In that way, you can identify if all process instances are +part of the same application or not. An easy way to do that is asking yourself: how many instances of my application do i have? + +If you have 4 instances in total and you're able to see 2 in one PG and other 2 in other PG it means that **they are part of the ** +**same application** + +Another situation could be that checking on the metadata, then you see that are **two different application** and Dynatrace is just naming +the process group in the same way + +*Same application* +- Problem: Dynatrace is creating two different process groups, what transalates in two separated services for the same application. Instead of +seeing all the traffic in one service, you will have it splitted and it will complicate your monitoring +- Solution: create a process group detection rule. Contact Dynatrace Expert + +*Different application* +- Problem: Dynatrace is just naming in the same way applications that are different. +- Solution: This case is less severe, since it can be fixed with a process group naming rule. + + +What about our example? +!(PGNaming2)[../../../../img/PGNaming2.PNG] +!(PGNaming3)[../../../../img/PGNaming3.PNG] + +Based on the feedback of the infotaiment team, each process group is a different application (microservice) and it's visible in the kubernetes container/workload +within the metadata of each Process Group. + +#### How to create a Process Group Detection Rule +1. Open the *conditional-naming-processgroup.yaml* file and create a rule that looks like this: +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName} +- tag: Infotainment +- skipDeployment: false +``` +The result of the rule will be renaming the PG to this: +``` +bon-information-prod ipa +bon-information-prod rsl +``` + +Other possible placeholders that you can use are for example: +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName/[^\\-]*$} +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesFullPodName/buffet-(.*?)-} +{ProcessGroup:DetectedName} - {HostGroup:Name/[^\\_]*$} +{ProcessGroup:KubernetesNamespace} +{ProcessGroup:CommandLineArgs/.*?\\-f\\s\\/www\\/(.*?)\\/generated\\/httpd\\.conf.*?} + +You can combine different ones. Check the (documentation)[link] for more \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_asbc-sts/conditional-naming-processgroup/conditional-naming-processgroup.yaml b/BMW-Dynatrace-config/CD_asbc-sts/conditional-naming-processgroup/conditional-naming-processgroup.yaml new file mode 100644 index 00000000..0fe300e9 --- /dev/null +++ b/BMW-Dynatrace-config/CD_asbc-sts/conditional-naming-processgroup/conditional-naming-processgroup.yaml @@ -0,0 +1,8 @@ +config: +- CDasbc-sts: template.json + +CDasbc-sts: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: asbc-sts +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_asbc-sts/conditional-naming-processgroup/template.json b/BMW-Dynatrace-config/CD_asbc-sts/conditional-naming-processgroup/template.json new file mode 100644 index 00000000..7c039808 --- /dev/null +++ b/BMW-Dynatrace-config/CD_asbc-sts/conditional-naming-processgroup/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "type": "PROCESS_GROUP" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_asbc-sts/conditional-naming-service/README.md b/BMW-Dynatrace-config/CD_asbc-sts/conditional-naming-service/README.md new file mode 100644 index 00000000..c34ef308 --- /dev/null +++ b/BMW-Dynatrace-config/CD_asbc-sts/conditional-naming-service/README.md @@ -0,0 +1,35 @@ +### Service Naming Rules + +A typical case could be that you access to *Transaction & Services* and you find two services that are exactly the same: +*DataDownloadV1* +*DataDownloadV1* + +If you drilldown into the service and you check in the process group, you may have a PROD and a E2E for each service. + +*Note: if you see that both process group are exactly the same, please contact a Dynatrace expert to create a Process* +*Group detection rule* + +In the case the PG are PROD and E2E, then we need to create a rule that looks like this: + +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {Service:DetectedName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +- tag: Infotainment +- skipDeployment: false +``` + +The rule will get the Service Detected Name (current name) and it will extract (with a regex) the part of the kubernetes namespace after the "-", so -prod or -e2e, resulting in: +*DataDownloadV1 - prod* +*DataDownloadV1 - e2e* + +Now, services will be easy to identify. + +You can create rules based on any property/metadata. Some other placeholder's eamples: +{Service:DatabaseName} - E2E +{Service:WebServiceName} - {ProcessGroup:Kubernetes:microservice} - {ProcessGroup:Kubernetes:environment} +{Service:DetectedName} - {ProcessGroup:KubernetesContainerName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +{Service:DetectedName} - {ProcessGroup:SpringBootProfileName/[^\\-]*$} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_asbc-sts/conditional-naming-service/conditional-naming-service.yaml b/BMW-Dynatrace-config/CD_asbc-sts/conditional-naming-service/conditional-naming-service.yaml new file mode 100644 index 00000000..0fe300e9 --- /dev/null +++ b/BMW-Dynatrace-config/CD_asbc-sts/conditional-naming-service/conditional-naming-service.yaml @@ -0,0 +1,8 @@ +config: +- CDasbc-sts: template.json + +CDasbc-sts: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: asbc-sts +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_asbc-sts/conditional-naming-service/template.json b/BMW-Dynatrace-config/CD_asbc-sts/conditional-naming-service/template.json new file mode 100644 index 00000000..5d4fac56 --- /dev/null +++ b/BMW-Dynatrace-config/CD_asbc-sts/conditional-naming-service/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "type": "SERVICE" +} \ 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 index d41c4c77..5f35e5c1 100644 --- a/BMW-Dynatrace-config/CD_asbc-sts/custom-service-java/README.md +++ b/BMW-Dynatrace-config/CD_asbc-sts/custom-service-java/README.md @@ -1,30 +1,4 @@ -## 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 configure custom services? -## 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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Custom+Services) page to configure your custom services. \ 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 index 92e734fa..1695924c 100644 --- a/BMW-Dynatrace-config/CD_asbc-sts/synthetic-monitor/README.md +++ b/BMW-Dynatrace-config/CD_asbc-sts/synthetic-monitor/README.md @@ -1,37 +1,4 @@ -# Synthetic Configuration -To calculate the Availability KPI, a synthetic must be configured. +### How to configure synthetics? -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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Synthetic+Monitors) page to configure your synthetics. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_asbctvp/conditional-naming-processgroup/README.md b/BMW-Dynatrace-config/CD_asbctvp/conditional-naming-processgroup/README.md new file mode 100644 index 00000000..f94196a5 --- /dev/null +++ b/BMW-Dynatrace-config/CD_asbctvp/conditional-naming-processgroup/README.md @@ -0,0 +1,67 @@ +### Process Group Detection Rules and Naming + +#### Detection Rule or Naming? + +For the explanation, we're using a real example of the Infotainment application: + +!(PGNaming1)[../../../../img/PGNaming1.PNG] + +Before working with your dashboards and alerting profiles, an important task to do when working with Dynatrace is checking +the structure of your applications (process groups). You can do that clicking under *technologies* and filter using your +application Management Zone. + +In the picture above, there are two Process Groups called bon-information-prod. **If you see duplicated process groups like in** +**this case, you MUST follow this guideline** + +Next step would be to open both process groups and compare the metadata. In that way, you can identify if all process instances are +part of the same application or not. An easy way to do that is asking yourself: how many instances of my application do i have? + +If you have 4 instances in total and you're able to see 2 in one PG and other 2 in other PG it means that **they are part of the ** +**same application** + +Another situation could be that checking on the metadata, then you see that are **two different application** and Dynatrace is just naming +the process group in the same way + +*Same application* +- Problem: Dynatrace is creating two different process groups, what transalates in two separated services for the same application. Instead of +seeing all the traffic in one service, you will have it splitted and it will complicate your monitoring +- Solution: create a process group detection rule. Contact Dynatrace Expert + +*Different application* +- Problem: Dynatrace is just naming in the same way applications that are different. +- Solution: This case is less severe, since it can be fixed with a process group naming rule. + + +What about our example? +!(PGNaming2)[../../../../img/PGNaming2.PNG] +!(PGNaming3)[../../../../img/PGNaming3.PNG] + +Based on the feedback of the infotaiment team, each process group is a different application (microservice) and it's visible in the kubernetes container/workload +within the metadata of each Process Group. + +#### How to create a Process Group Detection Rule +1. Open the *conditional-naming-processgroup.yaml* file and create a rule that looks like this: +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName} +- tag: Infotainment +- skipDeployment: false +``` +The result of the rule will be renaming the PG to this: +``` +bon-information-prod ipa +bon-information-prod rsl +``` + +Other possible placeholders that you can use are for example: +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName/[^\\-]*$} +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesFullPodName/buffet-(.*?)-} +{ProcessGroup:DetectedName} - {HostGroup:Name/[^\\_]*$} +{ProcessGroup:KubernetesNamespace} +{ProcessGroup:CommandLineArgs/.*?\\-f\\s\\/www\\/(.*?)\\/generated\\/httpd\\.conf.*?} + +You can combine different ones. Check the (documentation)[link] for more \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_asbctvp/conditional-naming-processgroup/conditional-naming-processgroup.yaml b/BMW-Dynatrace-config/CD_asbctvp/conditional-naming-processgroup/conditional-naming-processgroup.yaml new file mode 100644 index 00000000..f827ad21 --- /dev/null +++ b/BMW-Dynatrace-config/CD_asbctvp/conditional-naming-processgroup/conditional-naming-processgroup.yaml @@ -0,0 +1,8 @@ +config: +- CDasbctvp: template.json + +CDasbctvp: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: asbctvp +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_asbctvp/conditional-naming-processgroup/template.json b/BMW-Dynatrace-config/CD_asbctvp/conditional-naming-processgroup/template.json new file mode 100644 index 00000000..7c039808 --- /dev/null +++ b/BMW-Dynatrace-config/CD_asbctvp/conditional-naming-processgroup/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "type": "PROCESS_GROUP" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_asbctvp/conditional-naming-service/README.md b/BMW-Dynatrace-config/CD_asbctvp/conditional-naming-service/README.md new file mode 100644 index 00000000..c34ef308 --- /dev/null +++ b/BMW-Dynatrace-config/CD_asbctvp/conditional-naming-service/README.md @@ -0,0 +1,35 @@ +### Service Naming Rules + +A typical case could be that you access to *Transaction & Services* and you find two services that are exactly the same: +*DataDownloadV1* +*DataDownloadV1* + +If you drilldown into the service and you check in the process group, you may have a PROD and a E2E for each service. + +*Note: if you see that both process group are exactly the same, please contact a Dynatrace expert to create a Process* +*Group detection rule* + +In the case the PG are PROD and E2E, then we need to create a rule that looks like this: + +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {Service:DetectedName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +- tag: Infotainment +- skipDeployment: false +``` + +The rule will get the Service Detected Name (current name) and it will extract (with a regex) the part of the kubernetes namespace after the "-", so -prod or -e2e, resulting in: +*DataDownloadV1 - prod* +*DataDownloadV1 - e2e* + +Now, services will be easy to identify. + +You can create rules based on any property/metadata. Some other placeholder's eamples: +{Service:DatabaseName} - E2E +{Service:WebServiceName} - {ProcessGroup:Kubernetes:microservice} - {ProcessGroup:Kubernetes:environment} +{Service:DetectedName} - {ProcessGroup:KubernetesContainerName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +{Service:DetectedName} - {ProcessGroup:SpringBootProfileName/[^\\-]*$} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_asbctvp/conditional-naming-service/conditional-naming-service.yaml b/BMW-Dynatrace-config/CD_asbctvp/conditional-naming-service/conditional-naming-service.yaml new file mode 100644 index 00000000..f827ad21 --- /dev/null +++ b/BMW-Dynatrace-config/CD_asbctvp/conditional-naming-service/conditional-naming-service.yaml @@ -0,0 +1,8 @@ +config: +- CDasbctvp: template.json + +CDasbctvp: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: asbctvp +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_asbctvp/conditional-naming-service/template.json b/BMW-Dynatrace-config/CD_asbctvp/conditional-naming-service/template.json new file mode 100644 index 00000000..5d4fac56 --- /dev/null +++ b/BMW-Dynatrace-config/CD_asbctvp/conditional-naming-service/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "type": "SERVICE" +} \ 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 index d41c4c77..5f35e5c1 100644 --- a/BMW-Dynatrace-config/CD_asbctvp/custom-service-java/README.md +++ b/BMW-Dynatrace-config/CD_asbctvp/custom-service-java/README.md @@ -1,30 +1,4 @@ -## 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 configure custom services? -## 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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Custom+Services) page to configure your custom services. \ 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 index 92e734fa..1695924c 100644 --- a/BMW-Dynatrace-config/CD_asbctvp/synthetic-monitor/README.md +++ b/BMW-Dynatrace-config/CD_asbctvp/synthetic-monitor/README.md @@ -1,37 +1,4 @@ -# Synthetic Configuration -To calculate the Availability KPI, a synthetic must be configured. +### How to configure synthetics? -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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Synthetic+Monitors) page to configure your synthetics. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_avs-client-service/conditional-naming-processgroup/README.md b/BMW-Dynatrace-config/CD_avs-client-service/conditional-naming-processgroup/README.md new file mode 100644 index 00000000..f94196a5 --- /dev/null +++ b/BMW-Dynatrace-config/CD_avs-client-service/conditional-naming-processgroup/README.md @@ -0,0 +1,67 @@ +### Process Group Detection Rules and Naming + +#### Detection Rule or Naming? + +For the explanation, we're using a real example of the Infotainment application: + +!(PGNaming1)[../../../../img/PGNaming1.PNG] + +Before working with your dashboards and alerting profiles, an important task to do when working with Dynatrace is checking +the structure of your applications (process groups). You can do that clicking under *technologies* and filter using your +application Management Zone. + +In the picture above, there are two Process Groups called bon-information-prod. **If you see duplicated process groups like in** +**this case, you MUST follow this guideline** + +Next step would be to open both process groups and compare the metadata. In that way, you can identify if all process instances are +part of the same application or not. An easy way to do that is asking yourself: how many instances of my application do i have? + +If you have 4 instances in total and you're able to see 2 in one PG and other 2 in other PG it means that **they are part of the ** +**same application** + +Another situation could be that checking on the metadata, then you see that are **two different application** and Dynatrace is just naming +the process group in the same way + +*Same application* +- Problem: Dynatrace is creating two different process groups, what transalates in two separated services for the same application. Instead of +seeing all the traffic in one service, you will have it splitted and it will complicate your monitoring +- Solution: create a process group detection rule. Contact Dynatrace Expert + +*Different application* +- Problem: Dynatrace is just naming in the same way applications that are different. +- Solution: This case is less severe, since it can be fixed with a process group naming rule. + + +What about our example? +!(PGNaming2)[../../../../img/PGNaming2.PNG] +!(PGNaming3)[../../../../img/PGNaming3.PNG] + +Based on the feedback of the infotaiment team, each process group is a different application (microservice) and it's visible in the kubernetes container/workload +within the metadata of each Process Group. + +#### How to create a Process Group Detection Rule +1. Open the *conditional-naming-processgroup.yaml* file and create a rule that looks like this: +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName} +- tag: Infotainment +- skipDeployment: false +``` +The result of the rule will be renaming the PG to this: +``` +bon-information-prod ipa +bon-information-prod rsl +``` + +Other possible placeholders that you can use are for example: +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName/[^\\-]*$} +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesFullPodName/buffet-(.*?)-} +{ProcessGroup:DetectedName} - {HostGroup:Name/[^\\_]*$} +{ProcessGroup:KubernetesNamespace} +{ProcessGroup:CommandLineArgs/.*?\\-f\\s\\/www\\/(.*?)\\/generated\\/httpd\\.conf.*?} + +You can combine different ones. Check the (documentation)[link] for more \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_avs-client-service/conditional-naming-processgroup/conditional-naming-processgroup.yaml b/BMW-Dynatrace-config/CD_avs-client-service/conditional-naming-processgroup/conditional-naming-processgroup.yaml new file mode 100644 index 00000000..2ad36156 --- /dev/null +++ b/BMW-Dynatrace-config/CD_avs-client-service/conditional-naming-processgroup/conditional-naming-processgroup.yaml @@ -0,0 +1,8 @@ +config: +- CDavs-client-service: template.json + +CDavs-client-service: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: avs-client-service +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_avs-client-service/conditional-naming-processgroup/template.json b/BMW-Dynatrace-config/CD_avs-client-service/conditional-naming-processgroup/template.json new file mode 100644 index 00000000..7c039808 --- /dev/null +++ b/BMW-Dynatrace-config/CD_avs-client-service/conditional-naming-processgroup/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "type": "PROCESS_GROUP" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_avs-client-service/conditional-naming-service/README.md b/BMW-Dynatrace-config/CD_avs-client-service/conditional-naming-service/README.md new file mode 100644 index 00000000..c34ef308 --- /dev/null +++ b/BMW-Dynatrace-config/CD_avs-client-service/conditional-naming-service/README.md @@ -0,0 +1,35 @@ +### Service Naming Rules + +A typical case could be that you access to *Transaction & Services* and you find two services that are exactly the same: +*DataDownloadV1* +*DataDownloadV1* + +If you drilldown into the service and you check in the process group, you may have a PROD and a E2E for each service. + +*Note: if you see that both process group are exactly the same, please contact a Dynatrace expert to create a Process* +*Group detection rule* + +In the case the PG are PROD and E2E, then we need to create a rule that looks like this: + +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {Service:DetectedName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +- tag: Infotainment +- skipDeployment: false +``` + +The rule will get the Service Detected Name (current name) and it will extract (with a regex) the part of the kubernetes namespace after the "-", so -prod or -e2e, resulting in: +*DataDownloadV1 - prod* +*DataDownloadV1 - e2e* + +Now, services will be easy to identify. + +You can create rules based on any property/metadata. Some other placeholder's eamples: +{Service:DatabaseName} - E2E +{Service:WebServiceName} - {ProcessGroup:Kubernetes:microservice} - {ProcessGroup:Kubernetes:environment} +{Service:DetectedName} - {ProcessGroup:KubernetesContainerName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +{Service:DetectedName} - {ProcessGroup:SpringBootProfileName/[^\\-]*$} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_avs-client-service/conditional-naming-service/conditional-naming-service.yaml b/BMW-Dynatrace-config/CD_avs-client-service/conditional-naming-service/conditional-naming-service.yaml new file mode 100644 index 00000000..2ad36156 --- /dev/null +++ b/BMW-Dynatrace-config/CD_avs-client-service/conditional-naming-service/conditional-naming-service.yaml @@ -0,0 +1,8 @@ +config: +- CDavs-client-service: template.json + +CDavs-client-service: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: avs-client-service +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_avs-client-service/conditional-naming-service/template.json b/BMW-Dynatrace-config/CD_avs-client-service/conditional-naming-service/template.json new file mode 100644 index 00000000..5d4fac56 --- /dev/null +++ b/BMW-Dynatrace-config/CD_avs-client-service/conditional-naming-service/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "type": "SERVICE" +} \ 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 index d41c4c77..5f35e5c1 100644 --- 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 @@ -1,30 +1,4 @@ -## 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 configure custom services? -## 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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Custom+Services) page to configure your custom services. \ 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 index 92e734fa..1695924c 100644 --- a/BMW-Dynatrace-config/CD_avs-client-service/synthetic-monitor/README.md +++ b/BMW-Dynatrace-config/CD_avs-client-service/synthetic-monitor/README.md @@ -1,37 +1,4 @@ -# Synthetic Configuration -To calculate the Availability KPI, a synthetic must be configured. +### How to configure synthetics? -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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Synthetic+Monitors) page to configure your synthetics. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_avs-proxy-composite-service/conditional-naming-processgroup/README.md b/BMW-Dynatrace-config/CD_avs-proxy-composite-service/conditional-naming-processgroup/README.md new file mode 100644 index 00000000..f94196a5 --- /dev/null +++ b/BMW-Dynatrace-config/CD_avs-proxy-composite-service/conditional-naming-processgroup/README.md @@ -0,0 +1,67 @@ +### Process Group Detection Rules and Naming + +#### Detection Rule or Naming? + +For the explanation, we're using a real example of the Infotainment application: + +!(PGNaming1)[../../../../img/PGNaming1.PNG] + +Before working with your dashboards and alerting profiles, an important task to do when working with Dynatrace is checking +the structure of your applications (process groups). You can do that clicking under *technologies* and filter using your +application Management Zone. + +In the picture above, there are two Process Groups called bon-information-prod. **If you see duplicated process groups like in** +**this case, you MUST follow this guideline** + +Next step would be to open both process groups and compare the metadata. In that way, you can identify if all process instances are +part of the same application or not. An easy way to do that is asking yourself: how many instances of my application do i have? + +If you have 4 instances in total and you're able to see 2 in one PG and other 2 in other PG it means that **they are part of the ** +**same application** + +Another situation could be that checking on the metadata, then you see that are **two different application** and Dynatrace is just naming +the process group in the same way + +*Same application* +- Problem: Dynatrace is creating two different process groups, what transalates in two separated services for the same application. Instead of +seeing all the traffic in one service, you will have it splitted and it will complicate your monitoring +- Solution: create a process group detection rule. Contact Dynatrace Expert + +*Different application* +- Problem: Dynatrace is just naming in the same way applications that are different. +- Solution: This case is less severe, since it can be fixed with a process group naming rule. + + +What about our example? +!(PGNaming2)[../../../../img/PGNaming2.PNG] +!(PGNaming3)[../../../../img/PGNaming3.PNG] + +Based on the feedback of the infotaiment team, each process group is a different application (microservice) and it's visible in the kubernetes container/workload +within the metadata of each Process Group. + +#### How to create a Process Group Detection Rule +1. Open the *conditional-naming-processgroup.yaml* file and create a rule that looks like this: +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName} +- tag: Infotainment +- skipDeployment: false +``` +The result of the rule will be renaming the PG to this: +``` +bon-information-prod ipa +bon-information-prod rsl +``` + +Other possible placeholders that you can use are for example: +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName/[^\\-]*$} +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesFullPodName/buffet-(.*?)-} +{ProcessGroup:DetectedName} - {HostGroup:Name/[^\\_]*$} +{ProcessGroup:KubernetesNamespace} +{ProcessGroup:CommandLineArgs/.*?\\-f\\s\\/www\\/(.*?)\\/generated\\/httpd\\.conf.*?} + +You can combine different ones. Check the (documentation)[link] for more \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_avs-proxy-composite-service/conditional-naming-processgroup/conditional-naming-processgroup.yaml b/BMW-Dynatrace-config/CD_avs-proxy-composite-service/conditional-naming-processgroup/conditional-naming-processgroup.yaml new file mode 100644 index 00000000..fd060ab6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_avs-proxy-composite-service/conditional-naming-processgroup/conditional-naming-processgroup.yaml @@ -0,0 +1,8 @@ +config: +- CDavs-proxy-composite-service: template.json + +CDavs-proxy-composite-service: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: avs-proxy-composite-service +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_avs-proxy-composite-service/conditional-naming-processgroup/template.json b/BMW-Dynatrace-config/CD_avs-proxy-composite-service/conditional-naming-processgroup/template.json new file mode 100644 index 00000000..7c039808 --- /dev/null +++ b/BMW-Dynatrace-config/CD_avs-proxy-composite-service/conditional-naming-processgroup/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "type": "PROCESS_GROUP" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_avs-proxy-composite-service/conditional-naming-service/README.md b/BMW-Dynatrace-config/CD_avs-proxy-composite-service/conditional-naming-service/README.md new file mode 100644 index 00000000..c34ef308 --- /dev/null +++ b/BMW-Dynatrace-config/CD_avs-proxy-composite-service/conditional-naming-service/README.md @@ -0,0 +1,35 @@ +### Service Naming Rules + +A typical case could be that you access to *Transaction & Services* and you find two services that are exactly the same: +*DataDownloadV1* +*DataDownloadV1* + +If you drilldown into the service and you check in the process group, you may have a PROD and a E2E for each service. + +*Note: if you see that both process group are exactly the same, please contact a Dynatrace expert to create a Process* +*Group detection rule* + +In the case the PG are PROD and E2E, then we need to create a rule that looks like this: + +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {Service:DetectedName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +- tag: Infotainment +- skipDeployment: false +``` + +The rule will get the Service Detected Name (current name) and it will extract (with a regex) the part of the kubernetes namespace after the "-", so -prod or -e2e, resulting in: +*DataDownloadV1 - prod* +*DataDownloadV1 - e2e* + +Now, services will be easy to identify. + +You can create rules based on any property/metadata. Some other placeholder's eamples: +{Service:DatabaseName} - E2E +{Service:WebServiceName} - {ProcessGroup:Kubernetes:microservice} - {ProcessGroup:Kubernetes:environment} +{Service:DetectedName} - {ProcessGroup:KubernetesContainerName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +{Service:DetectedName} - {ProcessGroup:SpringBootProfileName/[^\\-]*$} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_avs-proxy-composite-service/conditional-naming-service/conditional-naming-service.yaml b/BMW-Dynatrace-config/CD_avs-proxy-composite-service/conditional-naming-service/conditional-naming-service.yaml new file mode 100644 index 00000000..fd060ab6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_avs-proxy-composite-service/conditional-naming-service/conditional-naming-service.yaml @@ -0,0 +1,8 @@ +config: +- CDavs-proxy-composite-service: template.json + +CDavs-proxy-composite-service: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: avs-proxy-composite-service +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_avs-proxy-composite-service/conditional-naming-service/template.json b/BMW-Dynatrace-config/CD_avs-proxy-composite-service/conditional-naming-service/template.json new file mode 100644 index 00000000..5d4fac56 --- /dev/null +++ b/BMW-Dynatrace-config/CD_avs-proxy-composite-service/conditional-naming-service/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "type": "SERVICE" +} \ 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 index d41c4c77..5f35e5c1 100644 --- 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 @@ -1,30 +1,4 @@ -## 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 configure custom services? -## 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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Custom+Services) page to configure your custom services. \ 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 index 92e734fa..1695924c 100644 --- 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 @@ -1,37 +1,4 @@ -# Synthetic Configuration -To calculate the Availability KPI, a synthetic must be configured. +### How to configure synthetics? -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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Synthetic+Monitors) page to configure your synthetics. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_b2v-com-be/conditional-naming-processgroup/README.md b/BMW-Dynatrace-config/CD_b2v-com-be/conditional-naming-processgroup/README.md new file mode 100644 index 00000000..f94196a5 --- /dev/null +++ b/BMW-Dynatrace-config/CD_b2v-com-be/conditional-naming-processgroup/README.md @@ -0,0 +1,67 @@ +### Process Group Detection Rules and Naming + +#### Detection Rule or Naming? + +For the explanation, we're using a real example of the Infotainment application: + +!(PGNaming1)[../../../../img/PGNaming1.PNG] + +Before working with your dashboards and alerting profiles, an important task to do when working with Dynatrace is checking +the structure of your applications (process groups). You can do that clicking under *technologies* and filter using your +application Management Zone. + +In the picture above, there are two Process Groups called bon-information-prod. **If you see duplicated process groups like in** +**this case, you MUST follow this guideline** + +Next step would be to open both process groups and compare the metadata. In that way, you can identify if all process instances are +part of the same application or not. An easy way to do that is asking yourself: how many instances of my application do i have? + +If you have 4 instances in total and you're able to see 2 in one PG and other 2 in other PG it means that **they are part of the ** +**same application** + +Another situation could be that checking on the metadata, then you see that are **two different application** and Dynatrace is just naming +the process group in the same way + +*Same application* +- Problem: Dynatrace is creating two different process groups, what transalates in two separated services for the same application. Instead of +seeing all the traffic in one service, you will have it splitted and it will complicate your monitoring +- Solution: create a process group detection rule. Contact Dynatrace Expert + +*Different application* +- Problem: Dynatrace is just naming in the same way applications that are different. +- Solution: This case is less severe, since it can be fixed with a process group naming rule. + + +What about our example? +!(PGNaming2)[../../../../img/PGNaming2.PNG] +!(PGNaming3)[../../../../img/PGNaming3.PNG] + +Based on the feedback of the infotaiment team, each process group is a different application (microservice) and it's visible in the kubernetes container/workload +within the metadata of each Process Group. + +#### How to create a Process Group Detection Rule +1. Open the *conditional-naming-processgroup.yaml* file and create a rule that looks like this: +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName} +- tag: Infotainment +- skipDeployment: false +``` +The result of the rule will be renaming the PG to this: +``` +bon-information-prod ipa +bon-information-prod rsl +``` + +Other possible placeholders that you can use are for example: +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName/[^\\-]*$} +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesFullPodName/buffet-(.*?)-} +{ProcessGroup:DetectedName} - {HostGroup:Name/[^\\_]*$} +{ProcessGroup:KubernetesNamespace} +{ProcessGroup:CommandLineArgs/.*?\\-f\\s\\/www\\/(.*?)\\/generated\\/httpd\\.conf.*?} + +You can combine different ones. Check the (documentation)[link] for more \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_b2v-com-be/conditional-naming-processgroup/conditional-naming-processgroup.yaml b/BMW-Dynatrace-config/CD_b2v-com-be/conditional-naming-processgroup/conditional-naming-processgroup.yaml new file mode 100644 index 00000000..baf5b817 --- /dev/null +++ b/BMW-Dynatrace-config/CD_b2v-com-be/conditional-naming-processgroup/conditional-naming-processgroup.yaml @@ -0,0 +1,8 @@ +config: +- CDb2v-com-be: template.json + +CDb2v-com-be: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: b2v-com-be +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_b2v-com-be/conditional-naming-processgroup/template.json b/BMW-Dynatrace-config/CD_b2v-com-be/conditional-naming-processgroup/template.json new file mode 100644 index 00000000..7c039808 --- /dev/null +++ b/BMW-Dynatrace-config/CD_b2v-com-be/conditional-naming-processgroup/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "type": "PROCESS_GROUP" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_b2v-com-be/conditional-naming-service/README.md b/BMW-Dynatrace-config/CD_b2v-com-be/conditional-naming-service/README.md new file mode 100644 index 00000000..c34ef308 --- /dev/null +++ b/BMW-Dynatrace-config/CD_b2v-com-be/conditional-naming-service/README.md @@ -0,0 +1,35 @@ +### Service Naming Rules + +A typical case could be that you access to *Transaction & Services* and you find two services that are exactly the same: +*DataDownloadV1* +*DataDownloadV1* + +If you drilldown into the service and you check in the process group, you may have a PROD and a E2E for each service. + +*Note: if you see that both process group are exactly the same, please contact a Dynatrace expert to create a Process* +*Group detection rule* + +In the case the PG are PROD and E2E, then we need to create a rule that looks like this: + +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {Service:DetectedName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +- tag: Infotainment +- skipDeployment: false +``` + +The rule will get the Service Detected Name (current name) and it will extract (with a regex) the part of the kubernetes namespace after the "-", so -prod or -e2e, resulting in: +*DataDownloadV1 - prod* +*DataDownloadV1 - e2e* + +Now, services will be easy to identify. + +You can create rules based on any property/metadata. Some other placeholder's eamples: +{Service:DatabaseName} - E2E +{Service:WebServiceName} - {ProcessGroup:Kubernetes:microservice} - {ProcessGroup:Kubernetes:environment} +{Service:DetectedName} - {ProcessGroup:KubernetesContainerName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +{Service:DetectedName} - {ProcessGroup:SpringBootProfileName/[^\\-]*$} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_b2v-com-be/conditional-naming-service/conditional-naming-service.yaml b/BMW-Dynatrace-config/CD_b2v-com-be/conditional-naming-service/conditional-naming-service.yaml new file mode 100644 index 00000000..baf5b817 --- /dev/null +++ b/BMW-Dynatrace-config/CD_b2v-com-be/conditional-naming-service/conditional-naming-service.yaml @@ -0,0 +1,8 @@ +config: +- CDb2v-com-be: template.json + +CDb2v-com-be: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: b2v-com-be +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_b2v-com-be/conditional-naming-service/template.json b/BMW-Dynatrace-config/CD_b2v-com-be/conditional-naming-service/template.json new file mode 100644 index 00000000..5d4fac56 --- /dev/null +++ b/BMW-Dynatrace-config/CD_b2v-com-be/conditional-naming-service/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "type": "SERVICE" +} \ 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 index d41c4c77..5f35e5c1 100644 --- 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 @@ -1,30 +1,4 @@ -## 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 configure custom services? -## 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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Custom+Services) page to configure your custom services. \ 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 index 92e734fa..1695924c 100644 --- a/BMW-Dynatrace-config/CD_b2v-com-be/synthetic-monitor/README.md +++ b/BMW-Dynatrace-config/CD_b2v-com-be/synthetic-monitor/README.md @@ -1,37 +1,4 @@ -# Synthetic Configuration -To calculate the Availability KPI, a synthetic must be configured. +### How to configure synthetics? -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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Synthetic+Monitors) page to configure your synthetics. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_b2v-com-echo/conditional-naming-processgroup/README.md b/BMW-Dynatrace-config/CD_b2v-com-echo/conditional-naming-processgroup/README.md new file mode 100644 index 00000000..f94196a5 --- /dev/null +++ b/BMW-Dynatrace-config/CD_b2v-com-echo/conditional-naming-processgroup/README.md @@ -0,0 +1,67 @@ +### Process Group Detection Rules and Naming + +#### Detection Rule or Naming? + +For the explanation, we're using a real example of the Infotainment application: + +!(PGNaming1)[../../../../img/PGNaming1.PNG] + +Before working with your dashboards and alerting profiles, an important task to do when working with Dynatrace is checking +the structure of your applications (process groups). You can do that clicking under *technologies* and filter using your +application Management Zone. + +In the picture above, there are two Process Groups called bon-information-prod. **If you see duplicated process groups like in** +**this case, you MUST follow this guideline** + +Next step would be to open both process groups and compare the metadata. In that way, you can identify if all process instances are +part of the same application or not. An easy way to do that is asking yourself: how many instances of my application do i have? + +If you have 4 instances in total and you're able to see 2 in one PG and other 2 in other PG it means that **they are part of the ** +**same application** + +Another situation could be that checking on the metadata, then you see that are **two different application** and Dynatrace is just naming +the process group in the same way + +*Same application* +- Problem: Dynatrace is creating two different process groups, what transalates in two separated services for the same application. Instead of +seeing all the traffic in one service, you will have it splitted and it will complicate your monitoring +- Solution: create a process group detection rule. Contact Dynatrace Expert + +*Different application* +- Problem: Dynatrace is just naming in the same way applications that are different. +- Solution: This case is less severe, since it can be fixed with a process group naming rule. + + +What about our example? +!(PGNaming2)[../../../../img/PGNaming2.PNG] +!(PGNaming3)[../../../../img/PGNaming3.PNG] + +Based on the feedback of the infotaiment team, each process group is a different application (microservice) and it's visible in the kubernetes container/workload +within the metadata of each Process Group. + +#### How to create a Process Group Detection Rule +1. Open the *conditional-naming-processgroup.yaml* file and create a rule that looks like this: +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName} +- tag: Infotainment +- skipDeployment: false +``` +The result of the rule will be renaming the PG to this: +``` +bon-information-prod ipa +bon-information-prod rsl +``` + +Other possible placeholders that you can use are for example: +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName/[^\\-]*$} +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesFullPodName/buffet-(.*?)-} +{ProcessGroup:DetectedName} - {HostGroup:Name/[^\\_]*$} +{ProcessGroup:KubernetesNamespace} +{ProcessGroup:CommandLineArgs/.*?\\-f\\s\\/www\\/(.*?)\\/generated\\/httpd\\.conf.*?} + +You can combine different ones. Check the (documentation)[link] for more \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_b2v-com-echo/conditional-naming-processgroup/conditional-naming-processgroup.yaml b/BMW-Dynatrace-config/CD_b2v-com-echo/conditional-naming-processgroup/conditional-naming-processgroup.yaml new file mode 100644 index 00000000..5d9e598e --- /dev/null +++ b/BMW-Dynatrace-config/CD_b2v-com-echo/conditional-naming-processgroup/conditional-naming-processgroup.yaml @@ -0,0 +1,8 @@ +config: +- CDb2v-com-echo: template.json + +CDb2v-com-echo: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: b2v-com-echo +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_b2v-com-echo/conditional-naming-processgroup/template.json b/BMW-Dynatrace-config/CD_b2v-com-echo/conditional-naming-processgroup/template.json new file mode 100644 index 00000000..7c039808 --- /dev/null +++ b/BMW-Dynatrace-config/CD_b2v-com-echo/conditional-naming-processgroup/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "type": "PROCESS_GROUP" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_b2v-com-echo/conditional-naming-service/README.md b/BMW-Dynatrace-config/CD_b2v-com-echo/conditional-naming-service/README.md new file mode 100644 index 00000000..c34ef308 --- /dev/null +++ b/BMW-Dynatrace-config/CD_b2v-com-echo/conditional-naming-service/README.md @@ -0,0 +1,35 @@ +### Service Naming Rules + +A typical case could be that you access to *Transaction & Services* and you find two services that are exactly the same: +*DataDownloadV1* +*DataDownloadV1* + +If you drilldown into the service and you check in the process group, you may have a PROD and a E2E for each service. + +*Note: if you see that both process group are exactly the same, please contact a Dynatrace expert to create a Process* +*Group detection rule* + +In the case the PG are PROD and E2E, then we need to create a rule that looks like this: + +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {Service:DetectedName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +- tag: Infotainment +- skipDeployment: false +``` + +The rule will get the Service Detected Name (current name) and it will extract (with a regex) the part of the kubernetes namespace after the "-", so -prod or -e2e, resulting in: +*DataDownloadV1 - prod* +*DataDownloadV1 - e2e* + +Now, services will be easy to identify. + +You can create rules based on any property/metadata. Some other placeholder's eamples: +{Service:DatabaseName} - E2E +{Service:WebServiceName} - {ProcessGroup:Kubernetes:microservice} - {ProcessGroup:Kubernetes:environment} +{Service:DetectedName} - {ProcessGroup:KubernetesContainerName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +{Service:DetectedName} - {ProcessGroup:SpringBootProfileName/[^\\-]*$} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_b2v-com-echo/conditional-naming-service/conditional-naming-service.yaml b/BMW-Dynatrace-config/CD_b2v-com-echo/conditional-naming-service/conditional-naming-service.yaml new file mode 100644 index 00000000..5d9e598e --- /dev/null +++ b/BMW-Dynatrace-config/CD_b2v-com-echo/conditional-naming-service/conditional-naming-service.yaml @@ -0,0 +1,8 @@ +config: +- CDb2v-com-echo: template.json + +CDb2v-com-echo: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: b2v-com-echo +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_b2v-com-echo/conditional-naming-service/template.json b/BMW-Dynatrace-config/CD_b2v-com-echo/conditional-naming-service/template.json new file mode 100644 index 00000000..5d4fac56 --- /dev/null +++ b/BMW-Dynatrace-config/CD_b2v-com-echo/conditional-naming-service/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "type": "SERVICE" +} \ 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 index d41c4c77..5f35e5c1 100644 --- 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 @@ -1,30 +1,4 @@ -## 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 configure custom services? -## 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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Custom+Services) page to configure your custom services. \ 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 index 92e734fa..1695924c 100644 --- a/BMW-Dynatrace-config/CD_b2v-com-echo/synthetic-monitor/README.md +++ b/BMW-Dynatrace-config/CD_b2v-com-echo/synthetic-monitor/README.md @@ -1,37 +1,4 @@ -# Synthetic Configuration -To calculate the Availability KPI, a synthetic must be configured. +### How to configure synthetics? -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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Synthetic+Monitors) page to configure your synthetics. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_b2v-com-fe/conditional-naming-processgroup/README.md b/BMW-Dynatrace-config/CD_b2v-com-fe/conditional-naming-processgroup/README.md new file mode 100644 index 00000000..f94196a5 --- /dev/null +++ b/BMW-Dynatrace-config/CD_b2v-com-fe/conditional-naming-processgroup/README.md @@ -0,0 +1,67 @@ +### Process Group Detection Rules and Naming + +#### Detection Rule or Naming? + +For the explanation, we're using a real example of the Infotainment application: + +!(PGNaming1)[../../../../img/PGNaming1.PNG] + +Before working with your dashboards and alerting profiles, an important task to do when working with Dynatrace is checking +the structure of your applications (process groups). You can do that clicking under *technologies* and filter using your +application Management Zone. + +In the picture above, there are two Process Groups called bon-information-prod. **If you see duplicated process groups like in** +**this case, you MUST follow this guideline** + +Next step would be to open both process groups and compare the metadata. In that way, you can identify if all process instances are +part of the same application or not. An easy way to do that is asking yourself: how many instances of my application do i have? + +If you have 4 instances in total and you're able to see 2 in one PG and other 2 in other PG it means that **they are part of the ** +**same application** + +Another situation could be that checking on the metadata, then you see that are **two different application** and Dynatrace is just naming +the process group in the same way + +*Same application* +- Problem: Dynatrace is creating two different process groups, what transalates in two separated services for the same application. Instead of +seeing all the traffic in one service, you will have it splitted and it will complicate your monitoring +- Solution: create a process group detection rule. Contact Dynatrace Expert + +*Different application* +- Problem: Dynatrace is just naming in the same way applications that are different. +- Solution: This case is less severe, since it can be fixed with a process group naming rule. + + +What about our example? +!(PGNaming2)[../../../../img/PGNaming2.PNG] +!(PGNaming3)[../../../../img/PGNaming3.PNG] + +Based on the feedback of the infotaiment team, each process group is a different application (microservice) and it's visible in the kubernetes container/workload +within the metadata of each Process Group. + +#### How to create a Process Group Detection Rule +1. Open the *conditional-naming-processgroup.yaml* file and create a rule that looks like this: +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName} +- tag: Infotainment +- skipDeployment: false +``` +The result of the rule will be renaming the PG to this: +``` +bon-information-prod ipa +bon-information-prod rsl +``` + +Other possible placeholders that you can use are for example: +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName/[^\\-]*$} +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesFullPodName/buffet-(.*?)-} +{ProcessGroup:DetectedName} - {HostGroup:Name/[^\\_]*$} +{ProcessGroup:KubernetesNamespace} +{ProcessGroup:CommandLineArgs/.*?\\-f\\s\\/www\\/(.*?)\\/generated\\/httpd\\.conf.*?} + +You can combine different ones. Check the (documentation)[link] for more \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_b2v-com-fe/conditional-naming-processgroup/conditional-naming-processgroup.yaml b/BMW-Dynatrace-config/CD_b2v-com-fe/conditional-naming-processgroup/conditional-naming-processgroup.yaml new file mode 100644 index 00000000..fb70b642 --- /dev/null +++ b/BMW-Dynatrace-config/CD_b2v-com-fe/conditional-naming-processgroup/conditional-naming-processgroup.yaml @@ -0,0 +1,8 @@ +config: +- CDb2v-com-fe: template.json + +CDb2v-com-fe: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: b2v-com-fe +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_b2v-com-fe/conditional-naming-processgroup/template.json b/BMW-Dynatrace-config/CD_b2v-com-fe/conditional-naming-processgroup/template.json new file mode 100644 index 00000000..7c039808 --- /dev/null +++ b/BMW-Dynatrace-config/CD_b2v-com-fe/conditional-naming-processgroup/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "type": "PROCESS_GROUP" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_b2v-com-fe/conditional-naming-service/README.md b/BMW-Dynatrace-config/CD_b2v-com-fe/conditional-naming-service/README.md new file mode 100644 index 00000000..c34ef308 --- /dev/null +++ b/BMW-Dynatrace-config/CD_b2v-com-fe/conditional-naming-service/README.md @@ -0,0 +1,35 @@ +### Service Naming Rules + +A typical case could be that you access to *Transaction & Services* and you find two services that are exactly the same: +*DataDownloadV1* +*DataDownloadV1* + +If you drilldown into the service and you check in the process group, you may have a PROD and a E2E for each service. + +*Note: if you see that both process group are exactly the same, please contact a Dynatrace expert to create a Process* +*Group detection rule* + +In the case the PG are PROD and E2E, then we need to create a rule that looks like this: + +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {Service:DetectedName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +- tag: Infotainment +- skipDeployment: false +``` + +The rule will get the Service Detected Name (current name) and it will extract (with a regex) the part of the kubernetes namespace after the "-", so -prod or -e2e, resulting in: +*DataDownloadV1 - prod* +*DataDownloadV1 - e2e* + +Now, services will be easy to identify. + +You can create rules based on any property/metadata. Some other placeholder's eamples: +{Service:DatabaseName} - E2E +{Service:WebServiceName} - {ProcessGroup:Kubernetes:microservice} - {ProcessGroup:Kubernetes:environment} +{Service:DetectedName} - {ProcessGroup:KubernetesContainerName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +{Service:DetectedName} - {ProcessGroup:SpringBootProfileName/[^\\-]*$} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_b2v-com-fe/conditional-naming-service/conditional-naming-service.yaml b/BMW-Dynatrace-config/CD_b2v-com-fe/conditional-naming-service/conditional-naming-service.yaml new file mode 100644 index 00000000..fb70b642 --- /dev/null +++ b/BMW-Dynatrace-config/CD_b2v-com-fe/conditional-naming-service/conditional-naming-service.yaml @@ -0,0 +1,8 @@ +config: +- CDb2v-com-fe: template.json + +CDb2v-com-fe: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: b2v-com-fe +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_b2v-com-fe/conditional-naming-service/template.json b/BMW-Dynatrace-config/CD_b2v-com-fe/conditional-naming-service/template.json new file mode 100644 index 00000000..5d4fac56 --- /dev/null +++ b/BMW-Dynatrace-config/CD_b2v-com-fe/conditional-naming-service/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "type": "SERVICE" +} \ 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 index d41c4c77..5f35e5c1 100644 --- 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 @@ -1,30 +1,4 @@ -## 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 configure custom services? -## 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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Custom+Services) page to configure your custom services. \ 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 index 92e734fa..1695924c 100644 --- a/BMW-Dynatrace-config/CD_b2v-com-fe/synthetic-monitor/README.md +++ b/BMW-Dynatrace-config/CD_b2v-com-fe/synthetic-monitor/README.md @@ -1,37 +1,4 @@ -# Synthetic Configuration -To calculate the Availability KPI, a synthetic must be configured. +### How to configure synthetics? -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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Synthetic+Monitors) page to configure your synthetics. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_b2v-com-gcdm-client/conditional-naming-processgroup/README.md b/BMW-Dynatrace-config/CD_b2v-com-gcdm-client/conditional-naming-processgroup/README.md new file mode 100644 index 00000000..f94196a5 --- /dev/null +++ b/BMW-Dynatrace-config/CD_b2v-com-gcdm-client/conditional-naming-processgroup/README.md @@ -0,0 +1,67 @@ +### Process Group Detection Rules and Naming + +#### Detection Rule or Naming? + +For the explanation, we're using a real example of the Infotainment application: + +!(PGNaming1)[../../../../img/PGNaming1.PNG] + +Before working with your dashboards and alerting profiles, an important task to do when working with Dynatrace is checking +the structure of your applications (process groups). You can do that clicking under *technologies* and filter using your +application Management Zone. + +In the picture above, there are two Process Groups called bon-information-prod. **If you see duplicated process groups like in** +**this case, you MUST follow this guideline** + +Next step would be to open both process groups and compare the metadata. In that way, you can identify if all process instances are +part of the same application or not. An easy way to do that is asking yourself: how many instances of my application do i have? + +If you have 4 instances in total and you're able to see 2 in one PG and other 2 in other PG it means that **they are part of the ** +**same application** + +Another situation could be that checking on the metadata, then you see that are **two different application** and Dynatrace is just naming +the process group in the same way + +*Same application* +- Problem: Dynatrace is creating two different process groups, what transalates in two separated services for the same application. Instead of +seeing all the traffic in one service, you will have it splitted and it will complicate your monitoring +- Solution: create a process group detection rule. Contact Dynatrace Expert + +*Different application* +- Problem: Dynatrace is just naming in the same way applications that are different. +- Solution: This case is less severe, since it can be fixed with a process group naming rule. + + +What about our example? +!(PGNaming2)[../../../../img/PGNaming2.PNG] +!(PGNaming3)[../../../../img/PGNaming3.PNG] + +Based on the feedback of the infotaiment team, each process group is a different application (microservice) and it's visible in the kubernetes container/workload +within the metadata of each Process Group. + +#### How to create a Process Group Detection Rule +1. Open the *conditional-naming-processgroup.yaml* file and create a rule that looks like this: +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName} +- tag: Infotainment +- skipDeployment: false +``` +The result of the rule will be renaming the PG to this: +``` +bon-information-prod ipa +bon-information-prod rsl +``` + +Other possible placeholders that you can use are for example: +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName/[^\\-]*$} +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesFullPodName/buffet-(.*?)-} +{ProcessGroup:DetectedName} - {HostGroup:Name/[^\\_]*$} +{ProcessGroup:KubernetesNamespace} +{ProcessGroup:CommandLineArgs/.*?\\-f\\s\\/www\\/(.*?)\\/generated\\/httpd\\.conf.*?} + +You can combine different ones. Check the (documentation)[link] for more \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_b2v-com-gcdm-client/conditional-naming-processgroup/conditional-naming-processgroup.yaml b/BMW-Dynatrace-config/CD_b2v-com-gcdm-client/conditional-naming-processgroup/conditional-naming-processgroup.yaml new file mode 100644 index 00000000..d2f6c8b7 --- /dev/null +++ b/BMW-Dynatrace-config/CD_b2v-com-gcdm-client/conditional-naming-processgroup/conditional-naming-processgroup.yaml @@ -0,0 +1,8 @@ +config: +- CDb2v-com-gcdm-client: template.json + +CDb2v-com-gcdm-client: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: b2v-com-gcdm-client +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_b2v-com-gcdm-client/conditional-naming-processgroup/template.json b/BMW-Dynatrace-config/CD_b2v-com-gcdm-client/conditional-naming-processgroup/template.json new file mode 100644 index 00000000..7c039808 --- /dev/null +++ b/BMW-Dynatrace-config/CD_b2v-com-gcdm-client/conditional-naming-processgroup/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "type": "PROCESS_GROUP" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_b2v-com-gcdm-client/conditional-naming-service/README.md b/BMW-Dynatrace-config/CD_b2v-com-gcdm-client/conditional-naming-service/README.md new file mode 100644 index 00000000..c34ef308 --- /dev/null +++ b/BMW-Dynatrace-config/CD_b2v-com-gcdm-client/conditional-naming-service/README.md @@ -0,0 +1,35 @@ +### Service Naming Rules + +A typical case could be that you access to *Transaction & Services* and you find two services that are exactly the same: +*DataDownloadV1* +*DataDownloadV1* + +If you drilldown into the service and you check in the process group, you may have a PROD and a E2E for each service. + +*Note: if you see that both process group are exactly the same, please contact a Dynatrace expert to create a Process* +*Group detection rule* + +In the case the PG are PROD and E2E, then we need to create a rule that looks like this: + +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {Service:DetectedName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +- tag: Infotainment +- skipDeployment: false +``` + +The rule will get the Service Detected Name (current name) and it will extract (with a regex) the part of the kubernetes namespace after the "-", so -prod or -e2e, resulting in: +*DataDownloadV1 - prod* +*DataDownloadV1 - e2e* + +Now, services will be easy to identify. + +You can create rules based on any property/metadata. Some other placeholder's eamples: +{Service:DatabaseName} - E2E +{Service:WebServiceName} - {ProcessGroup:Kubernetes:microservice} - {ProcessGroup:Kubernetes:environment} +{Service:DetectedName} - {ProcessGroup:KubernetesContainerName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +{Service:DetectedName} - {ProcessGroup:SpringBootProfileName/[^\\-]*$} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_b2v-com-gcdm-client/conditional-naming-service/conditional-naming-service.yaml b/BMW-Dynatrace-config/CD_b2v-com-gcdm-client/conditional-naming-service/conditional-naming-service.yaml new file mode 100644 index 00000000..d2f6c8b7 --- /dev/null +++ b/BMW-Dynatrace-config/CD_b2v-com-gcdm-client/conditional-naming-service/conditional-naming-service.yaml @@ -0,0 +1,8 @@ +config: +- CDb2v-com-gcdm-client: template.json + +CDb2v-com-gcdm-client: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: b2v-com-gcdm-client +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_b2v-com-gcdm-client/conditional-naming-service/template.json b/BMW-Dynatrace-config/CD_b2v-com-gcdm-client/conditional-naming-service/template.json new file mode 100644 index 00000000..5d4fac56 --- /dev/null +++ b/BMW-Dynatrace-config/CD_b2v-com-gcdm-client/conditional-naming-service/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "type": "SERVICE" +} \ 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 index d41c4c77..5f35e5c1 100644 --- 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 @@ -1,30 +1,4 @@ -## 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 configure custom services? -## 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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Custom+Services) page to configure your custom services. \ 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 index 92e734fa..1695924c 100644 --- 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 @@ -1,37 +1,4 @@ -# Synthetic Configuration -To calculate the Availability KPI, a synthetic must be configured. +### How to configure synthetics? -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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Synthetic+Monitors) page to configure your synthetics. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_b2v-com-hello/conditional-naming-processgroup/README.md b/BMW-Dynatrace-config/CD_b2v-com-hello/conditional-naming-processgroup/README.md new file mode 100644 index 00000000..f94196a5 --- /dev/null +++ b/BMW-Dynatrace-config/CD_b2v-com-hello/conditional-naming-processgroup/README.md @@ -0,0 +1,67 @@ +### Process Group Detection Rules and Naming + +#### Detection Rule or Naming? + +For the explanation, we're using a real example of the Infotainment application: + +!(PGNaming1)[../../../../img/PGNaming1.PNG] + +Before working with your dashboards and alerting profiles, an important task to do when working with Dynatrace is checking +the structure of your applications (process groups). You can do that clicking under *technologies* and filter using your +application Management Zone. + +In the picture above, there are two Process Groups called bon-information-prod. **If you see duplicated process groups like in** +**this case, you MUST follow this guideline** + +Next step would be to open both process groups and compare the metadata. In that way, you can identify if all process instances are +part of the same application or not. An easy way to do that is asking yourself: how many instances of my application do i have? + +If you have 4 instances in total and you're able to see 2 in one PG and other 2 in other PG it means that **they are part of the ** +**same application** + +Another situation could be that checking on the metadata, then you see that are **two different application** and Dynatrace is just naming +the process group in the same way + +*Same application* +- Problem: Dynatrace is creating two different process groups, what transalates in two separated services for the same application. Instead of +seeing all the traffic in one service, you will have it splitted and it will complicate your monitoring +- Solution: create a process group detection rule. Contact Dynatrace Expert + +*Different application* +- Problem: Dynatrace is just naming in the same way applications that are different. +- Solution: This case is less severe, since it can be fixed with a process group naming rule. + + +What about our example? +!(PGNaming2)[../../../../img/PGNaming2.PNG] +!(PGNaming3)[../../../../img/PGNaming3.PNG] + +Based on the feedback of the infotaiment team, each process group is a different application (microservice) and it's visible in the kubernetes container/workload +within the metadata of each Process Group. + +#### How to create a Process Group Detection Rule +1. Open the *conditional-naming-processgroup.yaml* file and create a rule that looks like this: +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName} +- tag: Infotainment +- skipDeployment: false +``` +The result of the rule will be renaming the PG to this: +``` +bon-information-prod ipa +bon-information-prod rsl +``` + +Other possible placeholders that you can use are for example: +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName/[^\\-]*$} +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesFullPodName/buffet-(.*?)-} +{ProcessGroup:DetectedName} - {HostGroup:Name/[^\\_]*$} +{ProcessGroup:KubernetesNamespace} +{ProcessGroup:CommandLineArgs/.*?\\-f\\s\\/www\\/(.*?)\\/generated\\/httpd\\.conf.*?} + +You can combine different ones. Check the (documentation)[link] for more \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_b2v-com-hello/conditional-naming-processgroup/conditional-naming-processgroup.yaml b/BMW-Dynatrace-config/CD_b2v-com-hello/conditional-naming-processgroup/conditional-naming-processgroup.yaml new file mode 100644 index 00000000..12671939 --- /dev/null +++ b/BMW-Dynatrace-config/CD_b2v-com-hello/conditional-naming-processgroup/conditional-naming-processgroup.yaml @@ -0,0 +1,8 @@ +config: +- CDb2v-com-hello: template.json + +CDb2v-com-hello: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: b2v-com-hello +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_b2v-com-hello/conditional-naming-processgroup/template.json b/BMW-Dynatrace-config/CD_b2v-com-hello/conditional-naming-processgroup/template.json new file mode 100644 index 00000000..7c039808 --- /dev/null +++ b/BMW-Dynatrace-config/CD_b2v-com-hello/conditional-naming-processgroup/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "type": "PROCESS_GROUP" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_b2v-com-hello/conditional-naming-service/README.md b/BMW-Dynatrace-config/CD_b2v-com-hello/conditional-naming-service/README.md new file mode 100644 index 00000000..c34ef308 --- /dev/null +++ b/BMW-Dynatrace-config/CD_b2v-com-hello/conditional-naming-service/README.md @@ -0,0 +1,35 @@ +### Service Naming Rules + +A typical case could be that you access to *Transaction & Services* and you find two services that are exactly the same: +*DataDownloadV1* +*DataDownloadV1* + +If you drilldown into the service and you check in the process group, you may have a PROD and a E2E for each service. + +*Note: if you see that both process group are exactly the same, please contact a Dynatrace expert to create a Process* +*Group detection rule* + +In the case the PG are PROD and E2E, then we need to create a rule that looks like this: + +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {Service:DetectedName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +- tag: Infotainment +- skipDeployment: false +``` + +The rule will get the Service Detected Name (current name) and it will extract (with a regex) the part of the kubernetes namespace after the "-", so -prod or -e2e, resulting in: +*DataDownloadV1 - prod* +*DataDownloadV1 - e2e* + +Now, services will be easy to identify. + +You can create rules based on any property/metadata. Some other placeholder's eamples: +{Service:DatabaseName} - E2E +{Service:WebServiceName} - {ProcessGroup:Kubernetes:microservice} - {ProcessGroup:Kubernetes:environment} +{Service:DetectedName} - {ProcessGroup:KubernetesContainerName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +{Service:DetectedName} - {ProcessGroup:SpringBootProfileName/[^\\-]*$} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_b2v-com-hello/conditional-naming-service/conditional-naming-service.yaml b/BMW-Dynatrace-config/CD_b2v-com-hello/conditional-naming-service/conditional-naming-service.yaml new file mode 100644 index 00000000..12671939 --- /dev/null +++ b/BMW-Dynatrace-config/CD_b2v-com-hello/conditional-naming-service/conditional-naming-service.yaml @@ -0,0 +1,8 @@ +config: +- CDb2v-com-hello: template.json + +CDb2v-com-hello: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: b2v-com-hello +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_b2v-com-hello/conditional-naming-service/template.json b/BMW-Dynatrace-config/CD_b2v-com-hello/conditional-naming-service/template.json new file mode 100644 index 00000000..5d4fac56 --- /dev/null +++ b/BMW-Dynatrace-config/CD_b2v-com-hello/conditional-naming-service/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "type": "SERVICE" +} \ 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 index d41c4c77..5f35e5c1 100644 --- 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 @@ -1,30 +1,4 @@ -## 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 configure custom services? -## 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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Custom+Services) page to configure your custom services. \ 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 index 92e734fa..1695924c 100644 --- a/BMW-Dynatrace-config/CD_b2v-com-hello/synthetic-monitor/README.md +++ b/BMW-Dynatrace-config/CD_b2v-com-hello/synthetic-monitor/README.md @@ -1,37 +1,4 @@ -# Synthetic Configuration -To calculate the Availability KPI, a synthetic must be configured. +### How to configure synthetics? -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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Synthetic+Monitors) page to configure your synthetics. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_b2v-nots/conditional-naming-processgroup/README.md b/BMW-Dynatrace-config/CD_b2v-nots/conditional-naming-processgroup/README.md new file mode 100644 index 00000000..f94196a5 --- /dev/null +++ b/BMW-Dynatrace-config/CD_b2v-nots/conditional-naming-processgroup/README.md @@ -0,0 +1,67 @@ +### Process Group Detection Rules and Naming + +#### Detection Rule or Naming? + +For the explanation, we're using a real example of the Infotainment application: + +!(PGNaming1)[../../../../img/PGNaming1.PNG] + +Before working with your dashboards and alerting profiles, an important task to do when working with Dynatrace is checking +the structure of your applications (process groups). You can do that clicking under *technologies* and filter using your +application Management Zone. + +In the picture above, there are two Process Groups called bon-information-prod. **If you see duplicated process groups like in** +**this case, you MUST follow this guideline** + +Next step would be to open both process groups and compare the metadata. In that way, you can identify if all process instances are +part of the same application or not. An easy way to do that is asking yourself: how many instances of my application do i have? + +If you have 4 instances in total and you're able to see 2 in one PG and other 2 in other PG it means that **they are part of the ** +**same application** + +Another situation could be that checking on the metadata, then you see that are **two different application** and Dynatrace is just naming +the process group in the same way + +*Same application* +- Problem: Dynatrace is creating two different process groups, what transalates in two separated services for the same application. Instead of +seeing all the traffic in one service, you will have it splitted and it will complicate your monitoring +- Solution: create a process group detection rule. Contact Dynatrace Expert + +*Different application* +- Problem: Dynatrace is just naming in the same way applications that are different. +- Solution: This case is less severe, since it can be fixed with a process group naming rule. + + +What about our example? +!(PGNaming2)[../../../../img/PGNaming2.PNG] +!(PGNaming3)[../../../../img/PGNaming3.PNG] + +Based on the feedback of the infotaiment team, each process group is a different application (microservice) and it's visible in the kubernetes container/workload +within the metadata of each Process Group. + +#### How to create a Process Group Detection Rule +1. Open the *conditional-naming-processgroup.yaml* file and create a rule that looks like this: +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName} +- tag: Infotainment +- skipDeployment: false +``` +The result of the rule will be renaming the PG to this: +``` +bon-information-prod ipa +bon-information-prod rsl +``` + +Other possible placeholders that you can use are for example: +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName/[^\\-]*$} +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesFullPodName/buffet-(.*?)-} +{ProcessGroup:DetectedName} - {HostGroup:Name/[^\\_]*$} +{ProcessGroup:KubernetesNamespace} +{ProcessGroup:CommandLineArgs/.*?\\-f\\s\\/www\\/(.*?)\\/generated\\/httpd\\.conf.*?} + +You can combine different ones. Check the (documentation)[link] for more \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_b2v-nots/conditional-naming-processgroup/conditional-naming-processgroup.yaml b/BMW-Dynatrace-config/CD_b2v-nots/conditional-naming-processgroup/conditional-naming-processgroup.yaml new file mode 100644 index 00000000..5293d720 --- /dev/null +++ b/BMW-Dynatrace-config/CD_b2v-nots/conditional-naming-processgroup/conditional-naming-processgroup.yaml @@ -0,0 +1,8 @@ +config: +- CDb2v-nots: template.json + +CDb2v-nots: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: b2v-nots +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_b2v-nots/conditional-naming-processgroup/template.json b/BMW-Dynatrace-config/CD_b2v-nots/conditional-naming-processgroup/template.json new file mode 100644 index 00000000..7c039808 --- /dev/null +++ b/BMW-Dynatrace-config/CD_b2v-nots/conditional-naming-processgroup/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "type": "PROCESS_GROUP" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_b2v-nots/conditional-naming-service/README.md b/BMW-Dynatrace-config/CD_b2v-nots/conditional-naming-service/README.md new file mode 100644 index 00000000..c34ef308 --- /dev/null +++ b/BMW-Dynatrace-config/CD_b2v-nots/conditional-naming-service/README.md @@ -0,0 +1,35 @@ +### Service Naming Rules + +A typical case could be that you access to *Transaction & Services* and you find two services that are exactly the same: +*DataDownloadV1* +*DataDownloadV1* + +If you drilldown into the service and you check in the process group, you may have a PROD and a E2E for each service. + +*Note: if you see that both process group are exactly the same, please contact a Dynatrace expert to create a Process* +*Group detection rule* + +In the case the PG are PROD and E2E, then we need to create a rule that looks like this: + +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {Service:DetectedName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +- tag: Infotainment +- skipDeployment: false +``` + +The rule will get the Service Detected Name (current name) and it will extract (with a regex) the part of the kubernetes namespace after the "-", so -prod or -e2e, resulting in: +*DataDownloadV1 - prod* +*DataDownloadV1 - e2e* + +Now, services will be easy to identify. + +You can create rules based on any property/metadata. Some other placeholder's eamples: +{Service:DatabaseName} - E2E +{Service:WebServiceName} - {ProcessGroup:Kubernetes:microservice} - {ProcessGroup:Kubernetes:environment} +{Service:DetectedName} - {ProcessGroup:KubernetesContainerName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +{Service:DetectedName} - {ProcessGroup:SpringBootProfileName/[^\\-]*$} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_b2v-nots/conditional-naming-service/conditional-naming-service.yaml b/BMW-Dynatrace-config/CD_b2v-nots/conditional-naming-service/conditional-naming-service.yaml new file mode 100644 index 00000000..5293d720 --- /dev/null +++ b/BMW-Dynatrace-config/CD_b2v-nots/conditional-naming-service/conditional-naming-service.yaml @@ -0,0 +1,8 @@ +config: +- CDb2v-nots: template.json + +CDb2v-nots: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: b2v-nots +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_b2v-nots/conditional-naming-service/template.json b/BMW-Dynatrace-config/CD_b2v-nots/conditional-naming-service/template.json new file mode 100644 index 00000000..5d4fac56 --- /dev/null +++ b/BMW-Dynatrace-config/CD_b2v-nots/conditional-naming-service/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "type": "SERVICE" +} \ 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 index d41c4c77..5f35e5c1 100644 --- a/BMW-Dynatrace-config/CD_b2v-nots/custom-service-java/README.md +++ b/BMW-Dynatrace-config/CD_b2v-nots/custom-service-java/README.md @@ -1,30 +1,4 @@ -## 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 configure custom services? -## 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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Custom+Services) page to configure your custom services. \ 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 index 92e734fa..1695924c 100644 --- a/BMW-Dynatrace-config/CD_b2v-nots/synthetic-monitor/README.md +++ b/BMW-Dynatrace-config/CD_b2v-nots/synthetic-monitor/README.md @@ -1,37 +1,4 @@ -# Synthetic Configuration -To calculate the Availability KPI, a synthetic must be configured. +### How to configure synthetics? -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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Synthetic+Monitors) page to configure your synthetics. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_b2v-sms-statistics/conditional-naming-processgroup/README.md b/BMW-Dynatrace-config/CD_b2v-sms-statistics/conditional-naming-processgroup/README.md new file mode 100644 index 00000000..f94196a5 --- /dev/null +++ b/BMW-Dynatrace-config/CD_b2v-sms-statistics/conditional-naming-processgroup/README.md @@ -0,0 +1,67 @@ +### Process Group Detection Rules and Naming + +#### Detection Rule or Naming? + +For the explanation, we're using a real example of the Infotainment application: + +!(PGNaming1)[../../../../img/PGNaming1.PNG] + +Before working with your dashboards and alerting profiles, an important task to do when working with Dynatrace is checking +the structure of your applications (process groups). You can do that clicking under *technologies* and filter using your +application Management Zone. + +In the picture above, there are two Process Groups called bon-information-prod. **If you see duplicated process groups like in** +**this case, you MUST follow this guideline** + +Next step would be to open both process groups and compare the metadata. In that way, you can identify if all process instances are +part of the same application or not. An easy way to do that is asking yourself: how many instances of my application do i have? + +If you have 4 instances in total and you're able to see 2 in one PG and other 2 in other PG it means that **they are part of the ** +**same application** + +Another situation could be that checking on the metadata, then you see that are **two different application** and Dynatrace is just naming +the process group in the same way + +*Same application* +- Problem: Dynatrace is creating two different process groups, what transalates in two separated services for the same application. Instead of +seeing all the traffic in one service, you will have it splitted and it will complicate your monitoring +- Solution: create a process group detection rule. Contact Dynatrace Expert + +*Different application* +- Problem: Dynatrace is just naming in the same way applications that are different. +- Solution: This case is less severe, since it can be fixed with a process group naming rule. + + +What about our example? +!(PGNaming2)[../../../../img/PGNaming2.PNG] +!(PGNaming3)[../../../../img/PGNaming3.PNG] + +Based on the feedback of the infotaiment team, each process group is a different application (microservice) and it's visible in the kubernetes container/workload +within the metadata of each Process Group. + +#### How to create a Process Group Detection Rule +1. Open the *conditional-naming-processgroup.yaml* file and create a rule that looks like this: +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName} +- tag: Infotainment +- skipDeployment: false +``` +The result of the rule will be renaming the PG to this: +``` +bon-information-prod ipa +bon-information-prod rsl +``` + +Other possible placeholders that you can use are for example: +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName/[^\\-]*$} +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesFullPodName/buffet-(.*?)-} +{ProcessGroup:DetectedName} - {HostGroup:Name/[^\\_]*$} +{ProcessGroup:KubernetesNamespace} +{ProcessGroup:CommandLineArgs/.*?\\-f\\s\\/www\\/(.*?)\\/generated\\/httpd\\.conf.*?} + +You can combine different ones. Check the (documentation)[link] for more \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_b2v-sms-statistics/conditional-naming-processgroup/conditional-naming-processgroup.yaml b/BMW-Dynatrace-config/CD_b2v-sms-statistics/conditional-naming-processgroup/conditional-naming-processgroup.yaml new file mode 100644 index 00000000..81c9a7ab --- /dev/null +++ b/BMW-Dynatrace-config/CD_b2v-sms-statistics/conditional-naming-processgroup/conditional-naming-processgroup.yaml @@ -0,0 +1,8 @@ +config: +- CDb2v-sms-statistics: template.json + +CDb2v-sms-statistics: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: b2v-sms-statistics +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_b2v-sms-statistics/conditional-naming-processgroup/template.json b/BMW-Dynatrace-config/CD_b2v-sms-statistics/conditional-naming-processgroup/template.json new file mode 100644 index 00000000..7c039808 --- /dev/null +++ b/BMW-Dynatrace-config/CD_b2v-sms-statistics/conditional-naming-processgroup/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "type": "PROCESS_GROUP" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_b2v-sms-statistics/conditional-naming-service/README.md b/BMW-Dynatrace-config/CD_b2v-sms-statistics/conditional-naming-service/README.md new file mode 100644 index 00000000..c34ef308 --- /dev/null +++ b/BMW-Dynatrace-config/CD_b2v-sms-statistics/conditional-naming-service/README.md @@ -0,0 +1,35 @@ +### Service Naming Rules + +A typical case could be that you access to *Transaction & Services* and you find two services that are exactly the same: +*DataDownloadV1* +*DataDownloadV1* + +If you drilldown into the service and you check in the process group, you may have a PROD and a E2E for each service. + +*Note: if you see that both process group are exactly the same, please contact a Dynatrace expert to create a Process* +*Group detection rule* + +In the case the PG are PROD and E2E, then we need to create a rule that looks like this: + +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {Service:DetectedName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +- tag: Infotainment +- skipDeployment: false +``` + +The rule will get the Service Detected Name (current name) and it will extract (with a regex) the part of the kubernetes namespace after the "-", so -prod or -e2e, resulting in: +*DataDownloadV1 - prod* +*DataDownloadV1 - e2e* + +Now, services will be easy to identify. + +You can create rules based on any property/metadata. Some other placeholder's eamples: +{Service:DatabaseName} - E2E +{Service:WebServiceName} - {ProcessGroup:Kubernetes:microservice} - {ProcessGroup:Kubernetes:environment} +{Service:DetectedName} - {ProcessGroup:KubernetesContainerName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +{Service:DetectedName} - {ProcessGroup:SpringBootProfileName/[^\\-]*$} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_b2v-sms-statistics/conditional-naming-service/conditional-naming-service.yaml b/BMW-Dynatrace-config/CD_b2v-sms-statistics/conditional-naming-service/conditional-naming-service.yaml new file mode 100644 index 00000000..81c9a7ab --- /dev/null +++ b/BMW-Dynatrace-config/CD_b2v-sms-statistics/conditional-naming-service/conditional-naming-service.yaml @@ -0,0 +1,8 @@ +config: +- CDb2v-sms-statistics: template.json + +CDb2v-sms-statistics: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: b2v-sms-statistics +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_b2v-sms-statistics/conditional-naming-service/template.json b/BMW-Dynatrace-config/CD_b2v-sms-statistics/conditional-naming-service/template.json new file mode 100644 index 00000000..5d4fac56 --- /dev/null +++ b/BMW-Dynatrace-config/CD_b2v-sms-statistics/conditional-naming-service/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "type": "SERVICE" +} \ 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 index d41c4c77..5f35e5c1 100644 --- 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 @@ -1,30 +1,4 @@ -## 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 configure custom services? -## 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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Custom+Services) page to configure your custom services. \ 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 index 92e734fa..1695924c 100644 --- a/BMW-Dynatrace-config/CD_b2v-sms-statistics/synthetic-monitor/README.md +++ b/BMW-Dynatrace-config/CD_b2v-sms-statistics/synthetic-monitor/README.md @@ -1,37 +1,4 @@ -# Synthetic Configuration -To calculate the Availability KPI, a synthetic must be configured. +### How to configure synthetics? -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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Synthetic+Monitors) page to configure your synthetics. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_bmw-points-push-notifications-service/conditional-naming-processgroup/README.md b/BMW-Dynatrace-config/CD_bmw-points-push-notifications-service/conditional-naming-processgroup/README.md new file mode 100644 index 00000000..f94196a5 --- /dev/null +++ b/BMW-Dynatrace-config/CD_bmw-points-push-notifications-service/conditional-naming-processgroup/README.md @@ -0,0 +1,67 @@ +### Process Group Detection Rules and Naming + +#### Detection Rule or Naming? + +For the explanation, we're using a real example of the Infotainment application: + +!(PGNaming1)[../../../../img/PGNaming1.PNG] + +Before working with your dashboards and alerting profiles, an important task to do when working with Dynatrace is checking +the structure of your applications (process groups). You can do that clicking under *technologies* and filter using your +application Management Zone. + +In the picture above, there are two Process Groups called bon-information-prod. **If you see duplicated process groups like in** +**this case, you MUST follow this guideline** + +Next step would be to open both process groups and compare the metadata. In that way, you can identify if all process instances are +part of the same application or not. An easy way to do that is asking yourself: how many instances of my application do i have? + +If you have 4 instances in total and you're able to see 2 in one PG and other 2 in other PG it means that **they are part of the ** +**same application** + +Another situation could be that checking on the metadata, then you see that are **two different application** and Dynatrace is just naming +the process group in the same way + +*Same application* +- Problem: Dynatrace is creating two different process groups, what transalates in two separated services for the same application. Instead of +seeing all the traffic in one service, you will have it splitted and it will complicate your monitoring +- Solution: create a process group detection rule. Contact Dynatrace Expert + +*Different application* +- Problem: Dynatrace is just naming in the same way applications that are different. +- Solution: This case is less severe, since it can be fixed with a process group naming rule. + + +What about our example? +!(PGNaming2)[../../../../img/PGNaming2.PNG] +!(PGNaming3)[../../../../img/PGNaming3.PNG] + +Based on the feedback of the infotaiment team, each process group is a different application (microservice) and it's visible in the kubernetes container/workload +within the metadata of each Process Group. + +#### How to create a Process Group Detection Rule +1. Open the *conditional-naming-processgroup.yaml* file and create a rule that looks like this: +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName} +- tag: Infotainment +- skipDeployment: false +``` +The result of the rule will be renaming the PG to this: +``` +bon-information-prod ipa +bon-information-prod rsl +``` + +Other possible placeholders that you can use are for example: +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName/[^\\-]*$} +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesFullPodName/buffet-(.*?)-} +{ProcessGroup:DetectedName} - {HostGroup:Name/[^\\_]*$} +{ProcessGroup:KubernetesNamespace} +{ProcessGroup:CommandLineArgs/.*?\\-f\\s\\/www\\/(.*?)\\/generated\\/httpd\\.conf.*?} + +You can combine different ones. Check the (documentation)[link] for more \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_bmw-points-push-notifications-service/conditional-naming-processgroup/conditional-naming-processgroup.yaml b/BMW-Dynatrace-config/CD_bmw-points-push-notifications-service/conditional-naming-processgroup/conditional-naming-processgroup.yaml new file mode 100644 index 00000000..d5200809 --- /dev/null +++ b/BMW-Dynatrace-config/CD_bmw-points-push-notifications-service/conditional-naming-processgroup/conditional-naming-processgroup.yaml @@ -0,0 +1,8 @@ +config: +- CDbmw-points-push-notifications-service: template.json + +CDbmw-points-push-notifications-service: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: bmw-points-push-notifications-service +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_bmw-points-push-notifications-service/conditional-naming-processgroup/template.json b/BMW-Dynatrace-config/CD_bmw-points-push-notifications-service/conditional-naming-processgroup/template.json new file mode 100644 index 00000000..7c039808 --- /dev/null +++ b/BMW-Dynatrace-config/CD_bmw-points-push-notifications-service/conditional-naming-processgroup/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "type": "PROCESS_GROUP" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_bmw-points-push-notifications-service/conditional-naming-service/README.md b/BMW-Dynatrace-config/CD_bmw-points-push-notifications-service/conditional-naming-service/README.md new file mode 100644 index 00000000..c34ef308 --- /dev/null +++ b/BMW-Dynatrace-config/CD_bmw-points-push-notifications-service/conditional-naming-service/README.md @@ -0,0 +1,35 @@ +### Service Naming Rules + +A typical case could be that you access to *Transaction & Services* and you find two services that are exactly the same: +*DataDownloadV1* +*DataDownloadV1* + +If you drilldown into the service and you check in the process group, you may have a PROD and a E2E for each service. + +*Note: if you see that both process group are exactly the same, please contact a Dynatrace expert to create a Process* +*Group detection rule* + +In the case the PG are PROD and E2E, then we need to create a rule that looks like this: + +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {Service:DetectedName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +- tag: Infotainment +- skipDeployment: false +``` + +The rule will get the Service Detected Name (current name) and it will extract (with a regex) the part of the kubernetes namespace after the "-", so -prod or -e2e, resulting in: +*DataDownloadV1 - prod* +*DataDownloadV1 - e2e* + +Now, services will be easy to identify. + +You can create rules based on any property/metadata. Some other placeholder's eamples: +{Service:DatabaseName} - E2E +{Service:WebServiceName} - {ProcessGroup:Kubernetes:microservice} - {ProcessGroup:Kubernetes:environment} +{Service:DetectedName} - {ProcessGroup:KubernetesContainerName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +{Service:DetectedName} - {ProcessGroup:SpringBootProfileName/[^\\-]*$} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_bmw-points-push-notifications-service/conditional-naming-service/conditional-naming-service.yaml b/BMW-Dynatrace-config/CD_bmw-points-push-notifications-service/conditional-naming-service/conditional-naming-service.yaml new file mode 100644 index 00000000..d5200809 --- /dev/null +++ b/BMW-Dynatrace-config/CD_bmw-points-push-notifications-service/conditional-naming-service/conditional-naming-service.yaml @@ -0,0 +1,8 @@ +config: +- CDbmw-points-push-notifications-service: template.json + +CDbmw-points-push-notifications-service: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: bmw-points-push-notifications-service +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_bmw-points-push-notifications-service/conditional-naming-service/template.json b/BMW-Dynatrace-config/CD_bmw-points-push-notifications-service/conditional-naming-service/template.json new file mode 100644 index 00000000..5d4fac56 --- /dev/null +++ b/BMW-Dynatrace-config/CD_bmw-points-push-notifications-service/conditional-naming-service/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "type": "SERVICE" +} \ 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 index d41c4c77..5f35e5c1 100644 --- 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 @@ -1,30 +1,4 @@ -## 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 configure custom services? -## 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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Custom+Services) page to configure your custom services. \ 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 index 92e734fa..1695924c 100644 --- 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 @@ -1,37 +1,4 @@ -# Synthetic Configuration -To calculate the Availability KPI, a synthetic must be configured. +### How to configure synthetics? -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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Synthetic+Monitors) page to configure your synthetics. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_bsi-service/conditional-naming-processgroup/README.md b/BMW-Dynatrace-config/CD_bsi-service/conditional-naming-processgroup/README.md new file mode 100644 index 00000000..f94196a5 --- /dev/null +++ b/BMW-Dynatrace-config/CD_bsi-service/conditional-naming-processgroup/README.md @@ -0,0 +1,67 @@ +### Process Group Detection Rules and Naming + +#### Detection Rule or Naming? + +For the explanation, we're using a real example of the Infotainment application: + +!(PGNaming1)[../../../../img/PGNaming1.PNG] + +Before working with your dashboards and alerting profiles, an important task to do when working with Dynatrace is checking +the structure of your applications (process groups). You can do that clicking under *technologies* and filter using your +application Management Zone. + +In the picture above, there are two Process Groups called bon-information-prod. **If you see duplicated process groups like in** +**this case, you MUST follow this guideline** + +Next step would be to open both process groups and compare the metadata. In that way, you can identify if all process instances are +part of the same application or not. An easy way to do that is asking yourself: how many instances of my application do i have? + +If you have 4 instances in total and you're able to see 2 in one PG and other 2 in other PG it means that **they are part of the ** +**same application** + +Another situation could be that checking on the metadata, then you see that are **two different application** and Dynatrace is just naming +the process group in the same way + +*Same application* +- Problem: Dynatrace is creating two different process groups, what transalates in two separated services for the same application. Instead of +seeing all the traffic in one service, you will have it splitted and it will complicate your monitoring +- Solution: create a process group detection rule. Contact Dynatrace Expert + +*Different application* +- Problem: Dynatrace is just naming in the same way applications that are different. +- Solution: This case is less severe, since it can be fixed with a process group naming rule. + + +What about our example? +!(PGNaming2)[../../../../img/PGNaming2.PNG] +!(PGNaming3)[../../../../img/PGNaming3.PNG] + +Based on the feedback of the infotaiment team, each process group is a different application (microservice) and it's visible in the kubernetes container/workload +within the metadata of each Process Group. + +#### How to create a Process Group Detection Rule +1. Open the *conditional-naming-processgroup.yaml* file and create a rule that looks like this: +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName} +- tag: Infotainment +- skipDeployment: false +``` +The result of the rule will be renaming the PG to this: +``` +bon-information-prod ipa +bon-information-prod rsl +``` + +Other possible placeholders that you can use are for example: +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName/[^\\-]*$} +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesFullPodName/buffet-(.*?)-} +{ProcessGroup:DetectedName} - {HostGroup:Name/[^\\_]*$} +{ProcessGroup:KubernetesNamespace} +{ProcessGroup:CommandLineArgs/.*?\\-f\\s\\/www\\/(.*?)\\/generated\\/httpd\\.conf.*?} + +You can combine different ones. Check the (documentation)[link] for more \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_bsi-service/conditional-naming-processgroup/conditional-naming-processgroup.yaml b/BMW-Dynatrace-config/CD_bsi-service/conditional-naming-processgroup/conditional-naming-processgroup.yaml new file mode 100644 index 00000000..5456ee74 --- /dev/null +++ b/BMW-Dynatrace-config/CD_bsi-service/conditional-naming-processgroup/conditional-naming-processgroup.yaml @@ -0,0 +1,8 @@ +config: +- CDbsi-service: template.json + +CDbsi-service: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: bsi-service +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_bsi-service/conditional-naming-processgroup/template.json b/BMW-Dynatrace-config/CD_bsi-service/conditional-naming-processgroup/template.json new file mode 100644 index 00000000..7c039808 --- /dev/null +++ b/BMW-Dynatrace-config/CD_bsi-service/conditional-naming-processgroup/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "type": "PROCESS_GROUP" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_bsi-service/conditional-naming-service/README.md b/BMW-Dynatrace-config/CD_bsi-service/conditional-naming-service/README.md new file mode 100644 index 00000000..c34ef308 --- /dev/null +++ b/BMW-Dynatrace-config/CD_bsi-service/conditional-naming-service/README.md @@ -0,0 +1,35 @@ +### Service Naming Rules + +A typical case could be that you access to *Transaction & Services* and you find two services that are exactly the same: +*DataDownloadV1* +*DataDownloadV1* + +If you drilldown into the service and you check in the process group, you may have a PROD and a E2E for each service. + +*Note: if you see that both process group are exactly the same, please contact a Dynatrace expert to create a Process* +*Group detection rule* + +In the case the PG are PROD and E2E, then we need to create a rule that looks like this: + +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {Service:DetectedName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +- tag: Infotainment +- skipDeployment: false +``` + +The rule will get the Service Detected Name (current name) and it will extract (with a regex) the part of the kubernetes namespace after the "-", so -prod or -e2e, resulting in: +*DataDownloadV1 - prod* +*DataDownloadV1 - e2e* + +Now, services will be easy to identify. + +You can create rules based on any property/metadata. Some other placeholder's eamples: +{Service:DatabaseName} - E2E +{Service:WebServiceName} - {ProcessGroup:Kubernetes:microservice} - {ProcessGroup:Kubernetes:environment} +{Service:DetectedName} - {ProcessGroup:KubernetesContainerName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +{Service:DetectedName} - {ProcessGroup:SpringBootProfileName/[^\\-]*$} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_bsi-service/conditional-naming-service/conditional-naming-service.yaml b/BMW-Dynatrace-config/CD_bsi-service/conditional-naming-service/conditional-naming-service.yaml new file mode 100644 index 00000000..5456ee74 --- /dev/null +++ b/BMW-Dynatrace-config/CD_bsi-service/conditional-naming-service/conditional-naming-service.yaml @@ -0,0 +1,8 @@ +config: +- CDbsi-service: template.json + +CDbsi-service: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: bsi-service +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_bsi-service/conditional-naming-service/template.json b/BMW-Dynatrace-config/CD_bsi-service/conditional-naming-service/template.json new file mode 100644 index 00000000..5d4fac56 --- /dev/null +++ b/BMW-Dynatrace-config/CD_bsi-service/conditional-naming-service/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "type": "SERVICE" +} \ 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 index d41c4c77..5f35e5c1 100644 --- a/BMW-Dynatrace-config/CD_bsi-service/custom-service-java/README.md +++ b/BMW-Dynatrace-config/CD_bsi-service/custom-service-java/README.md @@ -1,30 +1,4 @@ -## 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 configure custom services? -## 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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Custom+Services) page to configure your custom services. \ 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 index 92e734fa..1695924c 100644 --- a/BMW-Dynatrace-config/CD_bsi-service/synthetic-monitor/README.md +++ b/BMW-Dynatrace-config/CD_bsi-service/synthetic-monitor/README.md @@ -1,37 +1,4 @@ -# Synthetic Configuration -To calculate the Availability KPI, a synthetic must be configured. +### How to configure synthetics? -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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Synthetic+Monitors) page to configure your synthetics. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_cac/conditional-naming-processgroup/README.md b/BMW-Dynatrace-config/CD_cac/conditional-naming-processgroup/README.md new file mode 100644 index 00000000..f94196a5 --- /dev/null +++ b/BMW-Dynatrace-config/CD_cac/conditional-naming-processgroup/README.md @@ -0,0 +1,67 @@ +### Process Group Detection Rules and Naming + +#### Detection Rule or Naming? + +For the explanation, we're using a real example of the Infotainment application: + +!(PGNaming1)[../../../../img/PGNaming1.PNG] + +Before working with your dashboards and alerting profiles, an important task to do when working with Dynatrace is checking +the structure of your applications (process groups). You can do that clicking under *technologies* and filter using your +application Management Zone. + +In the picture above, there are two Process Groups called bon-information-prod. **If you see duplicated process groups like in** +**this case, you MUST follow this guideline** + +Next step would be to open both process groups and compare the metadata. In that way, you can identify if all process instances are +part of the same application or not. An easy way to do that is asking yourself: how many instances of my application do i have? + +If you have 4 instances in total and you're able to see 2 in one PG and other 2 in other PG it means that **they are part of the ** +**same application** + +Another situation could be that checking on the metadata, then you see that are **two different application** and Dynatrace is just naming +the process group in the same way + +*Same application* +- Problem: Dynatrace is creating two different process groups, what transalates in two separated services for the same application. Instead of +seeing all the traffic in one service, you will have it splitted and it will complicate your monitoring +- Solution: create a process group detection rule. Contact Dynatrace Expert + +*Different application* +- Problem: Dynatrace is just naming in the same way applications that are different. +- Solution: This case is less severe, since it can be fixed with a process group naming rule. + + +What about our example? +!(PGNaming2)[../../../../img/PGNaming2.PNG] +!(PGNaming3)[../../../../img/PGNaming3.PNG] + +Based on the feedback of the infotaiment team, each process group is a different application (microservice) and it's visible in the kubernetes container/workload +within the metadata of each Process Group. + +#### How to create a Process Group Detection Rule +1. Open the *conditional-naming-processgroup.yaml* file and create a rule that looks like this: +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName} +- tag: Infotainment +- skipDeployment: false +``` +The result of the rule will be renaming the PG to this: +``` +bon-information-prod ipa +bon-information-prod rsl +``` + +Other possible placeholders that you can use are for example: +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName/[^\\-]*$} +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesFullPodName/buffet-(.*?)-} +{ProcessGroup:DetectedName} - {HostGroup:Name/[^\\_]*$} +{ProcessGroup:KubernetesNamespace} +{ProcessGroup:CommandLineArgs/.*?\\-f\\s\\/www\\/(.*?)\\/generated\\/httpd\\.conf.*?} + +You can combine different ones. Check the (documentation)[link] for more \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_cac/conditional-naming-processgroup/conditional-naming-processgroup.yaml b/BMW-Dynatrace-config/CD_cac/conditional-naming-processgroup/conditional-naming-processgroup.yaml new file mode 100644 index 00000000..d0b9c0bd --- /dev/null +++ b/BMW-Dynatrace-config/CD_cac/conditional-naming-processgroup/conditional-naming-processgroup.yaml @@ -0,0 +1,8 @@ +config: +- CDcac: template.json + +CDcac: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: cac +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_cac/conditional-naming-processgroup/template.json b/BMW-Dynatrace-config/CD_cac/conditional-naming-processgroup/template.json new file mode 100644 index 00000000..7c039808 --- /dev/null +++ b/BMW-Dynatrace-config/CD_cac/conditional-naming-processgroup/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "type": "PROCESS_GROUP" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_cac/conditional-naming-service/README.md b/BMW-Dynatrace-config/CD_cac/conditional-naming-service/README.md new file mode 100644 index 00000000..c34ef308 --- /dev/null +++ b/BMW-Dynatrace-config/CD_cac/conditional-naming-service/README.md @@ -0,0 +1,35 @@ +### Service Naming Rules + +A typical case could be that you access to *Transaction & Services* and you find two services that are exactly the same: +*DataDownloadV1* +*DataDownloadV1* + +If you drilldown into the service and you check in the process group, you may have a PROD and a E2E for each service. + +*Note: if you see that both process group are exactly the same, please contact a Dynatrace expert to create a Process* +*Group detection rule* + +In the case the PG are PROD and E2E, then we need to create a rule that looks like this: + +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {Service:DetectedName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +- tag: Infotainment +- skipDeployment: false +``` + +The rule will get the Service Detected Name (current name) and it will extract (with a regex) the part of the kubernetes namespace after the "-", so -prod or -e2e, resulting in: +*DataDownloadV1 - prod* +*DataDownloadV1 - e2e* + +Now, services will be easy to identify. + +You can create rules based on any property/metadata. Some other placeholder's eamples: +{Service:DatabaseName} - E2E +{Service:WebServiceName} - {ProcessGroup:Kubernetes:microservice} - {ProcessGroup:Kubernetes:environment} +{Service:DetectedName} - {ProcessGroup:KubernetesContainerName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +{Service:DetectedName} - {ProcessGroup:SpringBootProfileName/[^\\-]*$} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_cac/conditional-naming-service/conditional-naming-service.yaml b/BMW-Dynatrace-config/CD_cac/conditional-naming-service/conditional-naming-service.yaml new file mode 100644 index 00000000..d0b9c0bd --- /dev/null +++ b/BMW-Dynatrace-config/CD_cac/conditional-naming-service/conditional-naming-service.yaml @@ -0,0 +1,8 @@ +config: +- CDcac: template.json + +CDcac: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: cac +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_cac/conditional-naming-service/template.json b/BMW-Dynatrace-config/CD_cac/conditional-naming-service/template.json new file mode 100644 index 00000000..5d4fac56 --- /dev/null +++ b/BMW-Dynatrace-config/CD_cac/conditional-naming-service/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "type": "SERVICE" +} \ 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 index d41c4c77..5f35e5c1 100644 --- a/BMW-Dynatrace-config/CD_cac/custom-service-java/README.md +++ b/BMW-Dynatrace-config/CD_cac/custom-service-java/README.md @@ -1,30 +1,4 @@ -## 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 configure custom services? -## 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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Custom+Services) page to configure your custom services. \ 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 index 92e734fa..1695924c 100644 --- a/BMW-Dynatrace-config/CD_cac/synthetic-monitor/README.md +++ b/BMW-Dynatrace-config/CD_cac/synthetic-monitor/README.md @@ -1,37 +1,4 @@ -# Synthetic Configuration -To calculate the Availability KPI, a synthetic must be configured. +### How to configure synthetics? -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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Synthetic+Monitors) page to configure your synthetics. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_casa-event-processor/conditional-naming-processgroup/README.md b/BMW-Dynatrace-config/CD_casa-event-processor/conditional-naming-processgroup/README.md new file mode 100644 index 00000000..f94196a5 --- /dev/null +++ b/BMW-Dynatrace-config/CD_casa-event-processor/conditional-naming-processgroup/README.md @@ -0,0 +1,67 @@ +### Process Group Detection Rules and Naming + +#### Detection Rule or Naming? + +For the explanation, we're using a real example of the Infotainment application: + +!(PGNaming1)[../../../../img/PGNaming1.PNG] + +Before working with your dashboards and alerting profiles, an important task to do when working with Dynatrace is checking +the structure of your applications (process groups). You can do that clicking under *technologies* and filter using your +application Management Zone. + +In the picture above, there are two Process Groups called bon-information-prod. **If you see duplicated process groups like in** +**this case, you MUST follow this guideline** + +Next step would be to open both process groups and compare the metadata. In that way, you can identify if all process instances are +part of the same application or not. An easy way to do that is asking yourself: how many instances of my application do i have? + +If you have 4 instances in total and you're able to see 2 in one PG and other 2 in other PG it means that **they are part of the ** +**same application** + +Another situation could be that checking on the metadata, then you see that are **two different application** and Dynatrace is just naming +the process group in the same way + +*Same application* +- Problem: Dynatrace is creating two different process groups, what transalates in two separated services for the same application. Instead of +seeing all the traffic in one service, you will have it splitted and it will complicate your monitoring +- Solution: create a process group detection rule. Contact Dynatrace Expert + +*Different application* +- Problem: Dynatrace is just naming in the same way applications that are different. +- Solution: This case is less severe, since it can be fixed with a process group naming rule. + + +What about our example? +!(PGNaming2)[../../../../img/PGNaming2.PNG] +!(PGNaming3)[../../../../img/PGNaming3.PNG] + +Based on the feedback of the infotaiment team, each process group is a different application (microservice) and it's visible in the kubernetes container/workload +within the metadata of each Process Group. + +#### How to create a Process Group Detection Rule +1. Open the *conditional-naming-processgroup.yaml* file and create a rule that looks like this: +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName} +- tag: Infotainment +- skipDeployment: false +``` +The result of the rule will be renaming the PG to this: +``` +bon-information-prod ipa +bon-information-prod rsl +``` + +Other possible placeholders that you can use are for example: +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName/[^\\-]*$} +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesFullPodName/buffet-(.*?)-} +{ProcessGroup:DetectedName} - {HostGroup:Name/[^\\_]*$} +{ProcessGroup:KubernetesNamespace} +{ProcessGroup:CommandLineArgs/.*?\\-f\\s\\/www\\/(.*?)\\/generated\\/httpd\\.conf.*?} + +You can combine different ones. Check the (documentation)[link] for more \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_casa-event-processor/conditional-naming-processgroup/conditional-naming-processgroup.yaml b/BMW-Dynatrace-config/CD_casa-event-processor/conditional-naming-processgroup/conditional-naming-processgroup.yaml new file mode 100644 index 00000000..22412248 --- /dev/null +++ b/BMW-Dynatrace-config/CD_casa-event-processor/conditional-naming-processgroup/conditional-naming-processgroup.yaml @@ -0,0 +1,8 @@ +config: +- CDcasa-event-processor: template.json + +CDcasa-event-processor: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: casa-event-processor +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_casa-event-processor/conditional-naming-processgroup/template.json b/BMW-Dynatrace-config/CD_casa-event-processor/conditional-naming-processgroup/template.json new file mode 100644 index 00000000..7c039808 --- /dev/null +++ b/BMW-Dynatrace-config/CD_casa-event-processor/conditional-naming-processgroup/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "type": "PROCESS_GROUP" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_casa-event-processor/conditional-naming-service/README.md b/BMW-Dynatrace-config/CD_casa-event-processor/conditional-naming-service/README.md new file mode 100644 index 00000000..c34ef308 --- /dev/null +++ b/BMW-Dynatrace-config/CD_casa-event-processor/conditional-naming-service/README.md @@ -0,0 +1,35 @@ +### Service Naming Rules + +A typical case could be that you access to *Transaction & Services* and you find two services that are exactly the same: +*DataDownloadV1* +*DataDownloadV1* + +If you drilldown into the service and you check in the process group, you may have a PROD and a E2E for each service. + +*Note: if you see that both process group are exactly the same, please contact a Dynatrace expert to create a Process* +*Group detection rule* + +In the case the PG are PROD and E2E, then we need to create a rule that looks like this: + +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {Service:DetectedName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +- tag: Infotainment +- skipDeployment: false +``` + +The rule will get the Service Detected Name (current name) and it will extract (with a regex) the part of the kubernetes namespace after the "-", so -prod or -e2e, resulting in: +*DataDownloadV1 - prod* +*DataDownloadV1 - e2e* + +Now, services will be easy to identify. + +You can create rules based on any property/metadata. Some other placeholder's eamples: +{Service:DatabaseName} - E2E +{Service:WebServiceName} - {ProcessGroup:Kubernetes:microservice} - {ProcessGroup:Kubernetes:environment} +{Service:DetectedName} - {ProcessGroup:KubernetesContainerName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +{Service:DetectedName} - {ProcessGroup:SpringBootProfileName/[^\\-]*$} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_casa-event-processor/conditional-naming-service/conditional-naming-service.yaml b/BMW-Dynatrace-config/CD_casa-event-processor/conditional-naming-service/conditional-naming-service.yaml new file mode 100644 index 00000000..22412248 --- /dev/null +++ b/BMW-Dynatrace-config/CD_casa-event-processor/conditional-naming-service/conditional-naming-service.yaml @@ -0,0 +1,8 @@ +config: +- CDcasa-event-processor: template.json + +CDcasa-event-processor: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: casa-event-processor +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_casa-event-processor/conditional-naming-service/template.json b/BMW-Dynatrace-config/CD_casa-event-processor/conditional-naming-service/template.json new file mode 100644 index 00000000..5d4fac56 --- /dev/null +++ b/BMW-Dynatrace-config/CD_casa-event-processor/conditional-naming-service/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "type": "SERVICE" +} \ 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 index d41c4c77..5f35e5c1 100644 --- 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 @@ -1,30 +1,4 @@ -## 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 configure custom services? -## 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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Custom+Services) page to configure your custom services. \ 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 index 92e734fa..1695924c 100644 --- a/BMW-Dynatrace-config/CD_casa-event-processor/synthetic-monitor/README.md +++ b/BMW-Dynatrace-config/CD_casa-event-processor/synthetic-monitor/README.md @@ -1,37 +1,4 @@ -# Synthetic Configuration -To calculate the Availability KPI, a synthetic must be configured. +### How to configure synthetics? -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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Synthetic+Monitors) page to configure your synthetics. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_cdc/conditional-naming-processgroup/README.md b/BMW-Dynatrace-config/CD_cdc/conditional-naming-processgroup/README.md new file mode 100644 index 00000000..f94196a5 --- /dev/null +++ b/BMW-Dynatrace-config/CD_cdc/conditional-naming-processgroup/README.md @@ -0,0 +1,67 @@ +### Process Group Detection Rules and Naming + +#### Detection Rule or Naming? + +For the explanation, we're using a real example of the Infotainment application: + +!(PGNaming1)[../../../../img/PGNaming1.PNG] + +Before working with your dashboards and alerting profiles, an important task to do when working with Dynatrace is checking +the structure of your applications (process groups). You can do that clicking under *technologies* and filter using your +application Management Zone. + +In the picture above, there are two Process Groups called bon-information-prod. **If you see duplicated process groups like in** +**this case, you MUST follow this guideline** + +Next step would be to open both process groups and compare the metadata. In that way, you can identify if all process instances are +part of the same application or not. An easy way to do that is asking yourself: how many instances of my application do i have? + +If you have 4 instances in total and you're able to see 2 in one PG and other 2 in other PG it means that **they are part of the ** +**same application** + +Another situation could be that checking on the metadata, then you see that are **two different application** and Dynatrace is just naming +the process group in the same way + +*Same application* +- Problem: Dynatrace is creating two different process groups, what transalates in two separated services for the same application. Instead of +seeing all the traffic in one service, you will have it splitted and it will complicate your monitoring +- Solution: create a process group detection rule. Contact Dynatrace Expert + +*Different application* +- Problem: Dynatrace is just naming in the same way applications that are different. +- Solution: This case is less severe, since it can be fixed with a process group naming rule. + + +What about our example? +!(PGNaming2)[../../../../img/PGNaming2.PNG] +!(PGNaming3)[../../../../img/PGNaming3.PNG] + +Based on the feedback of the infotaiment team, each process group is a different application (microservice) and it's visible in the kubernetes container/workload +within the metadata of each Process Group. + +#### How to create a Process Group Detection Rule +1. Open the *conditional-naming-processgroup.yaml* file and create a rule that looks like this: +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName} +- tag: Infotainment +- skipDeployment: false +``` +The result of the rule will be renaming the PG to this: +``` +bon-information-prod ipa +bon-information-prod rsl +``` + +Other possible placeholders that you can use are for example: +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName/[^\\-]*$} +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesFullPodName/buffet-(.*?)-} +{ProcessGroup:DetectedName} - {HostGroup:Name/[^\\_]*$} +{ProcessGroup:KubernetesNamespace} +{ProcessGroup:CommandLineArgs/.*?\\-f\\s\\/www\\/(.*?)\\/generated\\/httpd\\.conf.*?} + +You can combine different ones. Check the (documentation)[link] for more \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_cdc/conditional-naming-processgroup/conditional-naming-processgroup.yaml b/BMW-Dynatrace-config/CD_cdc/conditional-naming-processgroup/conditional-naming-processgroup.yaml new file mode 100644 index 00000000..70299e63 --- /dev/null +++ b/BMW-Dynatrace-config/CD_cdc/conditional-naming-processgroup/conditional-naming-processgroup.yaml @@ -0,0 +1,8 @@ +config: +- CDcdc: template.json + +CDcdc: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: cdc +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_cdc/conditional-naming-processgroup/template.json b/BMW-Dynatrace-config/CD_cdc/conditional-naming-processgroup/template.json new file mode 100644 index 00000000..7c039808 --- /dev/null +++ b/BMW-Dynatrace-config/CD_cdc/conditional-naming-processgroup/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "type": "PROCESS_GROUP" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_cdc/conditional-naming-service/README.md b/BMW-Dynatrace-config/CD_cdc/conditional-naming-service/README.md new file mode 100644 index 00000000..c34ef308 --- /dev/null +++ b/BMW-Dynatrace-config/CD_cdc/conditional-naming-service/README.md @@ -0,0 +1,35 @@ +### Service Naming Rules + +A typical case could be that you access to *Transaction & Services* and you find two services that are exactly the same: +*DataDownloadV1* +*DataDownloadV1* + +If you drilldown into the service and you check in the process group, you may have a PROD and a E2E for each service. + +*Note: if you see that both process group are exactly the same, please contact a Dynatrace expert to create a Process* +*Group detection rule* + +In the case the PG are PROD and E2E, then we need to create a rule that looks like this: + +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {Service:DetectedName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +- tag: Infotainment +- skipDeployment: false +``` + +The rule will get the Service Detected Name (current name) and it will extract (with a regex) the part of the kubernetes namespace after the "-", so -prod or -e2e, resulting in: +*DataDownloadV1 - prod* +*DataDownloadV1 - e2e* + +Now, services will be easy to identify. + +You can create rules based on any property/metadata. Some other placeholder's eamples: +{Service:DatabaseName} - E2E +{Service:WebServiceName} - {ProcessGroup:Kubernetes:microservice} - {ProcessGroup:Kubernetes:environment} +{Service:DetectedName} - {ProcessGroup:KubernetesContainerName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +{Service:DetectedName} - {ProcessGroup:SpringBootProfileName/[^\\-]*$} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_cdc/conditional-naming-service/conditional-naming-service.yaml b/BMW-Dynatrace-config/CD_cdc/conditional-naming-service/conditional-naming-service.yaml new file mode 100644 index 00000000..70299e63 --- /dev/null +++ b/BMW-Dynatrace-config/CD_cdc/conditional-naming-service/conditional-naming-service.yaml @@ -0,0 +1,8 @@ +config: +- CDcdc: template.json + +CDcdc: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: cdc +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_cdc/conditional-naming-service/template.json b/BMW-Dynatrace-config/CD_cdc/conditional-naming-service/template.json new file mode 100644 index 00000000..5d4fac56 --- /dev/null +++ b/BMW-Dynatrace-config/CD_cdc/conditional-naming-service/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "type": "SERVICE" +} \ 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 index d41c4c77..5f35e5c1 100644 --- a/BMW-Dynatrace-config/CD_cdc/custom-service-java/README.md +++ b/BMW-Dynatrace-config/CD_cdc/custom-service-java/README.md @@ -1,30 +1,4 @@ -## 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 configure custom services? -## 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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Custom+Services) page to configure your custom services. \ 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 index 92e734fa..1695924c 100644 --- a/BMW-Dynatrace-config/CD_cdc/synthetic-monitor/README.md +++ b/BMW-Dynatrace-config/CD_cdc/synthetic-monitor/README.md @@ -1,37 +1,4 @@ -# Synthetic Configuration -To calculate the Availability KPI, a synthetic must be configured. +### How to configure synthetics? -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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Synthetic+Monitors) page to configure your synthetics. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_cdcicd-jenkins/conditional-naming-processgroup/README.md b/BMW-Dynatrace-config/CD_cdcicd-jenkins/conditional-naming-processgroup/README.md new file mode 100644 index 00000000..f94196a5 --- /dev/null +++ b/BMW-Dynatrace-config/CD_cdcicd-jenkins/conditional-naming-processgroup/README.md @@ -0,0 +1,67 @@ +### Process Group Detection Rules and Naming + +#### Detection Rule or Naming? + +For the explanation, we're using a real example of the Infotainment application: + +!(PGNaming1)[../../../../img/PGNaming1.PNG] + +Before working with your dashboards and alerting profiles, an important task to do when working with Dynatrace is checking +the structure of your applications (process groups). You can do that clicking under *technologies* and filter using your +application Management Zone. + +In the picture above, there are two Process Groups called bon-information-prod. **If you see duplicated process groups like in** +**this case, you MUST follow this guideline** + +Next step would be to open both process groups and compare the metadata. In that way, you can identify if all process instances are +part of the same application or not. An easy way to do that is asking yourself: how many instances of my application do i have? + +If you have 4 instances in total and you're able to see 2 in one PG and other 2 in other PG it means that **they are part of the ** +**same application** + +Another situation could be that checking on the metadata, then you see that are **two different application** and Dynatrace is just naming +the process group in the same way + +*Same application* +- Problem: Dynatrace is creating two different process groups, what transalates in two separated services for the same application. Instead of +seeing all the traffic in one service, you will have it splitted and it will complicate your monitoring +- Solution: create a process group detection rule. Contact Dynatrace Expert + +*Different application* +- Problem: Dynatrace is just naming in the same way applications that are different. +- Solution: This case is less severe, since it can be fixed with a process group naming rule. + + +What about our example? +!(PGNaming2)[../../../../img/PGNaming2.PNG] +!(PGNaming3)[../../../../img/PGNaming3.PNG] + +Based on the feedback of the infotaiment team, each process group is a different application (microservice) and it's visible in the kubernetes container/workload +within the metadata of each Process Group. + +#### How to create a Process Group Detection Rule +1. Open the *conditional-naming-processgroup.yaml* file and create a rule that looks like this: +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName} +- tag: Infotainment +- skipDeployment: false +``` +The result of the rule will be renaming the PG to this: +``` +bon-information-prod ipa +bon-information-prod rsl +``` + +Other possible placeholders that you can use are for example: +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName/[^\\-]*$} +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesFullPodName/buffet-(.*?)-} +{ProcessGroup:DetectedName} - {HostGroup:Name/[^\\_]*$} +{ProcessGroup:KubernetesNamespace} +{ProcessGroup:CommandLineArgs/.*?\\-f\\s\\/www\\/(.*?)\\/generated\\/httpd\\.conf.*?} + +You can combine different ones. Check the (documentation)[link] for more \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_cdcicd-jenkins/conditional-naming-processgroup/conditional-naming-processgroup.yaml b/BMW-Dynatrace-config/CD_cdcicd-jenkins/conditional-naming-processgroup/conditional-naming-processgroup.yaml new file mode 100644 index 00000000..7722d430 --- /dev/null +++ b/BMW-Dynatrace-config/CD_cdcicd-jenkins/conditional-naming-processgroup/conditional-naming-processgroup.yaml @@ -0,0 +1,8 @@ +config: +- CDcdcicd-jenkins: template.json + +CDcdcicd-jenkins: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: cdcicd-jenkins +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_cdcicd-jenkins/conditional-naming-processgroup/template.json b/BMW-Dynatrace-config/CD_cdcicd-jenkins/conditional-naming-processgroup/template.json new file mode 100644 index 00000000..7c039808 --- /dev/null +++ b/BMW-Dynatrace-config/CD_cdcicd-jenkins/conditional-naming-processgroup/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "type": "PROCESS_GROUP" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_cdcicd-jenkins/conditional-naming-service/README.md b/BMW-Dynatrace-config/CD_cdcicd-jenkins/conditional-naming-service/README.md new file mode 100644 index 00000000..c34ef308 --- /dev/null +++ b/BMW-Dynatrace-config/CD_cdcicd-jenkins/conditional-naming-service/README.md @@ -0,0 +1,35 @@ +### Service Naming Rules + +A typical case could be that you access to *Transaction & Services* and you find two services that are exactly the same: +*DataDownloadV1* +*DataDownloadV1* + +If you drilldown into the service and you check in the process group, you may have a PROD and a E2E for each service. + +*Note: if you see that both process group are exactly the same, please contact a Dynatrace expert to create a Process* +*Group detection rule* + +In the case the PG are PROD and E2E, then we need to create a rule that looks like this: + +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {Service:DetectedName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +- tag: Infotainment +- skipDeployment: false +``` + +The rule will get the Service Detected Name (current name) and it will extract (with a regex) the part of the kubernetes namespace after the "-", so -prod or -e2e, resulting in: +*DataDownloadV1 - prod* +*DataDownloadV1 - e2e* + +Now, services will be easy to identify. + +You can create rules based on any property/metadata. Some other placeholder's eamples: +{Service:DatabaseName} - E2E +{Service:WebServiceName} - {ProcessGroup:Kubernetes:microservice} - {ProcessGroup:Kubernetes:environment} +{Service:DetectedName} - {ProcessGroup:KubernetesContainerName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +{Service:DetectedName} - {ProcessGroup:SpringBootProfileName/[^\\-]*$} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_cdcicd-jenkins/conditional-naming-service/conditional-naming-service.yaml b/BMW-Dynatrace-config/CD_cdcicd-jenkins/conditional-naming-service/conditional-naming-service.yaml new file mode 100644 index 00000000..7722d430 --- /dev/null +++ b/BMW-Dynatrace-config/CD_cdcicd-jenkins/conditional-naming-service/conditional-naming-service.yaml @@ -0,0 +1,8 @@ +config: +- CDcdcicd-jenkins: template.json + +CDcdcicd-jenkins: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: cdcicd-jenkins +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_cdcicd-jenkins/conditional-naming-service/template.json b/BMW-Dynatrace-config/CD_cdcicd-jenkins/conditional-naming-service/template.json new file mode 100644 index 00000000..5d4fac56 --- /dev/null +++ b/BMW-Dynatrace-config/CD_cdcicd-jenkins/conditional-naming-service/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "type": "SERVICE" +} \ 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 index d41c4c77..5f35e5c1 100644 --- a/BMW-Dynatrace-config/CD_cdcicd-jenkins/custom-service-java/README.md +++ b/BMW-Dynatrace-config/CD_cdcicd-jenkins/custom-service-java/README.md @@ -1,30 +1,4 @@ -## 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 configure custom services? -## 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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Custom+Services) page to configure your custom services. \ 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 index 92e734fa..1695924c 100644 --- a/BMW-Dynatrace-config/CD_cdcicd-jenkins/synthetic-monitor/README.md +++ b/BMW-Dynatrace-config/CD_cdcicd-jenkins/synthetic-monitor/README.md @@ -1,37 +1,4 @@ -# Synthetic Configuration -To calculate the Availability KPI, a synthetic must be configured. +### How to configure synthetics? -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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Synthetic+Monitors) page to configure your synthetics. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_chargenow-enabler-service/conditional-naming-processgroup/README.md b/BMW-Dynatrace-config/CD_chargenow-enabler-service/conditional-naming-processgroup/README.md new file mode 100644 index 00000000..f94196a5 --- /dev/null +++ b/BMW-Dynatrace-config/CD_chargenow-enabler-service/conditional-naming-processgroup/README.md @@ -0,0 +1,67 @@ +### Process Group Detection Rules and Naming + +#### Detection Rule or Naming? + +For the explanation, we're using a real example of the Infotainment application: + +!(PGNaming1)[../../../../img/PGNaming1.PNG] + +Before working with your dashboards and alerting profiles, an important task to do when working with Dynatrace is checking +the structure of your applications (process groups). You can do that clicking under *technologies* and filter using your +application Management Zone. + +In the picture above, there are two Process Groups called bon-information-prod. **If you see duplicated process groups like in** +**this case, you MUST follow this guideline** + +Next step would be to open both process groups and compare the metadata. In that way, you can identify if all process instances are +part of the same application or not. An easy way to do that is asking yourself: how many instances of my application do i have? + +If you have 4 instances in total and you're able to see 2 in one PG and other 2 in other PG it means that **they are part of the ** +**same application** + +Another situation could be that checking on the metadata, then you see that are **two different application** and Dynatrace is just naming +the process group in the same way + +*Same application* +- Problem: Dynatrace is creating two different process groups, what transalates in two separated services for the same application. Instead of +seeing all the traffic in one service, you will have it splitted and it will complicate your monitoring +- Solution: create a process group detection rule. Contact Dynatrace Expert + +*Different application* +- Problem: Dynatrace is just naming in the same way applications that are different. +- Solution: This case is less severe, since it can be fixed with a process group naming rule. + + +What about our example? +!(PGNaming2)[../../../../img/PGNaming2.PNG] +!(PGNaming3)[../../../../img/PGNaming3.PNG] + +Based on the feedback of the infotaiment team, each process group is a different application (microservice) and it's visible in the kubernetes container/workload +within the metadata of each Process Group. + +#### How to create a Process Group Detection Rule +1. Open the *conditional-naming-processgroup.yaml* file and create a rule that looks like this: +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName} +- tag: Infotainment +- skipDeployment: false +``` +The result of the rule will be renaming the PG to this: +``` +bon-information-prod ipa +bon-information-prod rsl +``` + +Other possible placeholders that you can use are for example: +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName/[^\\-]*$} +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesFullPodName/buffet-(.*?)-} +{ProcessGroup:DetectedName} - {HostGroup:Name/[^\\_]*$} +{ProcessGroup:KubernetesNamespace} +{ProcessGroup:CommandLineArgs/.*?\\-f\\s\\/www\\/(.*?)\\/generated\\/httpd\\.conf.*?} + +You can combine different ones. Check the (documentation)[link] for more \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_chargenow-enabler-service/conditional-naming-processgroup/conditional-naming-processgroup.yaml b/BMW-Dynatrace-config/CD_chargenow-enabler-service/conditional-naming-processgroup/conditional-naming-processgroup.yaml new file mode 100644 index 00000000..62dc2449 --- /dev/null +++ b/BMW-Dynatrace-config/CD_chargenow-enabler-service/conditional-naming-processgroup/conditional-naming-processgroup.yaml @@ -0,0 +1,8 @@ +config: +- CDchargenow-enabler-service: template.json + +CDchargenow-enabler-service: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: chargenow-enabler-service +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_chargenow-enabler-service/conditional-naming-processgroup/template.json b/BMW-Dynatrace-config/CD_chargenow-enabler-service/conditional-naming-processgroup/template.json new file mode 100644 index 00000000..7c039808 --- /dev/null +++ b/BMW-Dynatrace-config/CD_chargenow-enabler-service/conditional-naming-processgroup/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "type": "PROCESS_GROUP" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_chargenow-enabler-service/conditional-naming-service/README.md b/BMW-Dynatrace-config/CD_chargenow-enabler-service/conditional-naming-service/README.md new file mode 100644 index 00000000..c34ef308 --- /dev/null +++ b/BMW-Dynatrace-config/CD_chargenow-enabler-service/conditional-naming-service/README.md @@ -0,0 +1,35 @@ +### Service Naming Rules + +A typical case could be that you access to *Transaction & Services* and you find two services that are exactly the same: +*DataDownloadV1* +*DataDownloadV1* + +If you drilldown into the service and you check in the process group, you may have a PROD and a E2E for each service. + +*Note: if you see that both process group are exactly the same, please contact a Dynatrace expert to create a Process* +*Group detection rule* + +In the case the PG are PROD and E2E, then we need to create a rule that looks like this: + +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {Service:DetectedName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +- tag: Infotainment +- skipDeployment: false +``` + +The rule will get the Service Detected Name (current name) and it will extract (with a regex) the part of the kubernetes namespace after the "-", so -prod or -e2e, resulting in: +*DataDownloadV1 - prod* +*DataDownloadV1 - e2e* + +Now, services will be easy to identify. + +You can create rules based on any property/metadata. Some other placeholder's eamples: +{Service:DatabaseName} - E2E +{Service:WebServiceName} - {ProcessGroup:Kubernetes:microservice} - {ProcessGroup:Kubernetes:environment} +{Service:DetectedName} - {ProcessGroup:KubernetesContainerName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +{Service:DetectedName} - {ProcessGroup:SpringBootProfileName/[^\\-]*$} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_chargenow-enabler-service/conditional-naming-service/conditional-naming-service.yaml b/BMW-Dynatrace-config/CD_chargenow-enabler-service/conditional-naming-service/conditional-naming-service.yaml new file mode 100644 index 00000000..62dc2449 --- /dev/null +++ b/BMW-Dynatrace-config/CD_chargenow-enabler-service/conditional-naming-service/conditional-naming-service.yaml @@ -0,0 +1,8 @@ +config: +- CDchargenow-enabler-service: template.json + +CDchargenow-enabler-service: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: chargenow-enabler-service +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_chargenow-enabler-service/conditional-naming-service/template.json b/BMW-Dynatrace-config/CD_chargenow-enabler-service/conditional-naming-service/template.json new file mode 100644 index 00000000..5d4fac56 --- /dev/null +++ b/BMW-Dynatrace-config/CD_chargenow-enabler-service/conditional-naming-service/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "type": "SERVICE" +} \ 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 index d41c4c77..5f35e5c1 100644 --- 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 @@ -1,30 +1,4 @@ -## 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 configure custom services? -## 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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Custom+Services) page to configure your custom services. \ 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 index 92e734fa..1695924c 100644 --- a/BMW-Dynatrace-config/CD_chargenow-enabler-service/synthetic-monitor/README.md +++ b/BMW-Dynatrace-config/CD_chargenow-enabler-service/synthetic-monitor/README.md @@ -1,37 +1,4 @@ -# Synthetic Configuration -To calculate the Availability KPI, a synthetic must be configured. +### How to configure synthetics? -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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Synthetic+Monitors) page to configure your synthetics. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_charging-data-privacy-composite/conditional-naming-processgroup/README.md b/BMW-Dynatrace-config/CD_charging-data-privacy-composite/conditional-naming-processgroup/README.md new file mode 100644 index 00000000..f94196a5 --- /dev/null +++ b/BMW-Dynatrace-config/CD_charging-data-privacy-composite/conditional-naming-processgroup/README.md @@ -0,0 +1,67 @@ +### Process Group Detection Rules and Naming + +#### Detection Rule or Naming? + +For the explanation, we're using a real example of the Infotainment application: + +!(PGNaming1)[../../../../img/PGNaming1.PNG] + +Before working with your dashboards and alerting profiles, an important task to do when working with Dynatrace is checking +the structure of your applications (process groups). You can do that clicking under *technologies* and filter using your +application Management Zone. + +In the picture above, there are two Process Groups called bon-information-prod. **If you see duplicated process groups like in** +**this case, you MUST follow this guideline** + +Next step would be to open both process groups and compare the metadata. In that way, you can identify if all process instances are +part of the same application or not. An easy way to do that is asking yourself: how many instances of my application do i have? + +If you have 4 instances in total and you're able to see 2 in one PG and other 2 in other PG it means that **they are part of the ** +**same application** + +Another situation could be that checking on the metadata, then you see that are **two different application** and Dynatrace is just naming +the process group in the same way + +*Same application* +- Problem: Dynatrace is creating two different process groups, what transalates in two separated services for the same application. Instead of +seeing all the traffic in one service, you will have it splitted and it will complicate your monitoring +- Solution: create a process group detection rule. Contact Dynatrace Expert + +*Different application* +- Problem: Dynatrace is just naming in the same way applications that are different. +- Solution: This case is less severe, since it can be fixed with a process group naming rule. + + +What about our example? +!(PGNaming2)[../../../../img/PGNaming2.PNG] +!(PGNaming3)[../../../../img/PGNaming3.PNG] + +Based on the feedback of the infotaiment team, each process group is a different application (microservice) and it's visible in the kubernetes container/workload +within the metadata of each Process Group. + +#### How to create a Process Group Detection Rule +1. Open the *conditional-naming-processgroup.yaml* file and create a rule that looks like this: +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName} +- tag: Infotainment +- skipDeployment: false +``` +The result of the rule will be renaming the PG to this: +``` +bon-information-prod ipa +bon-information-prod rsl +``` + +Other possible placeholders that you can use are for example: +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName/[^\\-]*$} +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesFullPodName/buffet-(.*?)-} +{ProcessGroup:DetectedName} - {HostGroup:Name/[^\\_]*$} +{ProcessGroup:KubernetesNamespace} +{ProcessGroup:CommandLineArgs/.*?\\-f\\s\\/www\\/(.*?)\\/generated\\/httpd\\.conf.*?} + +You can combine different ones. Check the (documentation)[link] for more \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_charging-data-privacy-composite/conditional-naming-processgroup/conditional-naming-processgroup.yaml b/BMW-Dynatrace-config/CD_charging-data-privacy-composite/conditional-naming-processgroup/conditional-naming-processgroup.yaml new file mode 100644 index 00000000..907d7140 --- /dev/null +++ b/BMW-Dynatrace-config/CD_charging-data-privacy-composite/conditional-naming-processgroup/conditional-naming-processgroup.yaml @@ -0,0 +1,8 @@ +config: +- CDcharging-data-privacy-composite: template.json + +CDcharging-data-privacy-composite: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: charging-data-privacy-composite +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_charging-data-privacy-composite/conditional-naming-processgroup/template.json b/BMW-Dynatrace-config/CD_charging-data-privacy-composite/conditional-naming-processgroup/template.json new file mode 100644 index 00000000..7c039808 --- /dev/null +++ b/BMW-Dynatrace-config/CD_charging-data-privacy-composite/conditional-naming-processgroup/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "type": "PROCESS_GROUP" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_charging-data-privacy-composite/conditional-naming-service/README.md b/BMW-Dynatrace-config/CD_charging-data-privacy-composite/conditional-naming-service/README.md new file mode 100644 index 00000000..c34ef308 --- /dev/null +++ b/BMW-Dynatrace-config/CD_charging-data-privacy-composite/conditional-naming-service/README.md @@ -0,0 +1,35 @@ +### Service Naming Rules + +A typical case could be that you access to *Transaction & Services* and you find two services that are exactly the same: +*DataDownloadV1* +*DataDownloadV1* + +If you drilldown into the service and you check in the process group, you may have a PROD and a E2E for each service. + +*Note: if you see that both process group are exactly the same, please contact a Dynatrace expert to create a Process* +*Group detection rule* + +In the case the PG are PROD and E2E, then we need to create a rule that looks like this: + +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {Service:DetectedName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +- tag: Infotainment +- skipDeployment: false +``` + +The rule will get the Service Detected Name (current name) and it will extract (with a regex) the part of the kubernetes namespace after the "-", so -prod or -e2e, resulting in: +*DataDownloadV1 - prod* +*DataDownloadV1 - e2e* + +Now, services will be easy to identify. + +You can create rules based on any property/metadata. Some other placeholder's eamples: +{Service:DatabaseName} - E2E +{Service:WebServiceName} - {ProcessGroup:Kubernetes:microservice} - {ProcessGroup:Kubernetes:environment} +{Service:DetectedName} - {ProcessGroup:KubernetesContainerName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +{Service:DetectedName} - {ProcessGroup:SpringBootProfileName/[^\\-]*$} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_charging-data-privacy-composite/conditional-naming-service/conditional-naming-service.yaml b/BMW-Dynatrace-config/CD_charging-data-privacy-composite/conditional-naming-service/conditional-naming-service.yaml new file mode 100644 index 00000000..907d7140 --- /dev/null +++ b/BMW-Dynatrace-config/CD_charging-data-privacy-composite/conditional-naming-service/conditional-naming-service.yaml @@ -0,0 +1,8 @@ +config: +- CDcharging-data-privacy-composite: template.json + +CDcharging-data-privacy-composite: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: charging-data-privacy-composite +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_charging-data-privacy-composite/conditional-naming-service/template.json b/BMW-Dynatrace-config/CD_charging-data-privacy-composite/conditional-naming-service/template.json new file mode 100644 index 00000000..5d4fac56 --- /dev/null +++ b/BMW-Dynatrace-config/CD_charging-data-privacy-composite/conditional-naming-service/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "type": "SERVICE" +} \ 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 index d41c4c77..5f35e5c1 100644 --- 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 @@ -1,30 +1,4 @@ -## 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 configure custom services? -## 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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Custom+Services) page to configure your custom services. \ 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 index 92e734fa..1695924c 100644 --- 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 @@ -1,37 +1,4 @@ -# Synthetic Configuration -To calculate the Availability KPI, a synthetic must be configured. +### How to configure synthetics? -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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Synthetic+Monitors) page to configure your synthetics. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_charging-data-privacy/conditional-naming-processgroup/README.md b/BMW-Dynatrace-config/CD_charging-data-privacy/conditional-naming-processgroup/README.md new file mode 100644 index 00000000..f94196a5 --- /dev/null +++ b/BMW-Dynatrace-config/CD_charging-data-privacy/conditional-naming-processgroup/README.md @@ -0,0 +1,67 @@ +### Process Group Detection Rules and Naming + +#### Detection Rule or Naming? + +For the explanation, we're using a real example of the Infotainment application: + +!(PGNaming1)[../../../../img/PGNaming1.PNG] + +Before working with your dashboards and alerting profiles, an important task to do when working with Dynatrace is checking +the structure of your applications (process groups). You can do that clicking under *technologies* and filter using your +application Management Zone. + +In the picture above, there are two Process Groups called bon-information-prod. **If you see duplicated process groups like in** +**this case, you MUST follow this guideline** + +Next step would be to open both process groups and compare the metadata. In that way, you can identify if all process instances are +part of the same application or not. An easy way to do that is asking yourself: how many instances of my application do i have? + +If you have 4 instances in total and you're able to see 2 in one PG and other 2 in other PG it means that **they are part of the ** +**same application** + +Another situation could be that checking on the metadata, then you see that are **two different application** and Dynatrace is just naming +the process group in the same way + +*Same application* +- Problem: Dynatrace is creating two different process groups, what transalates in two separated services for the same application. Instead of +seeing all the traffic in one service, you will have it splitted and it will complicate your monitoring +- Solution: create a process group detection rule. Contact Dynatrace Expert + +*Different application* +- Problem: Dynatrace is just naming in the same way applications that are different. +- Solution: This case is less severe, since it can be fixed with a process group naming rule. + + +What about our example? +!(PGNaming2)[../../../../img/PGNaming2.PNG] +!(PGNaming3)[../../../../img/PGNaming3.PNG] + +Based on the feedback of the infotaiment team, each process group is a different application (microservice) and it's visible in the kubernetes container/workload +within the metadata of each Process Group. + +#### How to create a Process Group Detection Rule +1. Open the *conditional-naming-processgroup.yaml* file and create a rule that looks like this: +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName} +- tag: Infotainment +- skipDeployment: false +``` +The result of the rule will be renaming the PG to this: +``` +bon-information-prod ipa +bon-information-prod rsl +``` + +Other possible placeholders that you can use are for example: +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName/[^\\-]*$} +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesFullPodName/buffet-(.*?)-} +{ProcessGroup:DetectedName} - {HostGroup:Name/[^\\_]*$} +{ProcessGroup:KubernetesNamespace} +{ProcessGroup:CommandLineArgs/.*?\\-f\\s\\/www\\/(.*?)\\/generated\\/httpd\\.conf.*?} + +You can combine different ones. Check the (documentation)[link] for more \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_charging-data-privacy/conditional-naming-processgroup/conditional-naming-processgroup.yaml b/BMW-Dynatrace-config/CD_charging-data-privacy/conditional-naming-processgroup/conditional-naming-processgroup.yaml new file mode 100644 index 00000000..c6514b20 --- /dev/null +++ b/BMW-Dynatrace-config/CD_charging-data-privacy/conditional-naming-processgroup/conditional-naming-processgroup.yaml @@ -0,0 +1,8 @@ +config: +- CDcharging-data-privacy: template.json + +CDcharging-data-privacy: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: charging-data-privacy +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_charging-data-privacy/conditional-naming-processgroup/template.json b/BMW-Dynatrace-config/CD_charging-data-privacy/conditional-naming-processgroup/template.json new file mode 100644 index 00000000..7c039808 --- /dev/null +++ b/BMW-Dynatrace-config/CD_charging-data-privacy/conditional-naming-processgroup/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "type": "PROCESS_GROUP" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_charging-data-privacy/conditional-naming-service/README.md b/BMW-Dynatrace-config/CD_charging-data-privacy/conditional-naming-service/README.md new file mode 100644 index 00000000..c34ef308 --- /dev/null +++ b/BMW-Dynatrace-config/CD_charging-data-privacy/conditional-naming-service/README.md @@ -0,0 +1,35 @@ +### Service Naming Rules + +A typical case could be that you access to *Transaction & Services* and you find two services that are exactly the same: +*DataDownloadV1* +*DataDownloadV1* + +If you drilldown into the service and you check in the process group, you may have a PROD and a E2E for each service. + +*Note: if you see that both process group are exactly the same, please contact a Dynatrace expert to create a Process* +*Group detection rule* + +In the case the PG are PROD and E2E, then we need to create a rule that looks like this: + +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {Service:DetectedName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +- tag: Infotainment +- skipDeployment: false +``` + +The rule will get the Service Detected Name (current name) and it will extract (with a regex) the part of the kubernetes namespace after the "-", so -prod or -e2e, resulting in: +*DataDownloadV1 - prod* +*DataDownloadV1 - e2e* + +Now, services will be easy to identify. + +You can create rules based on any property/metadata. Some other placeholder's eamples: +{Service:DatabaseName} - E2E +{Service:WebServiceName} - {ProcessGroup:Kubernetes:microservice} - {ProcessGroup:Kubernetes:environment} +{Service:DetectedName} - {ProcessGroup:KubernetesContainerName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +{Service:DetectedName} - {ProcessGroup:SpringBootProfileName/[^\\-]*$} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_charging-data-privacy/conditional-naming-service/conditional-naming-service.yaml b/BMW-Dynatrace-config/CD_charging-data-privacy/conditional-naming-service/conditional-naming-service.yaml new file mode 100644 index 00000000..c6514b20 --- /dev/null +++ b/BMW-Dynatrace-config/CD_charging-data-privacy/conditional-naming-service/conditional-naming-service.yaml @@ -0,0 +1,8 @@ +config: +- CDcharging-data-privacy: template.json + +CDcharging-data-privacy: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: charging-data-privacy +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_charging-data-privacy/conditional-naming-service/template.json b/BMW-Dynatrace-config/CD_charging-data-privacy/conditional-naming-service/template.json new file mode 100644 index 00000000..5d4fac56 --- /dev/null +++ b/BMW-Dynatrace-config/CD_charging-data-privacy/conditional-naming-service/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "type": "SERVICE" +} \ 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 index d41c4c77..5f35e5c1 100644 --- 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 @@ -1,30 +1,4 @@ -## 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 configure custom services? -## 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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Custom+Services) page to configure your custom services. \ 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 index 92e734fa..1695924c 100644 --- a/BMW-Dynatrace-config/CD_charging-data-privacy/synthetic-monitor/README.md +++ b/BMW-Dynatrace-config/CD_charging-data-privacy/synthetic-monitor/README.md @@ -1,37 +1,4 @@ -# Synthetic Configuration -To calculate the Availability KPI, a synthetic must be configured. +### How to configure synthetics? -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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Synthetic+Monitors) page to configure your synthetics. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_charging-events-push-notification-service/conditional-naming-processgroup/README.md b/BMW-Dynatrace-config/CD_charging-events-push-notification-service/conditional-naming-processgroup/README.md new file mode 100644 index 00000000..f94196a5 --- /dev/null +++ b/BMW-Dynatrace-config/CD_charging-events-push-notification-service/conditional-naming-processgroup/README.md @@ -0,0 +1,67 @@ +### Process Group Detection Rules and Naming + +#### Detection Rule or Naming? + +For the explanation, we're using a real example of the Infotainment application: + +!(PGNaming1)[../../../../img/PGNaming1.PNG] + +Before working with your dashboards and alerting profiles, an important task to do when working with Dynatrace is checking +the structure of your applications (process groups). You can do that clicking under *technologies* and filter using your +application Management Zone. + +In the picture above, there are two Process Groups called bon-information-prod. **If you see duplicated process groups like in** +**this case, you MUST follow this guideline** + +Next step would be to open both process groups and compare the metadata. In that way, you can identify if all process instances are +part of the same application or not. An easy way to do that is asking yourself: how many instances of my application do i have? + +If you have 4 instances in total and you're able to see 2 in one PG and other 2 in other PG it means that **they are part of the ** +**same application** + +Another situation could be that checking on the metadata, then you see that are **two different application** and Dynatrace is just naming +the process group in the same way + +*Same application* +- Problem: Dynatrace is creating two different process groups, what transalates in two separated services for the same application. Instead of +seeing all the traffic in one service, you will have it splitted and it will complicate your monitoring +- Solution: create a process group detection rule. Contact Dynatrace Expert + +*Different application* +- Problem: Dynatrace is just naming in the same way applications that are different. +- Solution: This case is less severe, since it can be fixed with a process group naming rule. + + +What about our example? +!(PGNaming2)[../../../../img/PGNaming2.PNG] +!(PGNaming3)[../../../../img/PGNaming3.PNG] + +Based on the feedback of the infotaiment team, each process group is a different application (microservice) and it's visible in the kubernetes container/workload +within the metadata of each Process Group. + +#### How to create a Process Group Detection Rule +1. Open the *conditional-naming-processgroup.yaml* file and create a rule that looks like this: +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName} +- tag: Infotainment +- skipDeployment: false +``` +The result of the rule will be renaming the PG to this: +``` +bon-information-prod ipa +bon-information-prod rsl +``` + +Other possible placeholders that you can use are for example: +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName/[^\\-]*$} +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesFullPodName/buffet-(.*?)-} +{ProcessGroup:DetectedName} - {HostGroup:Name/[^\\_]*$} +{ProcessGroup:KubernetesNamespace} +{ProcessGroup:CommandLineArgs/.*?\\-f\\s\\/www\\/(.*?)\\/generated\\/httpd\\.conf.*?} + +You can combine different ones. Check the (documentation)[link] for more \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_charging-events-push-notification-service/conditional-naming-processgroup/conditional-naming-processgroup.yaml b/BMW-Dynatrace-config/CD_charging-events-push-notification-service/conditional-naming-processgroup/conditional-naming-processgroup.yaml new file mode 100644 index 00000000..e10d883e --- /dev/null +++ b/BMW-Dynatrace-config/CD_charging-events-push-notification-service/conditional-naming-processgroup/conditional-naming-processgroup.yaml @@ -0,0 +1,8 @@ +config: +- CDcharging-events-push-notification-service: template.json + +CDcharging-events-push-notification-service: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: charging-events-push-notification-service +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_charging-events-push-notification-service/conditional-naming-processgroup/template.json b/BMW-Dynatrace-config/CD_charging-events-push-notification-service/conditional-naming-processgroup/template.json new file mode 100644 index 00000000..7c039808 --- /dev/null +++ b/BMW-Dynatrace-config/CD_charging-events-push-notification-service/conditional-naming-processgroup/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "type": "PROCESS_GROUP" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_charging-events-push-notification-service/conditional-naming-service/README.md b/BMW-Dynatrace-config/CD_charging-events-push-notification-service/conditional-naming-service/README.md new file mode 100644 index 00000000..c34ef308 --- /dev/null +++ b/BMW-Dynatrace-config/CD_charging-events-push-notification-service/conditional-naming-service/README.md @@ -0,0 +1,35 @@ +### Service Naming Rules + +A typical case could be that you access to *Transaction & Services* and you find two services that are exactly the same: +*DataDownloadV1* +*DataDownloadV1* + +If you drilldown into the service and you check in the process group, you may have a PROD and a E2E for each service. + +*Note: if you see that both process group are exactly the same, please contact a Dynatrace expert to create a Process* +*Group detection rule* + +In the case the PG are PROD and E2E, then we need to create a rule that looks like this: + +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {Service:DetectedName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +- tag: Infotainment +- skipDeployment: false +``` + +The rule will get the Service Detected Name (current name) and it will extract (with a regex) the part of the kubernetes namespace after the "-", so -prod or -e2e, resulting in: +*DataDownloadV1 - prod* +*DataDownloadV1 - e2e* + +Now, services will be easy to identify. + +You can create rules based on any property/metadata. Some other placeholder's eamples: +{Service:DatabaseName} - E2E +{Service:WebServiceName} - {ProcessGroup:Kubernetes:microservice} - {ProcessGroup:Kubernetes:environment} +{Service:DetectedName} - {ProcessGroup:KubernetesContainerName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +{Service:DetectedName} - {ProcessGroup:SpringBootProfileName/[^\\-]*$} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_charging-events-push-notification-service/conditional-naming-service/conditional-naming-service.yaml b/BMW-Dynatrace-config/CD_charging-events-push-notification-service/conditional-naming-service/conditional-naming-service.yaml new file mode 100644 index 00000000..e10d883e --- /dev/null +++ b/BMW-Dynatrace-config/CD_charging-events-push-notification-service/conditional-naming-service/conditional-naming-service.yaml @@ -0,0 +1,8 @@ +config: +- CDcharging-events-push-notification-service: template.json + +CDcharging-events-push-notification-service: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: charging-events-push-notification-service +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_charging-events-push-notification-service/conditional-naming-service/template.json b/BMW-Dynatrace-config/CD_charging-events-push-notification-service/conditional-naming-service/template.json new file mode 100644 index 00000000..5d4fac56 --- /dev/null +++ b/BMW-Dynatrace-config/CD_charging-events-push-notification-service/conditional-naming-service/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "type": "SERVICE" +} \ 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 index d41c4c77..5f35e5c1 100644 --- 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 @@ -1,30 +1,4 @@ -## 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 configure custom services? -## 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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Custom+Services) page to configure your custom services. \ 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 index 92e734fa..1695924c 100644 --- 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 @@ -1,37 +1,4 @@ -# Synthetic Configuration -To calculate the Availability KPI, a synthetic must be configured. +### How to configure synthetics? -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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Synthetic+Monitors) page to configure your synthetics. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_charging-events-service/conditional-naming-processgroup/README.md b/BMW-Dynatrace-config/CD_charging-events-service/conditional-naming-processgroup/README.md new file mode 100644 index 00000000..f94196a5 --- /dev/null +++ b/BMW-Dynatrace-config/CD_charging-events-service/conditional-naming-processgroup/README.md @@ -0,0 +1,67 @@ +### Process Group Detection Rules and Naming + +#### Detection Rule or Naming? + +For the explanation, we're using a real example of the Infotainment application: + +!(PGNaming1)[../../../../img/PGNaming1.PNG] + +Before working with your dashboards and alerting profiles, an important task to do when working with Dynatrace is checking +the structure of your applications (process groups). You can do that clicking under *technologies* and filter using your +application Management Zone. + +In the picture above, there are two Process Groups called bon-information-prod. **If you see duplicated process groups like in** +**this case, you MUST follow this guideline** + +Next step would be to open both process groups and compare the metadata. In that way, you can identify if all process instances are +part of the same application or not. An easy way to do that is asking yourself: how many instances of my application do i have? + +If you have 4 instances in total and you're able to see 2 in one PG and other 2 in other PG it means that **they are part of the ** +**same application** + +Another situation could be that checking on the metadata, then you see that are **two different application** and Dynatrace is just naming +the process group in the same way + +*Same application* +- Problem: Dynatrace is creating two different process groups, what transalates in two separated services for the same application. Instead of +seeing all the traffic in one service, you will have it splitted and it will complicate your monitoring +- Solution: create a process group detection rule. Contact Dynatrace Expert + +*Different application* +- Problem: Dynatrace is just naming in the same way applications that are different. +- Solution: This case is less severe, since it can be fixed with a process group naming rule. + + +What about our example? +!(PGNaming2)[../../../../img/PGNaming2.PNG] +!(PGNaming3)[../../../../img/PGNaming3.PNG] + +Based on the feedback of the infotaiment team, each process group is a different application (microservice) and it's visible in the kubernetes container/workload +within the metadata of each Process Group. + +#### How to create a Process Group Detection Rule +1. Open the *conditional-naming-processgroup.yaml* file and create a rule that looks like this: +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName} +- tag: Infotainment +- skipDeployment: false +``` +The result of the rule will be renaming the PG to this: +``` +bon-information-prod ipa +bon-information-prod rsl +``` + +Other possible placeholders that you can use are for example: +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName/[^\\-]*$} +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesFullPodName/buffet-(.*?)-} +{ProcessGroup:DetectedName} - {HostGroup:Name/[^\\_]*$} +{ProcessGroup:KubernetesNamespace} +{ProcessGroup:CommandLineArgs/.*?\\-f\\s\\/www\\/(.*?)\\/generated\\/httpd\\.conf.*?} + +You can combine different ones. Check the (documentation)[link] for more \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_charging-events-service/conditional-naming-processgroup/conditional-naming-processgroup.yaml b/BMW-Dynatrace-config/CD_charging-events-service/conditional-naming-processgroup/conditional-naming-processgroup.yaml new file mode 100644 index 00000000..ca9d0ed8 --- /dev/null +++ b/BMW-Dynatrace-config/CD_charging-events-service/conditional-naming-processgroup/conditional-naming-processgroup.yaml @@ -0,0 +1,8 @@ +config: +- CDcharging-events-service: template.json + +CDcharging-events-service: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: charging-events-service +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_charging-events-service/conditional-naming-processgroup/template.json b/BMW-Dynatrace-config/CD_charging-events-service/conditional-naming-processgroup/template.json new file mode 100644 index 00000000..7c039808 --- /dev/null +++ b/BMW-Dynatrace-config/CD_charging-events-service/conditional-naming-processgroup/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "type": "PROCESS_GROUP" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_charging-events-service/conditional-naming-service/README.md b/BMW-Dynatrace-config/CD_charging-events-service/conditional-naming-service/README.md new file mode 100644 index 00000000..c34ef308 --- /dev/null +++ b/BMW-Dynatrace-config/CD_charging-events-service/conditional-naming-service/README.md @@ -0,0 +1,35 @@ +### Service Naming Rules + +A typical case could be that you access to *Transaction & Services* and you find two services that are exactly the same: +*DataDownloadV1* +*DataDownloadV1* + +If you drilldown into the service and you check in the process group, you may have a PROD and a E2E for each service. + +*Note: if you see that both process group are exactly the same, please contact a Dynatrace expert to create a Process* +*Group detection rule* + +In the case the PG are PROD and E2E, then we need to create a rule that looks like this: + +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {Service:DetectedName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +- tag: Infotainment +- skipDeployment: false +``` + +The rule will get the Service Detected Name (current name) and it will extract (with a regex) the part of the kubernetes namespace after the "-", so -prod or -e2e, resulting in: +*DataDownloadV1 - prod* +*DataDownloadV1 - e2e* + +Now, services will be easy to identify. + +You can create rules based on any property/metadata. Some other placeholder's eamples: +{Service:DatabaseName} - E2E +{Service:WebServiceName} - {ProcessGroup:Kubernetes:microservice} - {ProcessGroup:Kubernetes:environment} +{Service:DetectedName} - {ProcessGroup:KubernetesContainerName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +{Service:DetectedName} - {ProcessGroup:SpringBootProfileName/[^\\-]*$} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_charging-events-service/conditional-naming-service/conditional-naming-service.yaml b/BMW-Dynatrace-config/CD_charging-events-service/conditional-naming-service/conditional-naming-service.yaml new file mode 100644 index 00000000..ca9d0ed8 --- /dev/null +++ b/BMW-Dynatrace-config/CD_charging-events-service/conditional-naming-service/conditional-naming-service.yaml @@ -0,0 +1,8 @@ +config: +- CDcharging-events-service: template.json + +CDcharging-events-service: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: charging-events-service +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_charging-events-service/conditional-naming-service/template.json b/BMW-Dynatrace-config/CD_charging-events-service/conditional-naming-service/template.json new file mode 100644 index 00000000..5d4fac56 --- /dev/null +++ b/BMW-Dynatrace-config/CD_charging-events-service/conditional-naming-service/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "type": "SERVICE" +} \ 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 index d41c4c77..5f35e5c1 100644 --- 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 @@ -1,30 +1,4 @@ -## 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 configure custom services? -## 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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Custom+Services) page to configure your custom services. \ 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 index 92e734fa..1695924c 100644 --- a/BMW-Dynatrace-config/CD_charging-events-service/synthetic-monitor/README.md +++ b/BMW-Dynatrace-config/CD_charging-events-service/synthetic-monitor/README.md @@ -1,37 +1,4 @@ -# Synthetic Configuration -To calculate the Availability KPI, a synthetic must be configured. +### How to configure synthetics? -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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Synthetic+Monitors) page to configure your synthetics. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_charging-history-gdpr-proxy-service/conditional-naming-processgroup/README.md b/BMW-Dynatrace-config/CD_charging-history-gdpr-proxy-service/conditional-naming-processgroup/README.md new file mode 100644 index 00000000..f94196a5 --- /dev/null +++ b/BMW-Dynatrace-config/CD_charging-history-gdpr-proxy-service/conditional-naming-processgroup/README.md @@ -0,0 +1,67 @@ +### Process Group Detection Rules and Naming + +#### Detection Rule or Naming? + +For the explanation, we're using a real example of the Infotainment application: + +!(PGNaming1)[../../../../img/PGNaming1.PNG] + +Before working with your dashboards and alerting profiles, an important task to do when working with Dynatrace is checking +the structure of your applications (process groups). You can do that clicking under *technologies* and filter using your +application Management Zone. + +In the picture above, there are two Process Groups called bon-information-prod. **If you see duplicated process groups like in** +**this case, you MUST follow this guideline** + +Next step would be to open both process groups and compare the metadata. In that way, you can identify if all process instances are +part of the same application or not. An easy way to do that is asking yourself: how many instances of my application do i have? + +If you have 4 instances in total and you're able to see 2 in one PG and other 2 in other PG it means that **they are part of the ** +**same application** + +Another situation could be that checking on the metadata, then you see that are **two different application** and Dynatrace is just naming +the process group in the same way + +*Same application* +- Problem: Dynatrace is creating two different process groups, what transalates in two separated services for the same application. Instead of +seeing all the traffic in one service, you will have it splitted and it will complicate your monitoring +- Solution: create a process group detection rule. Contact Dynatrace Expert + +*Different application* +- Problem: Dynatrace is just naming in the same way applications that are different. +- Solution: This case is less severe, since it can be fixed with a process group naming rule. + + +What about our example? +!(PGNaming2)[../../../../img/PGNaming2.PNG] +!(PGNaming3)[../../../../img/PGNaming3.PNG] + +Based on the feedback of the infotaiment team, each process group is a different application (microservice) and it's visible in the kubernetes container/workload +within the metadata of each Process Group. + +#### How to create a Process Group Detection Rule +1. Open the *conditional-naming-processgroup.yaml* file and create a rule that looks like this: +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName} +- tag: Infotainment +- skipDeployment: false +``` +The result of the rule will be renaming the PG to this: +``` +bon-information-prod ipa +bon-information-prod rsl +``` + +Other possible placeholders that you can use are for example: +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName/[^\\-]*$} +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesFullPodName/buffet-(.*?)-} +{ProcessGroup:DetectedName} - {HostGroup:Name/[^\\_]*$} +{ProcessGroup:KubernetesNamespace} +{ProcessGroup:CommandLineArgs/.*?\\-f\\s\\/www\\/(.*?)\\/generated\\/httpd\\.conf.*?} + +You can combine different ones. Check the (documentation)[link] for more \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_charging-history-gdpr-proxy-service/conditional-naming-processgroup/conditional-naming-processgroup.yaml b/BMW-Dynatrace-config/CD_charging-history-gdpr-proxy-service/conditional-naming-processgroup/conditional-naming-processgroup.yaml new file mode 100644 index 00000000..49a892cc --- /dev/null +++ b/BMW-Dynatrace-config/CD_charging-history-gdpr-proxy-service/conditional-naming-processgroup/conditional-naming-processgroup.yaml @@ -0,0 +1,8 @@ +config: +- CDcharging-history-gdpr-proxy-service: template.json + +CDcharging-history-gdpr-proxy-service: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: charging-history-gdpr-proxy-service +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_charging-history-gdpr-proxy-service/conditional-naming-processgroup/template.json b/BMW-Dynatrace-config/CD_charging-history-gdpr-proxy-service/conditional-naming-processgroup/template.json new file mode 100644 index 00000000..7c039808 --- /dev/null +++ b/BMW-Dynatrace-config/CD_charging-history-gdpr-proxy-service/conditional-naming-processgroup/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "type": "PROCESS_GROUP" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_charging-history-gdpr-proxy-service/conditional-naming-service/README.md b/BMW-Dynatrace-config/CD_charging-history-gdpr-proxy-service/conditional-naming-service/README.md new file mode 100644 index 00000000..c34ef308 --- /dev/null +++ b/BMW-Dynatrace-config/CD_charging-history-gdpr-proxy-service/conditional-naming-service/README.md @@ -0,0 +1,35 @@ +### Service Naming Rules + +A typical case could be that you access to *Transaction & Services* and you find two services that are exactly the same: +*DataDownloadV1* +*DataDownloadV1* + +If you drilldown into the service and you check in the process group, you may have a PROD and a E2E for each service. + +*Note: if you see that both process group are exactly the same, please contact a Dynatrace expert to create a Process* +*Group detection rule* + +In the case the PG are PROD and E2E, then we need to create a rule that looks like this: + +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {Service:DetectedName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +- tag: Infotainment +- skipDeployment: false +``` + +The rule will get the Service Detected Name (current name) and it will extract (with a regex) the part of the kubernetes namespace after the "-", so -prod or -e2e, resulting in: +*DataDownloadV1 - prod* +*DataDownloadV1 - e2e* + +Now, services will be easy to identify. + +You can create rules based on any property/metadata. Some other placeholder's eamples: +{Service:DatabaseName} - E2E +{Service:WebServiceName} - {ProcessGroup:Kubernetes:microservice} - {ProcessGroup:Kubernetes:environment} +{Service:DetectedName} - {ProcessGroup:KubernetesContainerName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +{Service:DetectedName} - {ProcessGroup:SpringBootProfileName/[^\\-]*$} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_charging-history-gdpr-proxy-service/conditional-naming-service/conditional-naming-service.yaml b/BMW-Dynatrace-config/CD_charging-history-gdpr-proxy-service/conditional-naming-service/conditional-naming-service.yaml new file mode 100644 index 00000000..49a892cc --- /dev/null +++ b/BMW-Dynatrace-config/CD_charging-history-gdpr-proxy-service/conditional-naming-service/conditional-naming-service.yaml @@ -0,0 +1,8 @@ +config: +- CDcharging-history-gdpr-proxy-service: template.json + +CDcharging-history-gdpr-proxy-service: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: charging-history-gdpr-proxy-service +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_charging-history-gdpr-proxy-service/conditional-naming-service/template.json b/BMW-Dynatrace-config/CD_charging-history-gdpr-proxy-service/conditional-naming-service/template.json new file mode 100644 index 00000000..5d4fac56 --- /dev/null +++ b/BMW-Dynatrace-config/CD_charging-history-gdpr-proxy-service/conditional-naming-service/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "type": "SERVICE" +} \ 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 index d41c4c77..5f35e5c1 100644 --- 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 @@ -1,30 +1,4 @@ -## 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 configure custom services? -## 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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Custom+Services) page to configure your custom services. \ 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 index 92e734fa..1695924c 100644 --- 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 @@ -1,37 +1,4 @@ -# Synthetic Configuration -To calculate the Availability KPI, a synthetic must be configured. +### How to configure synthetics? -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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Synthetic+Monitors) page to configure your synthetics. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_charging-plan-composite-service/conditional-naming-processgroup/README.md b/BMW-Dynatrace-config/CD_charging-plan-composite-service/conditional-naming-processgroup/README.md new file mode 100644 index 00000000..f94196a5 --- /dev/null +++ b/BMW-Dynatrace-config/CD_charging-plan-composite-service/conditional-naming-processgroup/README.md @@ -0,0 +1,67 @@ +### Process Group Detection Rules and Naming + +#### Detection Rule or Naming? + +For the explanation, we're using a real example of the Infotainment application: + +!(PGNaming1)[../../../../img/PGNaming1.PNG] + +Before working with your dashboards and alerting profiles, an important task to do when working with Dynatrace is checking +the structure of your applications (process groups). You can do that clicking under *technologies* and filter using your +application Management Zone. + +In the picture above, there are two Process Groups called bon-information-prod. **If you see duplicated process groups like in** +**this case, you MUST follow this guideline** + +Next step would be to open both process groups and compare the metadata. In that way, you can identify if all process instances are +part of the same application or not. An easy way to do that is asking yourself: how many instances of my application do i have? + +If you have 4 instances in total and you're able to see 2 in one PG and other 2 in other PG it means that **they are part of the ** +**same application** + +Another situation could be that checking on the metadata, then you see that are **two different application** and Dynatrace is just naming +the process group in the same way + +*Same application* +- Problem: Dynatrace is creating two different process groups, what transalates in two separated services for the same application. Instead of +seeing all the traffic in one service, you will have it splitted and it will complicate your monitoring +- Solution: create a process group detection rule. Contact Dynatrace Expert + +*Different application* +- Problem: Dynatrace is just naming in the same way applications that are different. +- Solution: This case is less severe, since it can be fixed with a process group naming rule. + + +What about our example? +!(PGNaming2)[../../../../img/PGNaming2.PNG] +!(PGNaming3)[../../../../img/PGNaming3.PNG] + +Based on the feedback of the infotaiment team, each process group is a different application (microservice) and it's visible in the kubernetes container/workload +within the metadata of each Process Group. + +#### How to create a Process Group Detection Rule +1. Open the *conditional-naming-processgroup.yaml* file and create a rule that looks like this: +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName} +- tag: Infotainment +- skipDeployment: false +``` +The result of the rule will be renaming the PG to this: +``` +bon-information-prod ipa +bon-information-prod rsl +``` + +Other possible placeholders that you can use are for example: +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName/[^\\-]*$} +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesFullPodName/buffet-(.*?)-} +{ProcessGroup:DetectedName} - {HostGroup:Name/[^\\_]*$} +{ProcessGroup:KubernetesNamespace} +{ProcessGroup:CommandLineArgs/.*?\\-f\\s\\/www\\/(.*?)\\/generated\\/httpd\\.conf.*?} + +You can combine different ones. Check the (documentation)[link] for more \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_charging-plan-composite-service/conditional-naming-processgroup/conditional-naming-processgroup.yaml b/BMW-Dynatrace-config/CD_charging-plan-composite-service/conditional-naming-processgroup/conditional-naming-processgroup.yaml new file mode 100644 index 00000000..e14b194e --- /dev/null +++ b/BMW-Dynatrace-config/CD_charging-plan-composite-service/conditional-naming-processgroup/conditional-naming-processgroup.yaml @@ -0,0 +1,8 @@ +config: +- CDcharging-plan-composite-service: template.json + +CDcharging-plan-composite-service: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: charging-plan-composite-service +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_charging-plan-composite-service/conditional-naming-processgroup/template.json b/BMW-Dynatrace-config/CD_charging-plan-composite-service/conditional-naming-processgroup/template.json new file mode 100644 index 00000000..7c039808 --- /dev/null +++ b/BMW-Dynatrace-config/CD_charging-plan-composite-service/conditional-naming-processgroup/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "type": "PROCESS_GROUP" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_charging-plan-composite-service/conditional-naming-service/README.md b/BMW-Dynatrace-config/CD_charging-plan-composite-service/conditional-naming-service/README.md new file mode 100644 index 00000000..c34ef308 --- /dev/null +++ b/BMW-Dynatrace-config/CD_charging-plan-composite-service/conditional-naming-service/README.md @@ -0,0 +1,35 @@ +### Service Naming Rules + +A typical case could be that you access to *Transaction & Services* and you find two services that are exactly the same: +*DataDownloadV1* +*DataDownloadV1* + +If you drilldown into the service and you check in the process group, you may have a PROD and a E2E for each service. + +*Note: if you see that both process group are exactly the same, please contact a Dynatrace expert to create a Process* +*Group detection rule* + +In the case the PG are PROD and E2E, then we need to create a rule that looks like this: + +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {Service:DetectedName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +- tag: Infotainment +- skipDeployment: false +``` + +The rule will get the Service Detected Name (current name) and it will extract (with a regex) the part of the kubernetes namespace after the "-", so -prod or -e2e, resulting in: +*DataDownloadV1 - prod* +*DataDownloadV1 - e2e* + +Now, services will be easy to identify. + +You can create rules based on any property/metadata. Some other placeholder's eamples: +{Service:DatabaseName} - E2E +{Service:WebServiceName} - {ProcessGroup:Kubernetes:microservice} - {ProcessGroup:Kubernetes:environment} +{Service:DetectedName} - {ProcessGroup:KubernetesContainerName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +{Service:DetectedName} - {ProcessGroup:SpringBootProfileName/[^\\-]*$} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_charging-plan-composite-service/conditional-naming-service/conditional-naming-service.yaml b/BMW-Dynatrace-config/CD_charging-plan-composite-service/conditional-naming-service/conditional-naming-service.yaml new file mode 100644 index 00000000..e14b194e --- /dev/null +++ b/BMW-Dynatrace-config/CD_charging-plan-composite-service/conditional-naming-service/conditional-naming-service.yaml @@ -0,0 +1,8 @@ +config: +- CDcharging-plan-composite-service: template.json + +CDcharging-plan-composite-service: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: charging-plan-composite-service +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_charging-plan-composite-service/conditional-naming-service/template.json b/BMW-Dynatrace-config/CD_charging-plan-composite-service/conditional-naming-service/template.json new file mode 100644 index 00000000..5d4fac56 --- /dev/null +++ b/BMW-Dynatrace-config/CD_charging-plan-composite-service/conditional-naming-service/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "type": "SERVICE" +} \ 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 index d41c4c77..5f35e5c1 100644 --- 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 @@ -1,30 +1,4 @@ -## 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 configure custom services? -## 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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Custom+Services) page to configure your custom services. \ 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 index 92e734fa..1695924c 100644 --- 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 @@ -1,37 +1,4 @@ -# Synthetic Configuration -To calculate the Availability KPI, a synthetic must be configured. +### How to configure synthetics? -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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Synthetic+Monitors) page to configure your synthetics. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_charging-push-notifications-service/conditional-naming-processgroup/README.md b/BMW-Dynatrace-config/CD_charging-push-notifications-service/conditional-naming-processgroup/README.md new file mode 100644 index 00000000..f94196a5 --- /dev/null +++ b/BMW-Dynatrace-config/CD_charging-push-notifications-service/conditional-naming-processgroup/README.md @@ -0,0 +1,67 @@ +### Process Group Detection Rules and Naming + +#### Detection Rule or Naming? + +For the explanation, we're using a real example of the Infotainment application: + +!(PGNaming1)[../../../../img/PGNaming1.PNG] + +Before working with your dashboards and alerting profiles, an important task to do when working with Dynatrace is checking +the structure of your applications (process groups). You can do that clicking under *technologies* and filter using your +application Management Zone. + +In the picture above, there are two Process Groups called bon-information-prod. **If you see duplicated process groups like in** +**this case, you MUST follow this guideline** + +Next step would be to open both process groups and compare the metadata. In that way, you can identify if all process instances are +part of the same application or not. An easy way to do that is asking yourself: how many instances of my application do i have? + +If you have 4 instances in total and you're able to see 2 in one PG and other 2 in other PG it means that **they are part of the ** +**same application** + +Another situation could be that checking on the metadata, then you see that are **two different application** and Dynatrace is just naming +the process group in the same way + +*Same application* +- Problem: Dynatrace is creating two different process groups, what transalates in two separated services for the same application. Instead of +seeing all the traffic in one service, you will have it splitted and it will complicate your monitoring +- Solution: create a process group detection rule. Contact Dynatrace Expert + +*Different application* +- Problem: Dynatrace is just naming in the same way applications that are different. +- Solution: This case is less severe, since it can be fixed with a process group naming rule. + + +What about our example? +!(PGNaming2)[../../../../img/PGNaming2.PNG] +!(PGNaming3)[../../../../img/PGNaming3.PNG] + +Based on the feedback of the infotaiment team, each process group is a different application (microservice) and it's visible in the kubernetes container/workload +within the metadata of each Process Group. + +#### How to create a Process Group Detection Rule +1. Open the *conditional-naming-processgroup.yaml* file and create a rule that looks like this: +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName} +- tag: Infotainment +- skipDeployment: false +``` +The result of the rule will be renaming the PG to this: +``` +bon-information-prod ipa +bon-information-prod rsl +``` + +Other possible placeholders that you can use are for example: +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName/[^\\-]*$} +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesFullPodName/buffet-(.*?)-} +{ProcessGroup:DetectedName} - {HostGroup:Name/[^\\_]*$} +{ProcessGroup:KubernetesNamespace} +{ProcessGroup:CommandLineArgs/.*?\\-f\\s\\/www\\/(.*?)\\/generated\\/httpd\\.conf.*?} + +You can combine different ones. Check the (documentation)[link] for more \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_charging-push-notifications-service/conditional-naming-processgroup/conditional-naming-processgroup.yaml b/BMW-Dynatrace-config/CD_charging-push-notifications-service/conditional-naming-processgroup/conditional-naming-processgroup.yaml new file mode 100644 index 00000000..31f899df --- /dev/null +++ b/BMW-Dynatrace-config/CD_charging-push-notifications-service/conditional-naming-processgroup/conditional-naming-processgroup.yaml @@ -0,0 +1,8 @@ +config: +- CDcharging-push-notifications-service: template.json + +CDcharging-push-notifications-service: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: charging-push-notifications-service +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_charging-push-notifications-service/conditional-naming-processgroup/template.json b/BMW-Dynatrace-config/CD_charging-push-notifications-service/conditional-naming-processgroup/template.json new file mode 100644 index 00000000..7c039808 --- /dev/null +++ b/BMW-Dynatrace-config/CD_charging-push-notifications-service/conditional-naming-processgroup/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "type": "PROCESS_GROUP" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_charging-push-notifications-service/conditional-naming-service/README.md b/BMW-Dynatrace-config/CD_charging-push-notifications-service/conditional-naming-service/README.md new file mode 100644 index 00000000..c34ef308 --- /dev/null +++ b/BMW-Dynatrace-config/CD_charging-push-notifications-service/conditional-naming-service/README.md @@ -0,0 +1,35 @@ +### Service Naming Rules + +A typical case could be that you access to *Transaction & Services* and you find two services that are exactly the same: +*DataDownloadV1* +*DataDownloadV1* + +If you drilldown into the service and you check in the process group, you may have a PROD and a E2E for each service. + +*Note: if you see that both process group are exactly the same, please contact a Dynatrace expert to create a Process* +*Group detection rule* + +In the case the PG are PROD and E2E, then we need to create a rule that looks like this: + +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {Service:DetectedName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +- tag: Infotainment +- skipDeployment: false +``` + +The rule will get the Service Detected Name (current name) and it will extract (with a regex) the part of the kubernetes namespace after the "-", so -prod or -e2e, resulting in: +*DataDownloadV1 - prod* +*DataDownloadV1 - e2e* + +Now, services will be easy to identify. + +You can create rules based on any property/metadata. Some other placeholder's eamples: +{Service:DatabaseName} - E2E +{Service:WebServiceName} - {ProcessGroup:Kubernetes:microservice} - {ProcessGroup:Kubernetes:environment} +{Service:DetectedName} - {ProcessGroup:KubernetesContainerName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +{Service:DetectedName} - {ProcessGroup:SpringBootProfileName/[^\\-]*$} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_charging-push-notifications-service/conditional-naming-service/conditional-naming-service.yaml b/BMW-Dynatrace-config/CD_charging-push-notifications-service/conditional-naming-service/conditional-naming-service.yaml new file mode 100644 index 00000000..31f899df --- /dev/null +++ b/BMW-Dynatrace-config/CD_charging-push-notifications-service/conditional-naming-service/conditional-naming-service.yaml @@ -0,0 +1,8 @@ +config: +- CDcharging-push-notifications-service: template.json + +CDcharging-push-notifications-service: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: charging-push-notifications-service +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_charging-push-notifications-service/conditional-naming-service/template.json b/BMW-Dynatrace-config/CD_charging-push-notifications-service/conditional-naming-service/template.json new file mode 100644 index 00000000..5d4fac56 --- /dev/null +++ b/BMW-Dynatrace-config/CD_charging-push-notifications-service/conditional-naming-service/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "type": "SERVICE" +} \ 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 index d41c4c77..5f35e5c1 100644 --- 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 @@ -1,30 +1,4 @@ -## 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 configure custom services? -## 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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Custom+Services) page to configure your custom services. \ 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 index 92e734fa..1695924c 100644 --- 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 @@ -1,37 +1,4 @@ -# Synthetic Configuration -To calculate the Availability KPI, a synthetic must be configured. +### How to configure synthetics? -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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Synthetic+Monitors) page to configure your synthetics. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_charging-remote-commands-composite-service/conditional-naming-processgroup/README.md b/BMW-Dynatrace-config/CD_charging-remote-commands-composite-service/conditional-naming-processgroup/README.md new file mode 100644 index 00000000..f94196a5 --- /dev/null +++ b/BMW-Dynatrace-config/CD_charging-remote-commands-composite-service/conditional-naming-processgroup/README.md @@ -0,0 +1,67 @@ +### Process Group Detection Rules and Naming + +#### Detection Rule or Naming? + +For the explanation, we're using a real example of the Infotainment application: + +!(PGNaming1)[../../../../img/PGNaming1.PNG] + +Before working with your dashboards and alerting profiles, an important task to do when working with Dynatrace is checking +the structure of your applications (process groups). You can do that clicking under *technologies* and filter using your +application Management Zone. + +In the picture above, there are two Process Groups called bon-information-prod. **If you see duplicated process groups like in** +**this case, you MUST follow this guideline** + +Next step would be to open both process groups and compare the metadata. In that way, you can identify if all process instances are +part of the same application or not. An easy way to do that is asking yourself: how many instances of my application do i have? + +If you have 4 instances in total and you're able to see 2 in one PG and other 2 in other PG it means that **they are part of the ** +**same application** + +Another situation could be that checking on the metadata, then you see that are **two different application** and Dynatrace is just naming +the process group in the same way + +*Same application* +- Problem: Dynatrace is creating two different process groups, what transalates in two separated services for the same application. Instead of +seeing all the traffic in one service, you will have it splitted and it will complicate your monitoring +- Solution: create a process group detection rule. Contact Dynatrace Expert + +*Different application* +- Problem: Dynatrace is just naming in the same way applications that are different. +- Solution: This case is less severe, since it can be fixed with a process group naming rule. + + +What about our example? +!(PGNaming2)[../../../../img/PGNaming2.PNG] +!(PGNaming3)[../../../../img/PGNaming3.PNG] + +Based on the feedback of the infotaiment team, each process group is a different application (microservice) and it's visible in the kubernetes container/workload +within the metadata of each Process Group. + +#### How to create a Process Group Detection Rule +1. Open the *conditional-naming-processgroup.yaml* file and create a rule that looks like this: +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName} +- tag: Infotainment +- skipDeployment: false +``` +The result of the rule will be renaming the PG to this: +``` +bon-information-prod ipa +bon-information-prod rsl +``` + +Other possible placeholders that you can use are for example: +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName/[^\\-]*$} +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesFullPodName/buffet-(.*?)-} +{ProcessGroup:DetectedName} - {HostGroup:Name/[^\\_]*$} +{ProcessGroup:KubernetesNamespace} +{ProcessGroup:CommandLineArgs/.*?\\-f\\s\\/www\\/(.*?)\\/generated\\/httpd\\.conf.*?} + +You can combine different ones. Check the (documentation)[link] for more \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_charging-remote-commands-composite-service/conditional-naming-processgroup/conditional-naming-processgroup.yaml b/BMW-Dynatrace-config/CD_charging-remote-commands-composite-service/conditional-naming-processgroup/conditional-naming-processgroup.yaml new file mode 100644 index 00000000..21490dd3 --- /dev/null +++ b/BMW-Dynatrace-config/CD_charging-remote-commands-composite-service/conditional-naming-processgroup/conditional-naming-processgroup.yaml @@ -0,0 +1,8 @@ +config: +- CDcharging-remote-commands-composite-service: template.json + +CDcharging-remote-commands-composite-service: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: charging-remote-commands-composite-service +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_charging-remote-commands-composite-service/conditional-naming-processgroup/template.json b/BMW-Dynatrace-config/CD_charging-remote-commands-composite-service/conditional-naming-processgroup/template.json new file mode 100644 index 00000000..7c039808 --- /dev/null +++ b/BMW-Dynatrace-config/CD_charging-remote-commands-composite-service/conditional-naming-processgroup/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "type": "PROCESS_GROUP" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_charging-remote-commands-composite-service/conditional-naming-service/README.md b/BMW-Dynatrace-config/CD_charging-remote-commands-composite-service/conditional-naming-service/README.md new file mode 100644 index 00000000..c34ef308 --- /dev/null +++ b/BMW-Dynatrace-config/CD_charging-remote-commands-composite-service/conditional-naming-service/README.md @@ -0,0 +1,35 @@ +### Service Naming Rules + +A typical case could be that you access to *Transaction & Services* and you find two services that are exactly the same: +*DataDownloadV1* +*DataDownloadV1* + +If you drilldown into the service and you check in the process group, you may have a PROD and a E2E for each service. + +*Note: if you see that both process group are exactly the same, please contact a Dynatrace expert to create a Process* +*Group detection rule* + +In the case the PG are PROD and E2E, then we need to create a rule that looks like this: + +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {Service:DetectedName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +- tag: Infotainment +- skipDeployment: false +``` + +The rule will get the Service Detected Name (current name) and it will extract (with a regex) the part of the kubernetes namespace after the "-", so -prod or -e2e, resulting in: +*DataDownloadV1 - prod* +*DataDownloadV1 - e2e* + +Now, services will be easy to identify. + +You can create rules based on any property/metadata. Some other placeholder's eamples: +{Service:DatabaseName} - E2E +{Service:WebServiceName} - {ProcessGroup:Kubernetes:microservice} - {ProcessGroup:Kubernetes:environment} +{Service:DetectedName} - {ProcessGroup:KubernetesContainerName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +{Service:DetectedName} - {ProcessGroup:SpringBootProfileName/[^\\-]*$} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_charging-remote-commands-composite-service/conditional-naming-service/conditional-naming-service.yaml b/BMW-Dynatrace-config/CD_charging-remote-commands-composite-service/conditional-naming-service/conditional-naming-service.yaml new file mode 100644 index 00000000..21490dd3 --- /dev/null +++ b/BMW-Dynatrace-config/CD_charging-remote-commands-composite-service/conditional-naming-service/conditional-naming-service.yaml @@ -0,0 +1,8 @@ +config: +- CDcharging-remote-commands-composite-service: template.json + +CDcharging-remote-commands-composite-service: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: charging-remote-commands-composite-service +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_charging-remote-commands-composite-service/conditional-naming-service/template.json b/BMW-Dynatrace-config/CD_charging-remote-commands-composite-service/conditional-naming-service/template.json new file mode 100644 index 00000000..5d4fac56 --- /dev/null +++ b/BMW-Dynatrace-config/CD_charging-remote-commands-composite-service/conditional-naming-service/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "type": "SERVICE" +} \ 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 index d41c4c77..5f35e5c1 100644 --- 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 @@ -1,30 +1,4 @@ -## 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 configure custom services? -## 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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Custom+Services) page to configure your custom services. \ 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 index 92e734fa..1695924c 100644 --- 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 @@ -1,37 +1,4 @@ -# Synthetic Configuration -To calculate the Availability KPI, a synthetic must be configured. +### How to configure synthetics? -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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Synthetic+Monitors) page to configure your synthetics. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_charging-sessions-service/conditional-naming-processgroup/README.md b/BMW-Dynatrace-config/CD_charging-sessions-service/conditional-naming-processgroup/README.md new file mode 100644 index 00000000..f94196a5 --- /dev/null +++ b/BMW-Dynatrace-config/CD_charging-sessions-service/conditional-naming-processgroup/README.md @@ -0,0 +1,67 @@ +### Process Group Detection Rules and Naming + +#### Detection Rule or Naming? + +For the explanation, we're using a real example of the Infotainment application: + +!(PGNaming1)[../../../../img/PGNaming1.PNG] + +Before working with your dashboards and alerting profiles, an important task to do when working with Dynatrace is checking +the structure of your applications (process groups). You can do that clicking under *technologies* and filter using your +application Management Zone. + +In the picture above, there are two Process Groups called bon-information-prod. **If you see duplicated process groups like in** +**this case, you MUST follow this guideline** + +Next step would be to open both process groups and compare the metadata. In that way, you can identify if all process instances are +part of the same application or not. An easy way to do that is asking yourself: how many instances of my application do i have? + +If you have 4 instances in total and you're able to see 2 in one PG and other 2 in other PG it means that **they are part of the ** +**same application** + +Another situation could be that checking on the metadata, then you see that are **two different application** and Dynatrace is just naming +the process group in the same way + +*Same application* +- Problem: Dynatrace is creating two different process groups, what transalates in two separated services for the same application. Instead of +seeing all the traffic in one service, you will have it splitted and it will complicate your monitoring +- Solution: create a process group detection rule. Contact Dynatrace Expert + +*Different application* +- Problem: Dynatrace is just naming in the same way applications that are different. +- Solution: This case is less severe, since it can be fixed with a process group naming rule. + + +What about our example? +!(PGNaming2)[../../../../img/PGNaming2.PNG] +!(PGNaming3)[../../../../img/PGNaming3.PNG] + +Based on the feedback of the infotaiment team, each process group is a different application (microservice) and it's visible in the kubernetes container/workload +within the metadata of each Process Group. + +#### How to create a Process Group Detection Rule +1. Open the *conditional-naming-processgroup.yaml* file and create a rule that looks like this: +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName} +- tag: Infotainment +- skipDeployment: false +``` +The result of the rule will be renaming the PG to this: +``` +bon-information-prod ipa +bon-information-prod rsl +``` + +Other possible placeholders that you can use are for example: +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName/[^\\-]*$} +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesFullPodName/buffet-(.*?)-} +{ProcessGroup:DetectedName} - {HostGroup:Name/[^\\_]*$} +{ProcessGroup:KubernetesNamespace} +{ProcessGroup:CommandLineArgs/.*?\\-f\\s\\/www\\/(.*?)\\/generated\\/httpd\\.conf.*?} + +You can combine different ones. Check the (documentation)[link] for more \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_charging-sessions-service/conditional-naming-processgroup/conditional-naming-processgroup.yaml b/BMW-Dynatrace-config/CD_charging-sessions-service/conditional-naming-processgroup/conditional-naming-processgroup.yaml new file mode 100644 index 00000000..56909d0a --- /dev/null +++ b/BMW-Dynatrace-config/CD_charging-sessions-service/conditional-naming-processgroup/conditional-naming-processgroup.yaml @@ -0,0 +1,8 @@ +config: +- CDcharging-sessions-service: template.json + +CDcharging-sessions-service: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: charging-sessions-service +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_charging-sessions-service/conditional-naming-processgroup/template.json b/BMW-Dynatrace-config/CD_charging-sessions-service/conditional-naming-processgroup/template.json new file mode 100644 index 00000000..7c039808 --- /dev/null +++ b/BMW-Dynatrace-config/CD_charging-sessions-service/conditional-naming-processgroup/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "type": "PROCESS_GROUP" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_charging-sessions-service/conditional-naming-service/README.md b/BMW-Dynatrace-config/CD_charging-sessions-service/conditional-naming-service/README.md new file mode 100644 index 00000000..c34ef308 --- /dev/null +++ b/BMW-Dynatrace-config/CD_charging-sessions-service/conditional-naming-service/README.md @@ -0,0 +1,35 @@ +### Service Naming Rules + +A typical case could be that you access to *Transaction & Services* and you find two services that are exactly the same: +*DataDownloadV1* +*DataDownloadV1* + +If you drilldown into the service and you check in the process group, you may have a PROD and a E2E for each service. + +*Note: if you see that both process group are exactly the same, please contact a Dynatrace expert to create a Process* +*Group detection rule* + +In the case the PG are PROD and E2E, then we need to create a rule that looks like this: + +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {Service:DetectedName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +- tag: Infotainment +- skipDeployment: false +``` + +The rule will get the Service Detected Name (current name) and it will extract (with a regex) the part of the kubernetes namespace after the "-", so -prod or -e2e, resulting in: +*DataDownloadV1 - prod* +*DataDownloadV1 - e2e* + +Now, services will be easy to identify. + +You can create rules based on any property/metadata. Some other placeholder's eamples: +{Service:DatabaseName} - E2E +{Service:WebServiceName} - {ProcessGroup:Kubernetes:microservice} - {ProcessGroup:Kubernetes:environment} +{Service:DetectedName} - {ProcessGroup:KubernetesContainerName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +{Service:DetectedName} - {ProcessGroup:SpringBootProfileName/[^\\-]*$} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_charging-sessions-service/conditional-naming-service/conditional-naming-service.yaml b/BMW-Dynatrace-config/CD_charging-sessions-service/conditional-naming-service/conditional-naming-service.yaml new file mode 100644 index 00000000..56909d0a --- /dev/null +++ b/BMW-Dynatrace-config/CD_charging-sessions-service/conditional-naming-service/conditional-naming-service.yaml @@ -0,0 +1,8 @@ +config: +- CDcharging-sessions-service: template.json + +CDcharging-sessions-service: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: charging-sessions-service +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_charging-sessions-service/conditional-naming-service/template.json b/BMW-Dynatrace-config/CD_charging-sessions-service/conditional-naming-service/template.json new file mode 100644 index 00000000..5d4fac56 --- /dev/null +++ b/BMW-Dynatrace-config/CD_charging-sessions-service/conditional-naming-service/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "type": "SERVICE" +} \ 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 index d41c4c77..5f35e5c1 100644 --- 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 @@ -1,30 +1,4 @@ -## 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 configure custom services? -## 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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Custom+Services) page to configure your custom services. \ 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 index 92e734fa..1695924c 100644 --- a/BMW-Dynatrace-config/CD_charging-sessions-service/synthetic-monitor/README.md +++ b/BMW-Dynatrace-config/CD_charging-sessions-service/synthetic-monitor/README.md @@ -1,37 +1,4 @@ -# Synthetic Configuration -To calculate the Availability KPI, a synthetic must be configured. +### How to configure synthetics? -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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Synthetic+Monitors) page to configure your synthetics. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_charging-stations-service/conditional-naming-processgroup/README.md b/BMW-Dynatrace-config/CD_charging-stations-service/conditional-naming-processgroup/README.md new file mode 100644 index 00000000..f94196a5 --- /dev/null +++ b/BMW-Dynatrace-config/CD_charging-stations-service/conditional-naming-processgroup/README.md @@ -0,0 +1,67 @@ +### Process Group Detection Rules and Naming + +#### Detection Rule or Naming? + +For the explanation, we're using a real example of the Infotainment application: + +!(PGNaming1)[../../../../img/PGNaming1.PNG] + +Before working with your dashboards and alerting profiles, an important task to do when working with Dynatrace is checking +the structure of your applications (process groups). You can do that clicking under *technologies* and filter using your +application Management Zone. + +In the picture above, there are two Process Groups called bon-information-prod. **If you see duplicated process groups like in** +**this case, you MUST follow this guideline** + +Next step would be to open both process groups and compare the metadata. In that way, you can identify if all process instances are +part of the same application or not. An easy way to do that is asking yourself: how many instances of my application do i have? + +If you have 4 instances in total and you're able to see 2 in one PG and other 2 in other PG it means that **they are part of the ** +**same application** + +Another situation could be that checking on the metadata, then you see that are **two different application** and Dynatrace is just naming +the process group in the same way + +*Same application* +- Problem: Dynatrace is creating two different process groups, what transalates in two separated services for the same application. Instead of +seeing all the traffic in one service, you will have it splitted and it will complicate your monitoring +- Solution: create a process group detection rule. Contact Dynatrace Expert + +*Different application* +- Problem: Dynatrace is just naming in the same way applications that are different. +- Solution: This case is less severe, since it can be fixed with a process group naming rule. + + +What about our example? +!(PGNaming2)[../../../../img/PGNaming2.PNG] +!(PGNaming3)[../../../../img/PGNaming3.PNG] + +Based on the feedback of the infotaiment team, each process group is a different application (microservice) and it's visible in the kubernetes container/workload +within the metadata of each Process Group. + +#### How to create a Process Group Detection Rule +1. Open the *conditional-naming-processgroup.yaml* file and create a rule that looks like this: +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName} +- tag: Infotainment +- skipDeployment: false +``` +The result of the rule will be renaming the PG to this: +``` +bon-information-prod ipa +bon-information-prod rsl +``` + +Other possible placeholders that you can use are for example: +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName/[^\\-]*$} +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesFullPodName/buffet-(.*?)-} +{ProcessGroup:DetectedName} - {HostGroup:Name/[^\\_]*$} +{ProcessGroup:KubernetesNamespace} +{ProcessGroup:CommandLineArgs/.*?\\-f\\s\\/www\\/(.*?)\\/generated\\/httpd\\.conf.*?} + +You can combine different ones. Check the (documentation)[link] for more \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_charging-stations-service/conditional-naming-processgroup/conditional-naming-processgroup.yaml b/BMW-Dynatrace-config/CD_charging-stations-service/conditional-naming-processgroup/conditional-naming-processgroup.yaml new file mode 100644 index 00000000..9231ded2 --- /dev/null +++ b/BMW-Dynatrace-config/CD_charging-stations-service/conditional-naming-processgroup/conditional-naming-processgroup.yaml @@ -0,0 +1,8 @@ +config: +- CDcharging-stations-service: template.json + +CDcharging-stations-service: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: charging-stations-service +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_charging-stations-service/conditional-naming-processgroup/template.json b/BMW-Dynatrace-config/CD_charging-stations-service/conditional-naming-processgroup/template.json new file mode 100644 index 00000000..7c039808 --- /dev/null +++ b/BMW-Dynatrace-config/CD_charging-stations-service/conditional-naming-processgroup/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "type": "PROCESS_GROUP" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_charging-stations-service/conditional-naming-service/README.md b/BMW-Dynatrace-config/CD_charging-stations-service/conditional-naming-service/README.md new file mode 100644 index 00000000..c34ef308 --- /dev/null +++ b/BMW-Dynatrace-config/CD_charging-stations-service/conditional-naming-service/README.md @@ -0,0 +1,35 @@ +### Service Naming Rules + +A typical case could be that you access to *Transaction & Services* and you find two services that are exactly the same: +*DataDownloadV1* +*DataDownloadV1* + +If you drilldown into the service and you check in the process group, you may have a PROD and a E2E for each service. + +*Note: if you see that both process group are exactly the same, please contact a Dynatrace expert to create a Process* +*Group detection rule* + +In the case the PG are PROD and E2E, then we need to create a rule that looks like this: + +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {Service:DetectedName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +- tag: Infotainment +- skipDeployment: false +``` + +The rule will get the Service Detected Name (current name) and it will extract (with a regex) the part of the kubernetes namespace after the "-", so -prod or -e2e, resulting in: +*DataDownloadV1 - prod* +*DataDownloadV1 - e2e* + +Now, services will be easy to identify. + +You can create rules based on any property/metadata. Some other placeholder's eamples: +{Service:DatabaseName} - E2E +{Service:WebServiceName} - {ProcessGroup:Kubernetes:microservice} - {ProcessGroup:Kubernetes:environment} +{Service:DetectedName} - {ProcessGroup:KubernetesContainerName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +{Service:DetectedName} - {ProcessGroup:SpringBootProfileName/[^\\-]*$} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_charging-stations-service/conditional-naming-service/conditional-naming-service.yaml b/BMW-Dynatrace-config/CD_charging-stations-service/conditional-naming-service/conditional-naming-service.yaml new file mode 100644 index 00000000..9231ded2 --- /dev/null +++ b/BMW-Dynatrace-config/CD_charging-stations-service/conditional-naming-service/conditional-naming-service.yaml @@ -0,0 +1,8 @@ +config: +- CDcharging-stations-service: template.json + +CDcharging-stations-service: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: charging-stations-service +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_charging-stations-service/conditional-naming-service/template.json b/BMW-Dynatrace-config/CD_charging-stations-service/conditional-naming-service/template.json new file mode 100644 index 00000000..5d4fac56 --- /dev/null +++ b/BMW-Dynatrace-config/CD_charging-stations-service/conditional-naming-service/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "type": "SERVICE" +} \ 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 index d41c4c77..5f35e5c1 100644 --- 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 @@ -1,30 +1,4 @@ -## 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 configure custom services? -## 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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Custom+Services) page to configure your custom services. \ 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 index 92e734fa..1695924c 100644 --- a/BMW-Dynatrace-config/CD_charging-stations-service/synthetic-monitor/README.md +++ b/BMW-Dynatrace-config/CD_charging-stations-service/synthetic-monitor/README.md @@ -1,37 +1,4 @@ -# Synthetic Configuration -To calculate the Availability KPI, a synthetic must be configured. +### How to configure synthetics? -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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Synthetic+Monitors) page to configure your synthetics. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_client-agent-telemetry-processor/conditional-naming-processgroup/README.md b/BMW-Dynatrace-config/CD_client-agent-telemetry-processor/conditional-naming-processgroup/README.md new file mode 100644 index 00000000..f94196a5 --- /dev/null +++ b/BMW-Dynatrace-config/CD_client-agent-telemetry-processor/conditional-naming-processgroup/README.md @@ -0,0 +1,67 @@ +### Process Group Detection Rules and Naming + +#### Detection Rule or Naming? + +For the explanation, we're using a real example of the Infotainment application: + +!(PGNaming1)[../../../../img/PGNaming1.PNG] + +Before working with your dashboards and alerting profiles, an important task to do when working with Dynatrace is checking +the structure of your applications (process groups). You can do that clicking under *technologies* and filter using your +application Management Zone. + +In the picture above, there are two Process Groups called bon-information-prod. **If you see duplicated process groups like in** +**this case, you MUST follow this guideline** + +Next step would be to open both process groups and compare the metadata. In that way, you can identify if all process instances are +part of the same application or not. An easy way to do that is asking yourself: how many instances of my application do i have? + +If you have 4 instances in total and you're able to see 2 in one PG and other 2 in other PG it means that **they are part of the ** +**same application** + +Another situation could be that checking on the metadata, then you see that are **two different application** and Dynatrace is just naming +the process group in the same way + +*Same application* +- Problem: Dynatrace is creating two different process groups, what transalates in two separated services for the same application. Instead of +seeing all the traffic in one service, you will have it splitted and it will complicate your monitoring +- Solution: create a process group detection rule. Contact Dynatrace Expert + +*Different application* +- Problem: Dynatrace is just naming in the same way applications that are different. +- Solution: This case is less severe, since it can be fixed with a process group naming rule. + + +What about our example? +!(PGNaming2)[../../../../img/PGNaming2.PNG] +!(PGNaming3)[../../../../img/PGNaming3.PNG] + +Based on the feedback of the infotaiment team, each process group is a different application (microservice) and it's visible in the kubernetes container/workload +within the metadata of each Process Group. + +#### How to create a Process Group Detection Rule +1. Open the *conditional-naming-processgroup.yaml* file and create a rule that looks like this: +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName} +- tag: Infotainment +- skipDeployment: false +``` +The result of the rule will be renaming the PG to this: +``` +bon-information-prod ipa +bon-information-prod rsl +``` + +Other possible placeholders that you can use are for example: +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName/[^\\-]*$} +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesFullPodName/buffet-(.*?)-} +{ProcessGroup:DetectedName} - {HostGroup:Name/[^\\_]*$} +{ProcessGroup:KubernetesNamespace} +{ProcessGroup:CommandLineArgs/.*?\\-f\\s\\/www\\/(.*?)\\/generated\\/httpd\\.conf.*?} + +You can combine different ones. Check the (documentation)[link] for more \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_client-agent-telemetry-processor/conditional-naming-processgroup/conditional-naming-processgroup.yaml b/BMW-Dynatrace-config/CD_client-agent-telemetry-processor/conditional-naming-processgroup/conditional-naming-processgroup.yaml new file mode 100644 index 00000000..46660ea9 --- /dev/null +++ b/BMW-Dynatrace-config/CD_client-agent-telemetry-processor/conditional-naming-processgroup/conditional-naming-processgroup.yaml @@ -0,0 +1,8 @@ +config: +- CDclient-agent-telemetry-processor: template.json + +CDclient-agent-telemetry-processor: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: client-agent-telemetry-processor +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_client-agent-telemetry-processor/conditional-naming-processgroup/template.json b/BMW-Dynatrace-config/CD_client-agent-telemetry-processor/conditional-naming-processgroup/template.json new file mode 100644 index 00000000..7c039808 --- /dev/null +++ b/BMW-Dynatrace-config/CD_client-agent-telemetry-processor/conditional-naming-processgroup/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "type": "PROCESS_GROUP" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_client-agent-telemetry-processor/conditional-naming-service/README.md b/BMW-Dynatrace-config/CD_client-agent-telemetry-processor/conditional-naming-service/README.md new file mode 100644 index 00000000..c34ef308 --- /dev/null +++ b/BMW-Dynatrace-config/CD_client-agent-telemetry-processor/conditional-naming-service/README.md @@ -0,0 +1,35 @@ +### Service Naming Rules + +A typical case could be that you access to *Transaction & Services* and you find two services that are exactly the same: +*DataDownloadV1* +*DataDownloadV1* + +If you drilldown into the service and you check in the process group, you may have a PROD and a E2E for each service. + +*Note: if you see that both process group are exactly the same, please contact a Dynatrace expert to create a Process* +*Group detection rule* + +In the case the PG are PROD and E2E, then we need to create a rule that looks like this: + +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {Service:DetectedName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +- tag: Infotainment +- skipDeployment: false +``` + +The rule will get the Service Detected Name (current name) and it will extract (with a regex) the part of the kubernetes namespace after the "-", so -prod or -e2e, resulting in: +*DataDownloadV1 - prod* +*DataDownloadV1 - e2e* + +Now, services will be easy to identify. + +You can create rules based on any property/metadata. Some other placeholder's eamples: +{Service:DatabaseName} - E2E +{Service:WebServiceName} - {ProcessGroup:Kubernetes:microservice} - {ProcessGroup:Kubernetes:environment} +{Service:DetectedName} - {ProcessGroup:KubernetesContainerName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +{Service:DetectedName} - {ProcessGroup:SpringBootProfileName/[^\\-]*$} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_client-agent-telemetry-processor/conditional-naming-service/conditional-naming-service.yaml b/BMW-Dynatrace-config/CD_client-agent-telemetry-processor/conditional-naming-service/conditional-naming-service.yaml new file mode 100644 index 00000000..46660ea9 --- /dev/null +++ b/BMW-Dynatrace-config/CD_client-agent-telemetry-processor/conditional-naming-service/conditional-naming-service.yaml @@ -0,0 +1,8 @@ +config: +- CDclient-agent-telemetry-processor: template.json + +CDclient-agent-telemetry-processor: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: client-agent-telemetry-processor +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_client-agent-telemetry-processor/conditional-naming-service/template.json b/BMW-Dynatrace-config/CD_client-agent-telemetry-processor/conditional-naming-service/template.json new file mode 100644 index 00000000..5d4fac56 --- /dev/null +++ b/BMW-Dynatrace-config/CD_client-agent-telemetry-processor/conditional-naming-service/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "type": "SERVICE" +} \ 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 index d41c4c77..5f35e5c1 100644 --- 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 @@ -1,30 +1,4 @@ -## 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 configure custom services? -## 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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Custom+Services) page to configure your custom services. \ 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 index 92e734fa..1695924c 100644 --- 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 @@ -1,37 +1,4 @@ -# Synthetic Configuration -To calculate the Availability KPI, a synthetic must be configured. +### How to configure synthetics? -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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Synthetic+Monitors) page to configure your synthetics. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_client-vehicle-telemetry-processor/conditional-naming-processgroup/README.md b/BMW-Dynatrace-config/CD_client-vehicle-telemetry-processor/conditional-naming-processgroup/README.md new file mode 100644 index 00000000..f94196a5 --- /dev/null +++ b/BMW-Dynatrace-config/CD_client-vehicle-telemetry-processor/conditional-naming-processgroup/README.md @@ -0,0 +1,67 @@ +### Process Group Detection Rules and Naming + +#### Detection Rule or Naming? + +For the explanation, we're using a real example of the Infotainment application: + +!(PGNaming1)[../../../../img/PGNaming1.PNG] + +Before working with your dashboards and alerting profiles, an important task to do when working with Dynatrace is checking +the structure of your applications (process groups). You can do that clicking under *technologies* and filter using your +application Management Zone. + +In the picture above, there are two Process Groups called bon-information-prod. **If you see duplicated process groups like in** +**this case, you MUST follow this guideline** + +Next step would be to open both process groups and compare the metadata. In that way, you can identify if all process instances are +part of the same application or not. An easy way to do that is asking yourself: how many instances of my application do i have? + +If you have 4 instances in total and you're able to see 2 in one PG and other 2 in other PG it means that **they are part of the ** +**same application** + +Another situation could be that checking on the metadata, then you see that are **two different application** and Dynatrace is just naming +the process group in the same way + +*Same application* +- Problem: Dynatrace is creating two different process groups, what transalates in two separated services for the same application. Instead of +seeing all the traffic in one service, you will have it splitted and it will complicate your monitoring +- Solution: create a process group detection rule. Contact Dynatrace Expert + +*Different application* +- Problem: Dynatrace is just naming in the same way applications that are different. +- Solution: This case is less severe, since it can be fixed with a process group naming rule. + + +What about our example? +!(PGNaming2)[../../../../img/PGNaming2.PNG] +!(PGNaming3)[../../../../img/PGNaming3.PNG] + +Based on the feedback of the infotaiment team, each process group is a different application (microservice) and it's visible in the kubernetes container/workload +within the metadata of each Process Group. + +#### How to create a Process Group Detection Rule +1. Open the *conditional-naming-processgroup.yaml* file and create a rule that looks like this: +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName} +- tag: Infotainment +- skipDeployment: false +``` +The result of the rule will be renaming the PG to this: +``` +bon-information-prod ipa +bon-information-prod rsl +``` + +Other possible placeholders that you can use are for example: +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName/[^\\-]*$} +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesFullPodName/buffet-(.*?)-} +{ProcessGroup:DetectedName} - {HostGroup:Name/[^\\_]*$} +{ProcessGroup:KubernetesNamespace} +{ProcessGroup:CommandLineArgs/.*?\\-f\\s\\/www\\/(.*?)\\/generated\\/httpd\\.conf.*?} + +You can combine different ones. Check the (documentation)[link] for more \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_client-vehicle-telemetry-processor/conditional-naming-processgroup/conditional-naming-processgroup.yaml b/BMW-Dynatrace-config/CD_client-vehicle-telemetry-processor/conditional-naming-processgroup/conditional-naming-processgroup.yaml new file mode 100644 index 00000000..c4c96932 --- /dev/null +++ b/BMW-Dynatrace-config/CD_client-vehicle-telemetry-processor/conditional-naming-processgroup/conditional-naming-processgroup.yaml @@ -0,0 +1,8 @@ +config: +- CDclient-vehicle-telemetry-processor: template.json + +CDclient-vehicle-telemetry-processor: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: client-vehicle-telemetry-processor +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_client-vehicle-telemetry-processor/conditional-naming-processgroup/template.json b/BMW-Dynatrace-config/CD_client-vehicle-telemetry-processor/conditional-naming-processgroup/template.json new file mode 100644 index 00000000..7c039808 --- /dev/null +++ b/BMW-Dynatrace-config/CD_client-vehicle-telemetry-processor/conditional-naming-processgroup/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "type": "PROCESS_GROUP" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_client-vehicle-telemetry-processor/conditional-naming-service/README.md b/BMW-Dynatrace-config/CD_client-vehicle-telemetry-processor/conditional-naming-service/README.md new file mode 100644 index 00000000..c34ef308 --- /dev/null +++ b/BMW-Dynatrace-config/CD_client-vehicle-telemetry-processor/conditional-naming-service/README.md @@ -0,0 +1,35 @@ +### Service Naming Rules + +A typical case could be that you access to *Transaction & Services* and you find two services that are exactly the same: +*DataDownloadV1* +*DataDownloadV1* + +If you drilldown into the service and you check in the process group, you may have a PROD and a E2E for each service. + +*Note: if you see that both process group are exactly the same, please contact a Dynatrace expert to create a Process* +*Group detection rule* + +In the case the PG are PROD and E2E, then we need to create a rule that looks like this: + +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {Service:DetectedName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +- tag: Infotainment +- skipDeployment: false +``` + +The rule will get the Service Detected Name (current name) and it will extract (with a regex) the part of the kubernetes namespace after the "-", so -prod or -e2e, resulting in: +*DataDownloadV1 - prod* +*DataDownloadV1 - e2e* + +Now, services will be easy to identify. + +You can create rules based on any property/metadata. Some other placeholder's eamples: +{Service:DatabaseName} - E2E +{Service:WebServiceName} - {ProcessGroup:Kubernetes:microservice} - {ProcessGroup:Kubernetes:environment} +{Service:DetectedName} - {ProcessGroup:KubernetesContainerName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +{Service:DetectedName} - {ProcessGroup:SpringBootProfileName/[^\\-]*$} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_client-vehicle-telemetry-processor/conditional-naming-service/conditional-naming-service.yaml b/BMW-Dynatrace-config/CD_client-vehicle-telemetry-processor/conditional-naming-service/conditional-naming-service.yaml new file mode 100644 index 00000000..c4c96932 --- /dev/null +++ b/BMW-Dynatrace-config/CD_client-vehicle-telemetry-processor/conditional-naming-service/conditional-naming-service.yaml @@ -0,0 +1,8 @@ +config: +- CDclient-vehicle-telemetry-processor: template.json + +CDclient-vehicle-telemetry-processor: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: client-vehicle-telemetry-processor +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_client-vehicle-telemetry-processor/conditional-naming-service/template.json b/BMW-Dynatrace-config/CD_client-vehicle-telemetry-processor/conditional-naming-service/template.json new file mode 100644 index 00000000..5d4fac56 --- /dev/null +++ b/BMW-Dynatrace-config/CD_client-vehicle-telemetry-processor/conditional-naming-service/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "type": "SERVICE" +} \ 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 index d41c4c77..5f35e5c1 100644 --- 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 @@ -1,30 +1,4 @@ -## 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 configure custom services? -## 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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Custom+Services) page to configure your custom services. \ 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 index 92e734fa..1695924c 100644 --- 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 @@ -1,37 +1,4 @@ -# Synthetic Configuration -To calculate the Availability KPI, a synthetic must be configured. +### How to configure synthetics? -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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Synthetic+Monitors) page to configure your synthetics. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_cm/conditional-naming-processgroup/README.md b/BMW-Dynatrace-config/CD_cm/conditional-naming-processgroup/README.md new file mode 100644 index 00000000..f94196a5 --- /dev/null +++ b/BMW-Dynatrace-config/CD_cm/conditional-naming-processgroup/README.md @@ -0,0 +1,67 @@ +### Process Group Detection Rules and Naming + +#### Detection Rule or Naming? + +For the explanation, we're using a real example of the Infotainment application: + +!(PGNaming1)[../../../../img/PGNaming1.PNG] + +Before working with your dashboards and alerting profiles, an important task to do when working with Dynatrace is checking +the structure of your applications (process groups). You can do that clicking under *technologies* and filter using your +application Management Zone. + +In the picture above, there are two Process Groups called bon-information-prod. **If you see duplicated process groups like in** +**this case, you MUST follow this guideline** + +Next step would be to open both process groups and compare the metadata. In that way, you can identify if all process instances are +part of the same application or not. An easy way to do that is asking yourself: how many instances of my application do i have? + +If you have 4 instances in total and you're able to see 2 in one PG and other 2 in other PG it means that **they are part of the ** +**same application** + +Another situation could be that checking on the metadata, then you see that are **two different application** and Dynatrace is just naming +the process group in the same way + +*Same application* +- Problem: Dynatrace is creating two different process groups, what transalates in two separated services for the same application. Instead of +seeing all the traffic in one service, you will have it splitted and it will complicate your monitoring +- Solution: create a process group detection rule. Contact Dynatrace Expert + +*Different application* +- Problem: Dynatrace is just naming in the same way applications that are different. +- Solution: This case is less severe, since it can be fixed with a process group naming rule. + + +What about our example? +!(PGNaming2)[../../../../img/PGNaming2.PNG] +!(PGNaming3)[../../../../img/PGNaming3.PNG] + +Based on the feedback of the infotaiment team, each process group is a different application (microservice) and it's visible in the kubernetes container/workload +within the metadata of each Process Group. + +#### How to create a Process Group Detection Rule +1. Open the *conditional-naming-processgroup.yaml* file and create a rule that looks like this: +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName} +- tag: Infotainment +- skipDeployment: false +``` +The result of the rule will be renaming the PG to this: +``` +bon-information-prod ipa +bon-information-prod rsl +``` + +Other possible placeholders that you can use are for example: +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName/[^\\-]*$} +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesFullPodName/buffet-(.*?)-} +{ProcessGroup:DetectedName} - {HostGroup:Name/[^\\_]*$} +{ProcessGroup:KubernetesNamespace} +{ProcessGroup:CommandLineArgs/.*?\\-f\\s\\/www\\/(.*?)\\/generated\\/httpd\\.conf.*?} + +You can combine different ones. Check the (documentation)[link] for more \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_cm/conditional-naming-processgroup/conditional-naming-processgroup.yaml b/BMW-Dynatrace-config/CD_cm/conditional-naming-processgroup/conditional-naming-processgroup.yaml new file mode 100644 index 00000000..ec64dfd5 --- /dev/null +++ b/BMW-Dynatrace-config/CD_cm/conditional-naming-processgroup/conditional-naming-processgroup.yaml @@ -0,0 +1,8 @@ +config: +- CDcm: template.json + +CDcm: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: cm +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_cm/conditional-naming-processgroup/template.json b/BMW-Dynatrace-config/CD_cm/conditional-naming-processgroup/template.json new file mode 100644 index 00000000..7c039808 --- /dev/null +++ b/BMW-Dynatrace-config/CD_cm/conditional-naming-processgroup/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "type": "PROCESS_GROUP" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_cm/conditional-naming-service/README.md b/BMW-Dynatrace-config/CD_cm/conditional-naming-service/README.md new file mode 100644 index 00000000..c34ef308 --- /dev/null +++ b/BMW-Dynatrace-config/CD_cm/conditional-naming-service/README.md @@ -0,0 +1,35 @@ +### Service Naming Rules + +A typical case could be that you access to *Transaction & Services* and you find two services that are exactly the same: +*DataDownloadV1* +*DataDownloadV1* + +If you drilldown into the service and you check in the process group, you may have a PROD and a E2E for each service. + +*Note: if you see that both process group are exactly the same, please contact a Dynatrace expert to create a Process* +*Group detection rule* + +In the case the PG are PROD and E2E, then we need to create a rule that looks like this: + +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {Service:DetectedName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +- tag: Infotainment +- skipDeployment: false +``` + +The rule will get the Service Detected Name (current name) and it will extract (with a regex) the part of the kubernetes namespace after the "-", so -prod or -e2e, resulting in: +*DataDownloadV1 - prod* +*DataDownloadV1 - e2e* + +Now, services will be easy to identify. + +You can create rules based on any property/metadata. Some other placeholder's eamples: +{Service:DatabaseName} - E2E +{Service:WebServiceName} - {ProcessGroup:Kubernetes:microservice} - {ProcessGroup:Kubernetes:environment} +{Service:DetectedName} - {ProcessGroup:KubernetesContainerName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +{Service:DetectedName} - {ProcessGroup:SpringBootProfileName/[^\\-]*$} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_cm/conditional-naming-service/conditional-naming-service.yaml b/BMW-Dynatrace-config/CD_cm/conditional-naming-service/conditional-naming-service.yaml new file mode 100644 index 00000000..ec64dfd5 --- /dev/null +++ b/BMW-Dynatrace-config/CD_cm/conditional-naming-service/conditional-naming-service.yaml @@ -0,0 +1,8 @@ +config: +- CDcm: template.json + +CDcm: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: cm +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_cm/conditional-naming-service/template.json b/BMW-Dynatrace-config/CD_cm/conditional-naming-service/template.json new file mode 100644 index 00000000..5d4fac56 --- /dev/null +++ b/BMW-Dynatrace-config/CD_cm/conditional-naming-service/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "type": "SERVICE" +} \ 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 index d41c4c77..5f35e5c1 100644 --- a/BMW-Dynatrace-config/CD_cm/custom-service-java/README.md +++ b/BMW-Dynatrace-config/CD_cm/custom-service-java/README.md @@ -1,30 +1,4 @@ -## 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 configure custom services? -## 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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Custom+Services) page to configure your custom services. \ 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 index 92e734fa..1695924c 100644 --- a/BMW-Dynatrace-config/CD_cm/synthetic-monitor/README.md +++ b/BMW-Dynatrace-config/CD_cm/synthetic-monitor/README.md @@ -1,37 +1,4 @@ -# Synthetic Configuration -To calculate the Availability KPI, a synthetic must be configured. +### How to configure synthetics? -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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Synthetic+Monitors) page to configure your synthetics. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_commute-notification-service/conditional-naming-processgroup/README.md b/BMW-Dynatrace-config/CD_commute-notification-service/conditional-naming-processgroup/README.md new file mode 100644 index 00000000..f94196a5 --- /dev/null +++ b/BMW-Dynatrace-config/CD_commute-notification-service/conditional-naming-processgroup/README.md @@ -0,0 +1,67 @@ +### Process Group Detection Rules and Naming + +#### Detection Rule or Naming? + +For the explanation, we're using a real example of the Infotainment application: + +!(PGNaming1)[../../../../img/PGNaming1.PNG] + +Before working with your dashboards and alerting profiles, an important task to do when working with Dynatrace is checking +the structure of your applications (process groups). You can do that clicking under *technologies* and filter using your +application Management Zone. + +In the picture above, there are two Process Groups called bon-information-prod. **If you see duplicated process groups like in** +**this case, you MUST follow this guideline** + +Next step would be to open both process groups and compare the metadata. In that way, you can identify if all process instances are +part of the same application or not. An easy way to do that is asking yourself: how many instances of my application do i have? + +If you have 4 instances in total and you're able to see 2 in one PG and other 2 in other PG it means that **they are part of the ** +**same application** + +Another situation could be that checking on the metadata, then you see that are **two different application** and Dynatrace is just naming +the process group in the same way + +*Same application* +- Problem: Dynatrace is creating two different process groups, what transalates in two separated services for the same application. Instead of +seeing all the traffic in one service, you will have it splitted and it will complicate your monitoring +- Solution: create a process group detection rule. Contact Dynatrace Expert + +*Different application* +- Problem: Dynatrace is just naming in the same way applications that are different. +- Solution: This case is less severe, since it can be fixed with a process group naming rule. + + +What about our example? +!(PGNaming2)[../../../../img/PGNaming2.PNG] +!(PGNaming3)[../../../../img/PGNaming3.PNG] + +Based on the feedback of the infotaiment team, each process group is a different application (microservice) and it's visible in the kubernetes container/workload +within the metadata of each Process Group. + +#### How to create a Process Group Detection Rule +1. Open the *conditional-naming-processgroup.yaml* file and create a rule that looks like this: +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName} +- tag: Infotainment +- skipDeployment: false +``` +The result of the rule will be renaming the PG to this: +``` +bon-information-prod ipa +bon-information-prod rsl +``` + +Other possible placeholders that you can use are for example: +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName/[^\\-]*$} +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesFullPodName/buffet-(.*?)-} +{ProcessGroup:DetectedName} - {HostGroup:Name/[^\\_]*$} +{ProcessGroup:KubernetesNamespace} +{ProcessGroup:CommandLineArgs/.*?\\-f\\s\\/www\\/(.*?)\\/generated\\/httpd\\.conf.*?} + +You can combine different ones. Check the (documentation)[link] for more \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_commute-notification-service/conditional-naming-processgroup/conditional-naming-processgroup.yaml b/BMW-Dynatrace-config/CD_commute-notification-service/conditional-naming-processgroup/conditional-naming-processgroup.yaml new file mode 100644 index 00000000..b09bca0b --- /dev/null +++ b/BMW-Dynatrace-config/CD_commute-notification-service/conditional-naming-processgroup/conditional-naming-processgroup.yaml @@ -0,0 +1,8 @@ +config: +- CDcommute-notification-service: template.json + +CDcommute-notification-service: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: commute-notification-service +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_commute-notification-service/conditional-naming-processgroup/template.json b/BMW-Dynatrace-config/CD_commute-notification-service/conditional-naming-processgroup/template.json new file mode 100644 index 00000000..7c039808 --- /dev/null +++ b/BMW-Dynatrace-config/CD_commute-notification-service/conditional-naming-processgroup/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "type": "PROCESS_GROUP" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_commute-notification-service/conditional-naming-service/README.md b/BMW-Dynatrace-config/CD_commute-notification-service/conditional-naming-service/README.md new file mode 100644 index 00000000..c34ef308 --- /dev/null +++ b/BMW-Dynatrace-config/CD_commute-notification-service/conditional-naming-service/README.md @@ -0,0 +1,35 @@ +### Service Naming Rules + +A typical case could be that you access to *Transaction & Services* and you find two services that are exactly the same: +*DataDownloadV1* +*DataDownloadV1* + +If you drilldown into the service and you check in the process group, you may have a PROD and a E2E for each service. + +*Note: if you see that both process group are exactly the same, please contact a Dynatrace expert to create a Process* +*Group detection rule* + +In the case the PG are PROD and E2E, then we need to create a rule that looks like this: + +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {Service:DetectedName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +- tag: Infotainment +- skipDeployment: false +``` + +The rule will get the Service Detected Name (current name) and it will extract (with a regex) the part of the kubernetes namespace after the "-", so -prod or -e2e, resulting in: +*DataDownloadV1 - prod* +*DataDownloadV1 - e2e* + +Now, services will be easy to identify. + +You can create rules based on any property/metadata. Some other placeholder's eamples: +{Service:DatabaseName} - E2E +{Service:WebServiceName} - {ProcessGroup:Kubernetes:microservice} - {ProcessGroup:Kubernetes:environment} +{Service:DetectedName} - {ProcessGroup:KubernetesContainerName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +{Service:DetectedName} - {ProcessGroup:SpringBootProfileName/[^\\-]*$} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_commute-notification-service/conditional-naming-service/conditional-naming-service.yaml b/BMW-Dynatrace-config/CD_commute-notification-service/conditional-naming-service/conditional-naming-service.yaml new file mode 100644 index 00000000..b09bca0b --- /dev/null +++ b/BMW-Dynatrace-config/CD_commute-notification-service/conditional-naming-service/conditional-naming-service.yaml @@ -0,0 +1,8 @@ +config: +- CDcommute-notification-service: template.json + +CDcommute-notification-service: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: commute-notification-service +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_commute-notification-service/conditional-naming-service/template.json b/BMW-Dynatrace-config/CD_commute-notification-service/conditional-naming-service/template.json new file mode 100644 index 00000000..5d4fac56 --- /dev/null +++ b/BMW-Dynatrace-config/CD_commute-notification-service/conditional-naming-service/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "type": "SERVICE" +} \ 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 index d41c4c77..5f35e5c1 100644 --- 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 @@ -1,30 +1,4 @@ -## 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 configure custom services? -## 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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Custom+Services) page to configure your custom services. \ 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 index 92e734fa..1695924c 100644 --- a/BMW-Dynatrace-config/CD_commute-notification-service/synthetic-monitor/README.md +++ b/BMW-Dynatrace-config/CD_commute-notification-service/synthetic-monitor/README.md @@ -1,37 +1,4 @@ -# Synthetic Configuration -To calculate the Availability KPI, a synthetic must be configured. +### How to configure synthetics? -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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Synthetic+Monitors) page to configure your synthetics. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_commute-service/conditional-naming-processgroup/README.md b/BMW-Dynatrace-config/CD_commute-service/conditional-naming-processgroup/README.md new file mode 100644 index 00000000..f94196a5 --- /dev/null +++ b/BMW-Dynatrace-config/CD_commute-service/conditional-naming-processgroup/README.md @@ -0,0 +1,67 @@ +### Process Group Detection Rules and Naming + +#### Detection Rule or Naming? + +For the explanation, we're using a real example of the Infotainment application: + +!(PGNaming1)[../../../../img/PGNaming1.PNG] + +Before working with your dashboards and alerting profiles, an important task to do when working with Dynatrace is checking +the structure of your applications (process groups). You can do that clicking under *technologies* and filter using your +application Management Zone. + +In the picture above, there are two Process Groups called bon-information-prod. **If you see duplicated process groups like in** +**this case, you MUST follow this guideline** + +Next step would be to open both process groups and compare the metadata. In that way, you can identify if all process instances are +part of the same application or not. An easy way to do that is asking yourself: how many instances of my application do i have? + +If you have 4 instances in total and you're able to see 2 in one PG and other 2 in other PG it means that **they are part of the ** +**same application** + +Another situation could be that checking on the metadata, then you see that are **two different application** and Dynatrace is just naming +the process group in the same way + +*Same application* +- Problem: Dynatrace is creating two different process groups, what transalates in two separated services for the same application. Instead of +seeing all the traffic in one service, you will have it splitted and it will complicate your monitoring +- Solution: create a process group detection rule. Contact Dynatrace Expert + +*Different application* +- Problem: Dynatrace is just naming in the same way applications that are different. +- Solution: This case is less severe, since it can be fixed with a process group naming rule. + + +What about our example? +!(PGNaming2)[../../../../img/PGNaming2.PNG] +!(PGNaming3)[../../../../img/PGNaming3.PNG] + +Based on the feedback of the infotaiment team, each process group is a different application (microservice) and it's visible in the kubernetes container/workload +within the metadata of each Process Group. + +#### How to create a Process Group Detection Rule +1. Open the *conditional-naming-processgroup.yaml* file and create a rule that looks like this: +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName} +- tag: Infotainment +- skipDeployment: false +``` +The result of the rule will be renaming the PG to this: +``` +bon-information-prod ipa +bon-information-prod rsl +``` + +Other possible placeholders that you can use are for example: +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName/[^\\-]*$} +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesFullPodName/buffet-(.*?)-} +{ProcessGroup:DetectedName} - {HostGroup:Name/[^\\_]*$} +{ProcessGroup:KubernetesNamespace} +{ProcessGroup:CommandLineArgs/.*?\\-f\\s\\/www\\/(.*?)\\/generated\\/httpd\\.conf.*?} + +You can combine different ones. Check the (documentation)[link] for more \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_commute-service/conditional-naming-processgroup/conditional-naming-processgroup.yaml b/BMW-Dynatrace-config/CD_commute-service/conditional-naming-processgroup/conditional-naming-processgroup.yaml new file mode 100644 index 00000000..50252739 --- /dev/null +++ b/BMW-Dynatrace-config/CD_commute-service/conditional-naming-processgroup/conditional-naming-processgroup.yaml @@ -0,0 +1,8 @@ +config: +- CDcommute-service: template.json + +CDcommute-service: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: commute-service +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_commute-service/conditional-naming-processgroup/template.json b/BMW-Dynatrace-config/CD_commute-service/conditional-naming-processgroup/template.json new file mode 100644 index 00000000..7c039808 --- /dev/null +++ b/BMW-Dynatrace-config/CD_commute-service/conditional-naming-processgroup/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "type": "PROCESS_GROUP" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_commute-service/conditional-naming-service/README.md b/BMW-Dynatrace-config/CD_commute-service/conditional-naming-service/README.md new file mode 100644 index 00000000..c34ef308 --- /dev/null +++ b/BMW-Dynatrace-config/CD_commute-service/conditional-naming-service/README.md @@ -0,0 +1,35 @@ +### Service Naming Rules + +A typical case could be that you access to *Transaction & Services* and you find two services that are exactly the same: +*DataDownloadV1* +*DataDownloadV1* + +If you drilldown into the service and you check in the process group, you may have a PROD and a E2E for each service. + +*Note: if you see that both process group are exactly the same, please contact a Dynatrace expert to create a Process* +*Group detection rule* + +In the case the PG are PROD and E2E, then we need to create a rule that looks like this: + +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {Service:DetectedName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +- tag: Infotainment +- skipDeployment: false +``` + +The rule will get the Service Detected Name (current name) and it will extract (with a regex) the part of the kubernetes namespace after the "-", so -prod or -e2e, resulting in: +*DataDownloadV1 - prod* +*DataDownloadV1 - e2e* + +Now, services will be easy to identify. + +You can create rules based on any property/metadata. Some other placeholder's eamples: +{Service:DatabaseName} - E2E +{Service:WebServiceName} - {ProcessGroup:Kubernetes:microservice} - {ProcessGroup:Kubernetes:environment} +{Service:DetectedName} - {ProcessGroup:KubernetesContainerName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +{Service:DetectedName} - {ProcessGroup:SpringBootProfileName/[^\\-]*$} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_commute-service/conditional-naming-service/conditional-naming-service.yaml b/BMW-Dynatrace-config/CD_commute-service/conditional-naming-service/conditional-naming-service.yaml new file mode 100644 index 00000000..50252739 --- /dev/null +++ b/BMW-Dynatrace-config/CD_commute-service/conditional-naming-service/conditional-naming-service.yaml @@ -0,0 +1,8 @@ +config: +- CDcommute-service: template.json + +CDcommute-service: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: commute-service +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_commute-service/conditional-naming-service/template.json b/BMW-Dynatrace-config/CD_commute-service/conditional-naming-service/template.json new file mode 100644 index 00000000..5d4fac56 --- /dev/null +++ b/BMW-Dynatrace-config/CD_commute-service/conditional-naming-service/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "type": "SERVICE" +} \ 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 index d41c4c77..5f35e5c1 100644 --- a/BMW-Dynatrace-config/CD_commute-service/custom-service-java/README.md +++ b/BMW-Dynatrace-config/CD_commute-service/custom-service-java/README.md @@ -1,30 +1,4 @@ -## 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 configure custom services? -## 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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Custom+Services) page to configure your custom services. \ 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 index 92e734fa..1695924c 100644 --- a/BMW-Dynatrace-config/CD_commute-service/synthetic-monitor/README.md +++ b/BMW-Dynatrace-config/CD_commute-service/synthetic-monitor/README.md @@ -1,37 +1,4 @@ -# Synthetic Configuration -To calculate the Availability KPI, a synthetic must be configured. +### How to configure synthetics? -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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Synthetic+Monitors) page to configure your synthetics. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_connected-oauth-service-apim/conditional-naming-processgroup/README.md b/BMW-Dynatrace-config/CD_connected-oauth-service-apim/conditional-naming-processgroup/README.md new file mode 100644 index 00000000..f94196a5 --- /dev/null +++ b/BMW-Dynatrace-config/CD_connected-oauth-service-apim/conditional-naming-processgroup/README.md @@ -0,0 +1,67 @@ +### Process Group Detection Rules and Naming + +#### Detection Rule or Naming? + +For the explanation, we're using a real example of the Infotainment application: + +!(PGNaming1)[../../../../img/PGNaming1.PNG] + +Before working with your dashboards and alerting profiles, an important task to do when working with Dynatrace is checking +the structure of your applications (process groups). You can do that clicking under *technologies* and filter using your +application Management Zone. + +In the picture above, there are two Process Groups called bon-information-prod. **If you see duplicated process groups like in** +**this case, you MUST follow this guideline** + +Next step would be to open both process groups and compare the metadata. In that way, you can identify if all process instances are +part of the same application or not. An easy way to do that is asking yourself: how many instances of my application do i have? + +If you have 4 instances in total and you're able to see 2 in one PG and other 2 in other PG it means that **they are part of the ** +**same application** + +Another situation could be that checking on the metadata, then you see that are **two different application** and Dynatrace is just naming +the process group in the same way + +*Same application* +- Problem: Dynatrace is creating two different process groups, what transalates in two separated services for the same application. Instead of +seeing all the traffic in one service, you will have it splitted and it will complicate your monitoring +- Solution: create a process group detection rule. Contact Dynatrace Expert + +*Different application* +- Problem: Dynatrace is just naming in the same way applications that are different. +- Solution: This case is less severe, since it can be fixed with a process group naming rule. + + +What about our example? +!(PGNaming2)[../../../../img/PGNaming2.PNG] +!(PGNaming3)[../../../../img/PGNaming3.PNG] + +Based on the feedback of the infotaiment team, each process group is a different application (microservice) and it's visible in the kubernetes container/workload +within the metadata of each Process Group. + +#### How to create a Process Group Detection Rule +1. Open the *conditional-naming-processgroup.yaml* file and create a rule that looks like this: +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName} +- tag: Infotainment +- skipDeployment: false +``` +The result of the rule will be renaming the PG to this: +``` +bon-information-prod ipa +bon-information-prod rsl +``` + +Other possible placeholders that you can use are for example: +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName/[^\\-]*$} +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesFullPodName/buffet-(.*?)-} +{ProcessGroup:DetectedName} - {HostGroup:Name/[^\\_]*$} +{ProcessGroup:KubernetesNamespace} +{ProcessGroup:CommandLineArgs/.*?\\-f\\s\\/www\\/(.*?)\\/generated\\/httpd\\.conf.*?} + +You can combine different ones. Check the (documentation)[link] for more \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_connected-oauth-service-apim/conditional-naming-processgroup/conditional-naming-processgroup.yaml b/BMW-Dynatrace-config/CD_connected-oauth-service-apim/conditional-naming-processgroup/conditional-naming-processgroup.yaml new file mode 100644 index 00000000..4d2ff46b --- /dev/null +++ b/BMW-Dynatrace-config/CD_connected-oauth-service-apim/conditional-naming-processgroup/conditional-naming-processgroup.yaml @@ -0,0 +1,8 @@ +config: +- CDconnected-oauth-service-apim: template.json + +CDconnected-oauth-service-apim: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: connected-oauth-service-apim +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_connected-oauth-service-apim/conditional-naming-processgroup/template.json b/BMW-Dynatrace-config/CD_connected-oauth-service-apim/conditional-naming-processgroup/template.json new file mode 100644 index 00000000..7c039808 --- /dev/null +++ b/BMW-Dynatrace-config/CD_connected-oauth-service-apim/conditional-naming-processgroup/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "type": "PROCESS_GROUP" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_connected-oauth-service-apim/conditional-naming-service/README.md b/BMW-Dynatrace-config/CD_connected-oauth-service-apim/conditional-naming-service/README.md new file mode 100644 index 00000000..c34ef308 --- /dev/null +++ b/BMW-Dynatrace-config/CD_connected-oauth-service-apim/conditional-naming-service/README.md @@ -0,0 +1,35 @@ +### Service Naming Rules + +A typical case could be that you access to *Transaction & Services* and you find two services that are exactly the same: +*DataDownloadV1* +*DataDownloadV1* + +If you drilldown into the service and you check in the process group, you may have a PROD and a E2E for each service. + +*Note: if you see that both process group are exactly the same, please contact a Dynatrace expert to create a Process* +*Group detection rule* + +In the case the PG are PROD and E2E, then we need to create a rule that looks like this: + +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {Service:DetectedName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +- tag: Infotainment +- skipDeployment: false +``` + +The rule will get the Service Detected Name (current name) and it will extract (with a regex) the part of the kubernetes namespace after the "-", so -prod or -e2e, resulting in: +*DataDownloadV1 - prod* +*DataDownloadV1 - e2e* + +Now, services will be easy to identify. + +You can create rules based on any property/metadata. Some other placeholder's eamples: +{Service:DatabaseName} - E2E +{Service:WebServiceName} - {ProcessGroup:Kubernetes:microservice} - {ProcessGroup:Kubernetes:environment} +{Service:DetectedName} - {ProcessGroup:KubernetesContainerName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +{Service:DetectedName} - {ProcessGroup:SpringBootProfileName/[^\\-]*$} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_connected-oauth-service-apim/conditional-naming-service/conditional-naming-service.yaml b/BMW-Dynatrace-config/CD_connected-oauth-service-apim/conditional-naming-service/conditional-naming-service.yaml new file mode 100644 index 00000000..4d2ff46b --- /dev/null +++ b/BMW-Dynatrace-config/CD_connected-oauth-service-apim/conditional-naming-service/conditional-naming-service.yaml @@ -0,0 +1,8 @@ +config: +- CDconnected-oauth-service-apim: template.json + +CDconnected-oauth-service-apim: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: connected-oauth-service-apim +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_connected-oauth-service-apim/conditional-naming-service/template.json b/BMW-Dynatrace-config/CD_connected-oauth-service-apim/conditional-naming-service/template.json new file mode 100644 index 00000000..5d4fac56 --- /dev/null +++ b/BMW-Dynatrace-config/CD_connected-oauth-service-apim/conditional-naming-service/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "type": "SERVICE" +} \ 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 index d41c4c77..5f35e5c1 100644 --- 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 @@ -1,30 +1,4 @@ -## 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 configure custom services? -## 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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Custom+Services) page to configure your custom services. \ 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 index 92e734fa..1695924c 100644 --- 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 @@ -1,37 +1,4 @@ -# Synthetic Configuration -To calculate the Availability KPI, a synthetic must be configured. +### How to configure synthetics? -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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Synthetic+Monitors) page to configure your synthetics. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_connected-oauth-service/conditional-naming-processgroup/README.md b/BMW-Dynatrace-config/CD_connected-oauth-service/conditional-naming-processgroup/README.md new file mode 100644 index 00000000..f94196a5 --- /dev/null +++ b/BMW-Dynatrace-config/CD_connected-oauth-service/conditional-naming-processgroup/README.md @@ -0,0 +1,67 @@ +### Process Group Detection Rules and Naming + +#### Detection Rule or Naming? + +For the explanation, we're using a real example of the Infotainment application: + +!(PGNaming1)[../../../../img/PGNaming1.PNG] + +Before working with your dashboards and alerting profiles, an important task to do when working with Dynatrace is checking +the structure of your applications (process groups). You can do that clicking under *technologies* and filter using your +application Management Zone. + +In the picture above, there are two Process Groups called bon-information-prod. **If you see duplicated process groups like in** +**this case, you MUST follow this guideline** + +Next step would be to open both process groups and compare the metadata. In that way, you can identify if all process instances are +part of the same application or not. An easy way to do that is asking yourself: how many instances of my application do i have? + +If you have 4 instances in total and you're able to see 2 in one PG and other 2 in other PG it means that **they are part of the ** +**same application** + +Another situation could be that checking on the metadata, then you see that are **two different application** and Dynatrace is just naming +the process group in the same way + +*Same application* +- Problem: Dynatrace is creating two different process groups, what transalates in two separated services for the same application. Instead of +seeing all the traffic in one service, you will have it splitted and it will complicate your monitoring +- Solution: create a process group detection rule. Contact Dynatrace Expert + +*Different application* +- Problem: Dynatrace is just naming in the same way applications that are different. +- Solution: This case is less severe, since it can be fixed with a process group naming rule. + + +What about our example? +!(PGNaming2)[../../../../img/PGNaming2.PNG] +!(PGNaming3)[../../../../img/PGNaming3.PNG] + +Based on the feedback of the infotaiment team, each process group is a different application (microservice) and it's visible in the kubernetes container/workload +within the metadata of each Process Group. + +#### How to create a Process Group Detection Rule +1. Open the *conditional-naming-processgroup.yaml* file and create a rule that looks like this: +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName} +- tag: Infotainment +- skipDeployment: false +``` +The result of the rule will be renaming the PG to this: +``` +bon-information-prod ipa +bon-information-prod rsl +``` + +Other possible placeholders that you can use are for example: +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName/[^\\-]*$} +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesFullPodName/buffet-(.*?)-} +{ProcessGroup:DetectedName} - {HostGroup:Name/[^\\_]*$} +{ProcessGroup:KubernetesNamespace} +{ProcessGroup:CommandLineArgs/.*?\\-f\\s\\/www\\/(.*?)\\/generated\\/httpd\\.conf.*?} + +You can combine different ones. Check the (documentation)[link] for more \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_connected-oauth-service/conditional-naming-processgroup/conditional-naming-processgroup.yaml b/BMW-Dynatrace-config/CD_connected-oauth-service/conditional-naming-processgroup/conditional-naming-processgroup.yaml new file mode 100644 index 00000000..f9dbe435 --- /dev/null +++ b/BMW-Dynatrace-config/CD_connected-oauth-service/conditional-naming-processgroup/conditional-naming-processgroup.yaml @@ -0,0 +1,8 @@ +config: +- CDconnected-oauth-service: template.json + +CDconnected-oauth-service: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: connected-oauth-service +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_connected-oauth-service/conditional-naming-processgroup/template.json b/BMW-Dynatrace-config/CD_connected-oauth-service/conditional-naming-processgroup/template.json new file mode 100644 index 00000000..7c039808 --- /dev/null +++ b/BMW-Dynatrace-config/CD_connected-oauth-service/conditional-naming-processgroup/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "type": "PROCESS_GROUP" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_connected-oauth-service/conditional-naming-service/README.md b/BMW-Dynatrace-config/CD_connected-oauth-service/conditional-naming-service/README.md new file mode 100644 index 00000000..c34ef308 --- /dev/null +++ b/BMW-Dynatrace-config/CD_connected-oauth-service/conditional-naming-service/README.md @@ -0,0 +1,35 @@ +### Service Naming Rules + +A typical case could be that you access to *Transaction & Services* and you find two services that are exactly the same: +*DataDownloadV1* +*DataDownloadV1* + +If you drilldown into the service and you check in the process group, you may have a PROD and a E2E for each service. + +*Note: if you see that both process group are exactly the same, please contact a Dynatrace expert to create a Process* +*Group detection rule* + +In the case the PG are PROD and E2E, then we need to create a rule that looks like this: + +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {Service:DetectedName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +- tag: Infotainment +- skipDeployment: false +``` + +The rule will get the Service Detected Name (current name) and it will extract (with a regex) the part of the kubernetes namespace after the "-", so -prod or -e2e, resulting in: +*DataDownloadV1 - prod* +*DataDownloadV1 - e2e* + +Now, services will be easy to identify. + +You can create rules based on any property/metadata. Some other placeholder's eamples: +{Service:DatabaseName} - E2E +{Service:WebServiceName} - {ProcessGroup:Kubernetes:microservice} - {ProcessGroup:Kubernetes:environment} +{Service:DetectedName} - {ProcessGroup:KubernetesContainerName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +{Service:DetectedName} - {ProcessGroup:SpringBootProfileName/[^\\-]*$} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_connected-oauth-service/conditional-naming-service/conditional-naming-service.yaml b/BMW-Dynatrace-config/CD_connected-oauth-service/conditional-naming-service/conditional-naming-service.yaml new file mode 100644 index 00000000..f9dbe435 --- /dev/null +++ b/BMW-Dynatrace-config/CD_connected-oauth-service/conditional-naming-service/conditional-naming-service.yaml @@ -0,0 +1,8 @@ +config: +- CDconnected-oauth-service: template.json + +CDconnected-oauth-service: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: connected-oauth-service +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_connected-oauth-service/conditional-naming-service/template.json b/BMW-Dynatrace-config/CD_connected-oauth-service/conditional-naming-service/template.json new file mode 100644 index 00000000..5d4fac56 --- /dev/null +++ b/BMW-Dynatrace-config/CD_connected-oauth-service/conditional-naming-service/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "type": "SERVICE" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_connected-oauth-service/custom-service-java/README.md b/BMW-Dynatrace-config/CD_connected-oauth-service/custom-service-java/README.md index d41c4c77..5f35e5c1 100644 --- a/BMW-Dynatrace-config/CD_connected-oauth-service/custom-service-java/README.md +++ b/BMW-Dynatrace-config/CD_connected-oauth-service/custom-service-java/README.md @@ -1,30 +1,4 @@ -## 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 configure custom services? -## 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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Custom+Services) page to configure your custom services. \ No newline at end of file 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 92e734fa..1695924c 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 @@ -1,37 +1,4 @@ -# Synthetic Configuration -To calculate the Availability KPI, a synthetic must be configured. +### How to configure synthetics? -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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Synthetic+Monitors) page to configure your synthetics. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_connected-onboard-composite-service/conditional-naming-processgroup/README.md b/BMW-Dynatrace-config/CD_connected-onboard-composite-service/conditional-naming-processgroup/README.md new file mode 100644 index 00000000..f94196a5 --- /dev/null +++ b/BMW-Dynatrace-config/CD_connected-onboard-composite-service/conditional-naming-processgroup/README.md @@ -0,0 +1,67 @@ +### Process Group Detection Rules and Naming + +#### Detection Rule or Naming? + +For the explanation, we're using a real example of the Infotainment application: + +!(PGNaming1)[../../../../img/PGNaming1.PNG] + +Before working with your dashboards and alerting profiles, an important task to do when working with Dynatrace is checking +the structure of your applications (process groups). You can do that clicking under *technologies* and filter using your +application Management Zone. + +In the picture above, there are two Process Groups called bon-information-prod. **If you see duplicated process groups like in** +**this case, you MUST follow this guideline** + +Next step would be to open both process groups and compare the metadata. In that way, you can identify if all process instances are +part of the same application or not. An easy way to do that is asking yourself: how many instances of my application do i have? + +If you have 4 instances in total and you're able to see 2 in one PG and other 2 in other PG it means that **they are part of the ** +**same application** + +Another situation could be that checking on the metadata, then you see that are **two different application** and Dynatrace is just naming +the process group in the same way + +*Same application* +- Problem: Dynatrace is creating two different process groups, what transalates in two separated services for the same application. Instead of +seeing all the traffic in one service, you will have it splitted and it will complicate your monitoring +- Solution: create a process group detection rule. Contact Dynatrace Expert + +*Different application* +- Problem: Dynatrace is just naming in the same way applications that are different. +- Solution: This case is less severe, since it can be fixed with a process group naming rule. + + +What about our example? +!(PGNaming2)[../../../../img/PGNaming2.PNG] +!(PGNaming3)[../../../../img/PGNaming3.PNG] + +Based on the feedback of the infotaiment team, each process group is a different application (microservice) and it's visible in the kubernetes container/workload +within the metadata of each Process Group. + +#### How to create a Process Group Detection Rule +1. Open the *conditional-naming-processgroup.yaml* file and create a rule that looks like this: +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName} +- tag: Infotainment +- skipDeployment: false +``` +The result of the rule will be renaming the PG to this: +``` +bon-information-prod ipa +bon-information-prod rsl +``` + +Other possible placeholders that you can use are for example: +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName/[^\\-]*$} +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesFullPodName/buffet-(.*?)-} +{ProcessGroup:DetectedName} - {HostGroup:Name/[^\\_]*$} +{ProcessGroup:KubernetesNamespace} +{ProcessGroup:CommandLineArgs/.*?\\-f\\s\\/www\\/(.*?)\\/generated\\/httpd\\.conf.*?} + +You can combine different ones. Check the (documentation)[link] for more \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_connected-onboard-composite-service/conditional-naming-processgroup/conditional-naming-processgroup.yaml b/BMW-Dynatrace-config/CD_connected-onboard-composite-service/conditional-naming-processgroup/conditional-naming-processgroup.yaml new file mode 100644 index 00000000..26e4f359 --- /dev/null +++ b/BMW-Dynatrace-config/CD_connected-onboard-composite-service/conditional-naming-processgroup/conditional-naming-processgroup.yaml @@ -0,0 +1,8 @@ +config: +- CDconnected-onboard-composite-service: template.json + +CDconnected-onboard-composite-service: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: connected-onboard-composite-service +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_connected-onboard-composite-service/conditional-naming-processgroup/template.json b/BMW-Dynatrace-config/CD_connected-onboard-composite-service/conditional-naming-processgroup/template.json new file mode 100644 index 00000000..7c039808 --- /dev/null +++ b/BMW-Dynatrace-config/CD_connected-onboard-composite-service/conditional-naming-processgroup/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "type": "PROCESS_GROUP" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_connected-onboard-composite-service/conditional-naming-service/README.md b/BMW-Dynatrace-config/CD_connected-onboard-composite-service/conditional-naming-service/README.md new file mode 100644 index 00000000..c34ef308 --- /dev/null +++ b/BMW-Dynatrace-config/CD_connected-onboard-composite-service/conditional-naming-service/README.md @@ -0,0 +1,35 @@ +### Service Naming Rules + +A typical case could be that you access to *Transaction & Services* and you find two services that are exactly the same: +*DataDownloadV1* +*DataDownloadV1* + +If you drilldown into the service and you check in the process group, you may have a PROD and a E2E for each service. + +*Note: if you see that both process group are exactly the same, please contact a Dynatrace expert to create a Process* +*Group detection rule* + +In the case the PG are PROD and E2E, then we need to create a rule that looks like this: + +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {Service:DetectedName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +- tag: Infotainment +- skipDeployment: false +``` + +The rule will get the Service Detected Name (current name) and it will extract (with a regex) the part of the kubernetes namespace after the "-", so -prod or -e2e, resulting in: +*DataDownloadV1 - prod* +*DataDownloadV1 - e2e* + +Now, services will be easy to identify. + +You can create rules based on any property/metadata. Some other placeholder's eamples: +{Service:DatabaseName} - E2E +{Service:WebServiceName} - {ProcessGroup:Kubernetes:microservice} - {ProcessGroup:Kubernetes:environment} +{Service:DetectedName} - {ProcessGroup:KubernetesContainerName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +{Service:DetectedName} - {ProcessGroup:SpringBootProfileName/[^\\-]*$} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_connected-onboard-composite-service/conditional-naming-service/conditional-naming-service.yaml b/BMW-Dynatrace-config/CD_connected-onboard-composite-service/conditional-naming-service/conditional-naming-service.yaml new file mode 100644 index 00000000..26e4f359 --- /dev/null +++ b/BMW-Dynatrace-config/CD_connected-onboard-composite-service/conditional-naming-service/conditional-naming-service.yaml @@ -0,0 +1,8 @@ +config: +- CDconnected-onboard-composite-service: template.json + +CDconnected-onboard-composite-service: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: connected-onboard-composite-service +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_connected-onboard-composite-service/conditional-naming-service/template.json b/BMW-Dynatrace-config/CD_connected-onboard-composite-service/conditional-naming-service/template.json new file mode 100644 index 00000000..5d4fac56 --- /dev/null +++ b/BMW-Dynatrace-config/CD_connected-onboard-composite-service/conditional-naming-service/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "type": "SERVICE" +} \ 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 index d41c4c77..5f35e5c1 100644 --- 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 @@ -1,30 +1,4 @@ -## 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 configure custom services? -## 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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Custom+Services) page to configure your custom services. \ 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 index 92e734fa..1695924c 100644 --- 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 @@ -1,37 +1,4 @@ -# Synthetic Configuration -To calculate the Availability KPI, a synthetic must be configured. +### How to configure synthetics? -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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Synthetic+Monitors) page to configure your synthetics. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_csu/conditional-naming-processgroup/README.md b/BMW-Dynatrace-config/CD_csu/conditional-naming-processgroup/README.md new file mode 100644 index 00000000..f94196a5 --- /dev/null +++ b/BMW-Dynatrace-config/CD_csu/conditional-naming-processgroup/README.md @@ -0,0 +1,67 @@ +### Process Group Detection Rules and Naming + +#### Detection Rule or Naming? + +For the explanation, we're using a real example of the Infotainment application: + +!(PGNaming1)[../../../../img/PGNaming1.PNG] + +Before working with your dashboards and alerting profiles, an important task to do when working with Dynatrace is checking +the structure of your applications (process groups). You can do that clicking under *technologies* and filter using your +application Management Zone. + +In the picture above, there are two Process Groups called bon-information-prod. **If you see duplicated process groups like in** +**this case, you MUST follow this guideline** + +Next step would be to open both process groups and compare the metadata. In that way, you can identify if all process instances are +part of the same application or not. An easy way to do that is asking yourself: how many instances of my application do i have? + +If you have 4 instances in total and you're able to see 2 in one PG and other 2 in other PG it means that **they are part of the ** +**same application** + +Another situation could be that checking on the metadata, then you see that are **two different application** and Dynatrace is just naming +the process group in the same way + +*Same application* +- Problem: Dynatrace is creating two different process groups, what transalates in two separated services for the same application. Instead of +seeing all the traffic in one service, you will have it splitted and it will complicate your monitoring +- Solution: create a process group detection rule. Contact Dynatrace Expert + +*Different application* +- Problem: Dynatrace is just naming in the same way applications that are different. +- Solution: This case is less severe, since it can be fixed with a process group naming rule. + + +What about our example? +!(PGNaming2)[../../../../img/PGNaming2.PNG] +!(PGNaming3)[../../../../img/PGNaming3.PNG] + +Based on the feedback of the infotaiment team, each process group is a different application (microservice) and it's visible in the kubernetes container/workload +within the metadata of each Process Group. + +#### How to create a Process Group Detection Rule +1. Open the *conditional-naming-processgroup.yaml* file and create a rule that looks like this: +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName} +- tag: Infotainment +- skipDeployment: false +``` +The result of the rule will be renaming the PG to this: +``` +bon-information-prod ipa +bon-information-prod rsl +``` + +Other possible placeholders that you can use are for example: +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName/[^\\-]*$} +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesFullPodName/buffet-(.*?)-} +{ProcessGroup:DetectedName} - {HostGroup:Name/[^\\_]*$} +{ProcessGroup:KubernetesNamespace} +{ProcessGroup:CommandLineArgs/.*?\\-f\\s\\/www\\/(.*?)\\/generated\\/httpd\\.conf.*?} + +You can combine different ones. Check the (documentation)[link] for more \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_csu/conditional-naming-processgroup/conditional-naming-processgroup.yaml b/BMW-Dynatrace-config/CD_csu/conditional-naming-processgroup/conditional-naming-processgroup.yaml new file mode 100644 index 00000000..3103085c --- /dev/null +++ b/BMW-Dynatrace-config/CD_csu/conditional-naming-processgroup/conditional-naming-processgroup.yaml @@ -0,0 +1,8 @@ +config: +- CDcsu: template.json + +CDcsu: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: csu +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_csu/conditional-naming-processgroup/template.json b/BMW-Dynatrace-config/CD_csu/conditional-naming-processgroup/template.json new file mode 100644 index 00000000..7c039808 --- /dev/null +++ b/BMW-Dynatrace-config/CD_csu/conditional-naming-processgroup/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "type": "PROCESS_GROUP" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_csu/conditional-naming-service/README.md b/BMW-Dynatrace-config/CD_csu/conditional-naming-service/README.md new file mode 100644 index 00000000..c34ef308 --- /dev/null +++ b/BMW-Dynatrace-config/CD_csu/conditional-naming-service/README.md @@ -0,0 +1,35 @@ +### Service Naming Rules + +A typical case could be that you access to *Transaction & Services* and you find two services that are exactly the same: +*DataDownloadV1* +*DataDownloadV1* + +If you drilldown into the service and you check in the process group, you may have a PROD and a E2E for each service. + +*Note: if you see that both process group are exactly the same, please contact a Dynatrace expert to create a Process* +*Group detection rule* + +In the case the PG are PROD and E2E, then we need to create a rule that looks like this: + +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {Service:DetectedName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +- tag: Infotainment +- skipDeployment: false +``` + +The rule will get the Service Detected Name (current name) and it will extract (with a regex) the part of the kubernetes namespace after the "-", so -prod or -e2e, resulting in: +*DataDownloadV1 - prod* +*DataDownloadV1 - e2e* + +Now, services will be easy to identify. + +You can create rules based on any property/metadata. Some other placeholder's eamples: +{Service:DatabaseName} - E2E +{Service:WebServiceName} - {ProcessGroup:Kubernetes:microservice} - {ProcessGroup:Kubernetes:environment} +{Service:DetectedName} - {ProcessGroup:KubernetesContainerName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +{Service:DetectedName} - {ProcessGroup:SpringBootProfileName/[^\\-]*$} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_csu/conditional-naming-service/conditional-naming-service.yaml b/BMW-Dynatrace-config/CD_csu/conditional-naming-service/conditional-naming-service.yaml new file mode 100644 index 00000000..3103085c --- /dev/null +++ b/BMW-Dynatrace-config/CD_csu/conditional-naming-service/conditional-naming-service.yaml @@ -0,0 +1,8 @@ +config: +- CDcsu: template.json + +CDcsu: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: csu +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_csu/conditional-naming-service/template.json b/BMW-Dynatrace-config/CD_csu/conditional-naming-service/template.json new file mode 100644 index 00000000..5d4fac56 --- /dev/null +++ b/BMW-Dynatrace-config/CD_csu/conditional-naming-service/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "type": "SERVICE" +} \ 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 index d41c4c77..5f35e5c1 100644 --- a/BMW-Dynatrace-config/CD_csu/custom-service-java/README.md +++ b/BMW-Dynatrace-config/CD_csu/custom-service-java/README.md @@ -1,30 +1,4 @@ -## 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 configure custom services? -## 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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Custom+Services) page to configure your custom services. \ 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 index 92e734fa..1695924c 100644 --- a/BMW-Dynatrace-config/CD_csu/synthetic-monitor/README.md +++ b/BMW-Dynatrace-config/CD_csu/synthetic-monitor/README.md @@ -1,37 +1,4 @@ -# Synthetic Configuration -To calculate the Availability KPI, a synthetic must be configured. +### How to configure synthetics? -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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Synthetic+Monitors) page to configure your synthetics. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ctns-event-origin/conditional-naming-processgroup/README.md b/BMW-Dynatrace-config/CD_ctns-event-origin/conditional-naming-processgroup/README.md new file mode 100644 index 00000000..f94196a5 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ctns-event-origin/conditional-naming-processgroup/README.md @@ -0,0 +1,67 @@ +### Process Group Detection Rules and Naming + +#### Detection Rule or Naming? + +For the explanation, we're using a real example of the Infotainment application: + +!(PGNaming1)[../../../../img/PGNaming1.PNG] + +Before working with your dashboards and alerting profiles, an important task to do when working with Dynatrace is checking +the structure of your applications (process groups). You can do that clicking under *technologies* and filter using your +application Management Zone. + +In the picture above, there are two Process Groups called bon-information-prod. **If you see duplicated process groups like in** +**this case, you MUST follow this guideline** + +Next step would be to open both process groups and compare the metadata. In that way, you can identify if all process instances are +part of the same application or not. An easy way to do that is asking yourself: how many instances of my application do i have? + +If you have 4 instances in total and you're able to see 2 in one PG and other 2 in other PG it means that **they are part of the ** +**same application** + +Another situation could be that checking on the metadata, then you see that are **two different application** and Dynatrace is just naming +the process group in the same way + +*Same application* +- Problem: Dynatrace is creating two different process groups, what transalates in two separated services for the same application. Instead of +seeing all the traffic in one service, you will have it splitted and it will complicate your monitoring +- Solution: create a process group detection rule. Contact Dynatrace Expert + +*Different application* +- Problem: Dynatrace is just naming in the same way applications that are different. +- Solution: This case is less severe, since it can be fixed with a process group naming rule. + + +What about our example? +!(PGNaming2)[../../../../img/PGNaming2.PNG] +!(PGNaming3)[../../../../img/PGNaming3.PNG] + +Based on the feedback of the infotaiment team, each process group is a different application (microservice) and it's visible in the kubernetes container/workload +within the metadata of each Process Group. + +#### How to create a Process Group Detection Rule +1. Open the *conditional-naming-processgroup.yaml* file and create a rule that looks like this: +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName} +- tag: Infotainment +- skipDeployment: false +``` +The result of the rule will be renaming the PG to this: +``` +bon-information-prod ipa +bon-information-prod rsl +``` + +Other possible placeholders that you can use are for example: +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName/[^\\-]*$} +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesFullPodName/buffet-(.*?)-} +{ProcessGroup:DetectedName} - {HostGroup:Name/[^\\_]*$} +{ProcessGroup:KubernetesNamespace} +{ProcessGroup:CommandLineArgs/.*?\\-f\\s\\/www\\/(.*?)\\/generated\\/httpd\\.conf.*?} + +You can combine different ones. Check the (documentation)[link] for more \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ctns-event-origin/conditional-naming-processgroup/conditional-naming-processgroup.yaml b/BMW-Dynatrace-config/CD_ctns-event-origin/conditional-naming-processgroup/conditional-naming-processgroup.yaml new file mode 100644 index 00000000..2af94786 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ctns-event-origin/conditional-naming-processgroup/conditional-naming-processgroup.yaml @@ -0,0 +1,8 @@ +config: +- CDctns-event-origin: template.json + +CDctns-event-origin: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: ctns-event-origin +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_ctns-event-origin/conditional-naming-processgroup/template.json b/BMW-Dynatrace-config/CD_ctns-event-origin/conditional-naming-processgroup/template.json new file mode 100644 index 00000000..7c039808 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ctns-event-origin/conditional-naming-processgroup/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "type": "PROCESS_GROUP" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ctns-event-origin/conditional-naming-service/README.md b/BMW-Dynatrace-config/CD_ctns-event-origin/conditional-naming-service/README.md new file mode 100644 index 00000000..c34ef308 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ctns-event-origin/conditional-naming-service/README.md @@ -0,0 +1,35 @@ +### Service Naming Rules + +A typical case could be that you access to *Transaction & Services* and you find two services that are exactly the same: +*DataDownloadV1* +*DataDownloadV1* + +If you drilldown into the service and you check in the process group, you may have a PROD and a E2E for each service. + +*Note: if you see that both process group are exactly the same, please contact a Dynatrace expert to create a Process* +*Group detection rule* + +In the case the PG are PROD and E2E, then we need to create a rule that looks like this: + +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {Service:DetectedName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +- tag: Infotainment +- skipDeployment: false +``` + +The rule will get the Service Detected Name (current name) and it will extract (with a regex) the part of the kubernetes namespace after the "-", so -prod or -e2e, resulting in: +*DataDownloadV1 - prod* +*DataDownloadV1 - e2e* + +Now, services will be easy to identify. + +You can create rules based on any property/metadata. Some other placeholder's eamples: +{Service:DatabaseName} - E2E +{Service:WebServiceName} - {ProcessGroup:Kubernetes:microservice} - {ProcessGroup:Kubernetes:environment} +{Service:DetectedName} - {ProcessGroup:KubernetesContainerName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +{Service:DetectedName} - {ProcessGroup:SpringBootProfileName/[^\\-]*$} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ctns-event-origin/conditional-naming-service/conditional-naming-service.yaml b/BMW-Dynatrace-config/CD_ctns-event-origin/conditional-naming-service/conditional-naming-service.yaml new file mode 100644 index 00000000..2af94786 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ctns-event-origin/conditional-naming-service/conditional-naming-service.yaml @@ -0,0 +1,8 @@ +config: +- CDctns-event-origin: template.json + +CDctns-event-origin: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: ctns-event-origin +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_ctns-event-origin/conditional-naming-service/template.json b/BMW-Dynatrace-config/CD_ctns-event-origin/conditional-naming-service/template.json new file mode 100644 index 00000000..5d4fac56 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ctns-event-origin/conditional-naming-service/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "type": "SERVICE" +} \ 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 index d41c4c77..5f35e5c1 100644 --- 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 @@ -1,30 +1,4 @@ -## 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 configure custom services? -## 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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Custom+Services) page to configure your custom services. \ 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 index 92e734fa..1695924c 100644 --- a/BMW-Dynatrace-config/CD_ctns-event-origin/synthetic-monitor/README.md +++ b/BMW-Dynatrace-config/CD_ctns-event-origin/synthetic-monitor/README.md @@ -1,37 +1,4 @@ -# Synthetic Configuration -To calculate the Availability KPI, a synthetic must be configured. +### How to configure synthetics? -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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Synthetic+Monitors) page to configure your synthetics. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ctns-marketing-api/conditional-naming-processgroup/README.md b/BMW-Dynatrace-config/CD_ctns-marketing-api/conditional-naming-processgroup/README.md new file mode 100644 index 00000000..f94196a5 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ctns-marketing-api/conditional-naming-processgroup/README.md @@ -0,0 +1,67 @@ +### Process Group Detection Rules and Naming + +#### Detection Rule or Naming? + +For the explanation, we're using a real example of the Infotainment application: + +!(PGNaming1)[../../../../img/PGNaming1.PNG] + +Before working with your dashboards and alerting profiles, an important task to do when working with Dynatrace is checking +the structure of your applications (process groups). You can do that clicking under *technologies* and filter using your +application Management Zone. + +In the picture above, there are two Process Groups called bon-information-prod. **If you see duplicated process groups like in** +**this case, you MUST follow this guideline** + +Next step would be to open both process groups and compare the metadata. In that way, you can identify if all process instances are +part of the same application or not. An easy way to do that is asking yourself: how many instances of my application do i have? + +If you have 4 instances in total and you're able to see 2 in one PG and other 2 in other PG it means that **they are part of the ** +**same application** + +Another situation could be that checking on the metadata, then you see that are **two different application** and Dynatrace is just naming +the process group in the same way + +*Same application* +- Problem: Dynatrace is creating two different process groups, what transalates in two separated services for the same application. Instead of +seeing all the traffic in one service, you will have it splitted and it will complicate your monitoring +- Solution: create a process group detection rule. Contact Dynatrace Expert + +*Different application* +- Problem: Dynatrace is just naming in the same way applications that are different. +- Solution: This case is less severe, since it can be fixed with a process group naming rule. + + +What about our example? +!(PGNaming2)[../../../../img/PGNaming2.PNG] +!(PGNaming3)[../../../../img/PGNaming3.PNG] + +Based on the feedback of the infotaiment team, each process group is a different application (microservice) and it's visible in the kubernetes container/workload +within the metadata of each Process Group. + +#### How to create a Process Group Detection Rule +1. Open the *conditional-naming-processgroup.yaml* file and create a rule that looks like this: +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName} +- tag: Infotainment +- skipDeployment: false +``` +The result of the rule will be renaming the PG to this: +``` +bon-information-prod ipa +bon-information-prod rsl +``` + +Other possible placeholders that you can use are for example: +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName/[^\\-]*$} +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesFullPodName/buffet-(.*?)-} +{ProcessGroup:DetectedName} - {HostGroup:Name/[^\\_]*$} +{ProcessGroup:KubernetesNamespace} +{ProcessGroup:CommandLineArgs/.*?\\-f\\s\\/www\\/(.*?)\\/generated\\/httpd\\.conf.*?} + +You can combine different ones. Check the (documentation)[link] for more \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ctns-marketing-api/conditional-naming-processgroup/conditional-naming-processgroup.yaml b/BMW-Dynatrace-config/CD_ctns-marketing-api/conditional-naming-processgroup/conditional-naming-processgroup.yaml new file mode 100644 index 00000000..5dbb5acd --- /dev/null +++ b/BMW-Dynatrace-config/CD_ctns-marketing-api/conditional-naming-processgroup/conditional-naming-processgroup.yaml @@ -0,0 +1,8 @@ +config: +- CDctns-marketing-api: template.json + +CDctns-marketing-api: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: ctns-marketing-api +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_ctns-marketing-api/conditional-naming-processgroup/template.json b/BMW-Dynatrace-config/CD_ctns-marketing-api/conditional-naming-processgroup/template.json new file mode 100644 index 00000000..7c039808 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ctns-marketing-api/conditional-naming-processgroup/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "type": "PROCESS_GROUP" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ctns-marketing-api/conditional-naming-service/README.md b/BMW-Dynatrace-config/CD_ctns-marketing-api/conditional-naming-service/README.md new file mode 100644 index 00000000..c34ef308 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ctns-marketing-api/conditional-naming-service/README.md @@ -0,0 +1,35 @@ +### Service Naming Rules + +A typical case could be that you access to *Transaction & Services* and you find two services that are exactly the same: +*DataDownloadV1* +*DataDownloadV1* + +If you drilldown into the service and you check in the process group, you may have a PROD and a E2E for each service. + +*Note: if you see that both process group are exactly the same, please contact a Dynatrace expert to create a Process* +*Group detection rule* + +In the case the PG are PROD and E2E, then we need to create a rule that looks like this: + +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {Service:DetectedName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +- tag: Infotainment +- skipDeployment: false +``` + +The rule will get the Service Detected Name (current name) and it will extract (with a regex) the part of the kubernetes namespace after the "-", so -prod or -e2e, resulting in: +*DataDownloadV1 - prod* +*DataDownloadV1 - e2e* + +Now, services will be easy to identify. + +You can create rules based on any property/metadata. Some other placeholder's eamples: +{Service:DatabaseName} - E2E +{Service:WebServiceName} - {ProcessGroup:Kubernetes:microservice} - {ProcessGroup:Kubernetes:environment} +{Service:DetectedName} - {ProcessGroup:KubernetesContainerName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +{Service:DetectedName} - {ProcessGroup:SpringBootProfileName/[^\\-]*$} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ctns-marketing-api/conditional-naming-service/conditional-naming-service.yaml b/BMW-Dynatrace-config/CD_ctns-marketing-api/conditional-naming-service/conditional-naming-service.yaml new file mode 100644 index 00000000..5dbb5acd --- /dev/null +++ b/BMW-Dynatrace-config/CD_ctns-marketing-api/conditional-naming-service/conditional-naming-service.yaml @@ -0,0 +1,8 @@ +config: +- CDctns-marketing-api: template.json + +CDctns-marketing-api: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: ctns-marketing-api +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_ctns-marketing-api/conditional-naming-service/template.json b/BMW-Dynatrace-config/CD_ctns-marketing-api/conditional-naming-service/template.json new file mode 100644 index 00000000..5d4fac56 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ctns-marketing-api/conditional-naming-service/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "type": "SERVICE" +} \ 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 index d41c4c77..5f35e5c1 100644 --- 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 @@ -1,30 +1,4 @@ -## 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 configure custom services? -## 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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Custom+Services) page to configure your custom services. \ 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 index 92e734fa..1695924c 100644 --- a/BMW-Dynatrace-config/CD_ctns-marketing-api/synthetic-monitor/README.md +++ b/BMW-Dynatrace-config/CD_ctns-marketing-api/synthetic-monitor/README.md @@ -1,37 +1,4 @@ -# Synthetic Configuration -To calculate the Availability KPI, a synthetic must be configured. +### How to configure synthetics? -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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Synthetic+Monitors) page to configure your synthetics. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ctns-vehicle-api/conditional-naming-processgroup/README.md b/BMW-Dynatrace-config/CD_ctns-vehicle-api/conditional-naming-processgroup/README.md new file mode 100644 index 00000000..f94196a5 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ctns-vehicle-api/conditional-naming-processgroup/README.md @@ -0,0 +1,67 @@ +### Process Group Detection Rules and Naming + +#### Detection Rule or Naming? + +For the explanation, we're using a real example of the Infotainment application: + +!(PGNaming1)[../../../../img/PGNaming1.PNG] + +Before working with your dashboards and alerting profiles, an important task to do when working with Dynatrace is checking +the structure of your applications (process groups). You can do that clicking under *technologies* and filter using your +application Management Zone. + +In the picture above, there are two Process Groups called bon-information-prod. **If you see duplicated process groups like in** +**this case, you MUST follow this guideline** + +Next step would be to open both process groups and compare the metadata. In that way, you can identify if all process instances are +part of the same application or not. An easy way to do that is asking yourself: how many instances of my application do i have? + +If you have 4 instances in total and you're able to see 2 in one PG and other 2 in other PG it means that **they are part of the ** +**same application** + +Another situation could be that checking on the metadata, then you see that are **two different application** and Dynatrace is just naming +the process group in the same way + +*Same application* +- Problem: Dynatrace is creating two different process groups, what transalates in two separated services for the same application. Instead of +seeing all the traffic in one service, you will have it splitted and it will complicate your monitoring +- Solution: create a process group detection rule. Contact Dynatrace Expert + +*Different application* +- Problem: Dynatrace is just naming in the same way applications that are different. +- Solution: This case is less severe, since it can be fixed with a process group naming rule. + + +What about our example? +!(PGNaming2)[../../../../img/PGNaming2.PNG] +!(PGNaming3)[../../../../img/PGNaming3.PNG] + +Based on the feedback of the infotaiment team, each process group is a different application (microservice) and it's visible in the kubernetes container/workload +within the metadata of each Process Group. + +#### How to create a Process Group Detection Rule +1. Open the *conditional-naming-processgroup.yaml* file and create a rule that looks like this: +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName} +- tag: Infotainment +- skipDeployment: false +``` +The result of the rule will be renaming the PG to this: +``` +bon-information-prod ipa +bon-information-prod rsl +``` + +Other possible placeholders that you can use are for example: +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName/[^\\-]*$} +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesFullPodName/buffet-(.*?)-} +{ProcessGroup:DetectedName} - {HostGroup:Name/[^\\_]*$} +{ProcessGroup:KubernetesNamespace} +{ProcessGroup:CommandLineArgs/.*?\\-f\\s\\/www\\/(.*?)\\/generated\\/httpd\\.conf.*?} + +You can combine different ones. Check the (documentation)[link] for more \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ctns-vehicle-api/conditional-naming-processgroup/conditional-naming-processgroup.yaml b/BMW-Dynatrace-config/CD_ctns-vehicle-api/conditional-naming-processgroup/conditional-naming-processgroup.yaml new file mode 100644 index 00000000..ceb4649c --- /dev/null +++ b/BMW-Dynatrace-config/CD_ctns-vehicle-api/conditional-naming-processgroup/conditional-naming-processgroup.yaml @@ -0,0 +1,8 @@ +config: +- CDctns-vehicle-api: template.json + +CDctns-vehicle-api: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: ctns-vehicle-api +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_ctns-vehicle-api/conditional-naming-processgroup/template.json b/BMW-Dynatrace-config/CD_ctns-vehicle-api/conditional-naming-processgroup/template.json new file mode 100644 index 00000000..7c039808 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ctns-vehicle-api/conditional-naming-processgroup/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "type": "PROCESS_GROUP" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ctns-vehicle-api/conditional-naming-service/README.md b/BMW-Dynatrace-config/CD_ctns-vehicle-api/conditional-naming-service/README.md new file mode 100644 index 00000000..c34ef308 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ctns-vehicle-api/conditional-naming-service/README.md @@ -0,0 +1,35 @@ +### Service Naming Rules + +A typical case could be that you access to *Transaction & Services* and you find two services that are exactly the same: +*DataDownloadV1* +*DataDownloadV1* + +If you drilldown into the service and you check in the process group, you may have a PROD and a E2E for each service. + +*Note: if you see that both process group are exactly the same, please contact a Dynatrace expert to create a Process* +*Group detection rule* + +In the case the PG are PROD and E2E, then we need to create a rule that looks like this: + +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {Service:DetectedName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +- tag: Infotainment +- skipDeployment: false +``` + +The rule will get the Service Detected Name (current name) and it will extract (with a regex) the part of the kubernetes namespace after the "-", so -prod or -e2e, resulting in: +*DataDownloadV1 - prod* +*DataDownloadV1 - e2e* + +Now, services will be easy to identify. + +You can create rules based on any property/metadata. Some other placeholder's eamples: +{Service:DatabaseName} - E2E +{Service:WebServiceName} - {ProcessGroup:Kubernetes:microservice} - {ProcessGroup:Kubernetes:environment} +{Service:DetectedName} - {ProcessGroup:KubernetesContainerName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +{Service:DetectedName} - {ProcessGroup:SpringBootProfileName/[^\\-]*$} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ctns-vehicle-api/conditional-naming-service/conditional-naming-service.yaml b/BMW-Dynatrace-config/CD_ctns-vehicle-api/conditional-naming-service/conditional-naming-service.yaml new file mode 100644 index 00000000..ceb4649c --- /dev/null +++ b/BMW-Dynatrace-config/CD_ctns-vehicle-api/conditional-naming-service/conditional-naming-service.yaml @@ -0,0 +1,8 @@ +config: +- CDctns-vehicle-api: template.json + +CDctns-vehicle-api: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: ctns-vehicle-api +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_ctns-vehicle-api/conditional-naming-service/template.json b/BMW-Dynatrace-config/CD_ctns-vehicle-api/conditional-naming-service/template.json new file mode 100644 index 00000000..5d4fac56 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ctns-vehicle-api/conditional-naming-service/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "type": "SERVICE" +} \ 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 index d41c4c77..5f35e5c1 100644 --- 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 @@ -1,30 +1,4 @@ -## 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 configure custom services? -## 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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Custom+Services) page to configure your custom services. \ 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 index 92e734fa..1695924c 100644 --- a/BMW-Dynatrace-config/CD_ctns-vehicle-api/synthetic-monitor/README.md +++ b/BMW-Dynatrace-config/CD_ctns-vehicle-api/synthetic-monitor/README.md @@ -1,37 +1,4 @@ -# Synthetic Configuration -To calculate the Availability KPI, a synthetic must be configured. +### How to configure synthetics? -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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Synthetic+Monitors) page to configure your synthetics. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_current-driver-service/conditional-naming-processgroup/README.md b/BMW-Dynatrace-config/CD_current-driver-service/conditional-naming-processgroup/README.md new file mode 100644 index 00000000..f94196a5 --- /dev/null +++ b/BMW-Dynatrace-config/CD_current-driver-service/conditional-naming-processgroup/README.md @@ -0,0 +1,67 @@ +### Process Group Detection Rules and Naming + +#### Detection Rule or Naming? + +For the explanation, we're using a real example of the Infotainment application: + +!(PGNaming1)[../../../../img/PGNaming1.PNG] + +Before working with your dashboards and alerting profiles, an important task to do when working with Dynatrace is checking +the structure of your applications (process groups). You can do that clicking under *technologies* and filter using your +application Management Zone. + +In the picture above, there are two Process Groups called bon-information-prod. **If you see duplicated process groups like in** +**this case, you MUST follow this guideline** + +Next step would be to open both process groups and compare the metadata. In that way, you can identify if all process instances are +part of the same application or not. An easy way to do that is asking yourself: how many instances of my application do i have? + +If you have 4 instances in total and you're able to see 2 in one PG and other 2 in other PG it means that **they are part of the ** +**same application** + +Another situation could be that checking on the metadata, then you see that are **two different application** and Dynatrace is just naming +the process group in the same way + +*Same application* +- Problem: Dynatrace is creating two different process groups, what transalates in two separated services for the same application. Instead of +seeing all the traffic in one service, you will have it splitted and it will complicate your monitoring +- Solution: create a process group detection rule. Contact Dynatrace Expert + +*Different application* +- Problem: Dynatrace is just naming in the same way applications that are different. +- Solution: This case is less severe, since it can be fixed with a process group naming rule. + + +What about our example? +!(PGNaming2)[../../../../img/PGNaming2.PNG] +!(PGNaming3)[../../../../img/PGNaming3.PNG] + +Based on the feedback of the infotaiment team, each process group is a different application (microservice) and it's visible in the kubernetes container/workload +within the metadata of each Process Group. + +#### How to create a Process Group Detection Rule +1. Open the *conditional-naming-processgroup.yaml* file and create a rule that looks like this: +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName} +- tag: Infotainment +- skipDeployment: false +``` +The result of the rule will be renaming the PG to this: +``` +bon-information-prod ipa +bon-information-prod rsl +``` + +Other possible placeholders that you can use are for example: +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName/[^\\-]*$} +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesFullPodName/buffet-(.*?)-} +{ProcessGroup:DetectedName} - {HostGroup:Name/[^\\_]*$} +{ProcessGroup:KubernetesNamespace} +{ProcessGroup:CommandLineArgs/.*?\\-f\\s\\/www\\/(.*?)\\/generated\\/httpd\\.conf.*?} + +You can combine different ones. Check the (documentation)[link] for more \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_current-driver-service/conditional-naming-processgroup/conditional-naming-processgroup.yaml b/BMW-Dynatrace-config/CD_current-driver-service/conditional-naming-processgroup/conditional-naming-processgroup.yaml new file mode 100644 index 00000000..b2ec58f8 --- /dev/null +++ b/BMW-Dynatrace-config/CD_current-driver-service/conditional-naming-processgroup/conditional-naming-processgroup.yaml @@ -0,0 +1,8 @@ +config: +- CDcurrent-driver-service: template.json + +CDcurrent-driver-service: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: current-driver-service +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_current-driver-service/conditional-naming-processgroup/template.json b/BMW-Dynatrace-config/CD_current-driver-service/conditional-naming-processgroup/template.json new file mode 100644 index 00000000..7c039808 --- /dev/null +++ b/BMW-Dynatrace-config/CD_current-driver-service/conditional-naming-processgroup/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "type": "PROCESS_GROUP" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_current-driver-service/conditional-naming-service/README.md b/BMW-Dynatrace-config/CD_current-driver-service/conditional-naming-service/README.md new file mode 100644 index 00000000..c34ef308 --- /dev/null +++ b/BMW-Dynatrace-config/CD_current-driver-service/conditional-naming-service/README.md @@ -0,0 +1,35 @@ +### Service Naming Rules + +A typical case could be that you access to *Transaction & Services* and you find two services that are exactly the same: +*DataDownloadV1* +*DataDownloadV1* + +If you drilldown into the service and you check in the process group, you may have a PROD and a E2E for each service. + +*Note: if you see that both process group are exactly the same, please contact a Dynatrace expert to create a Process* +*Group detection rule* + +In the case the PG are PROD and E2E, then we need to create a rule that looks like this: + +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {Service:DetectedName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +- tag: Infotainment +- skipDeployment: false +``` + +The rule will get the Service Detected Name (current name) and it will extract (with a regex) the part of the kubernetes namespace after the "-", so -prod or -e2e, resulting in: +*DataDownloadV1 - prod* +*DataDownloadV1 - e2e* + +Now, services will be easy to identify. + +You can create rules based on any property/metadata. Some other placeholder's eamples: +{Service:DatabaseName} - E2E +{Service:WebServiceName} - {ProcessGroup:Kubernetes:microservice} - {ProcessGroup:Kubernetes:environment} +{Service:DetectedName} - {ProcessGroup:KubernetesContainerName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +{Service:DetectedName} - {ProcessGroup:SpringBootProfileName/[^\\-]*$} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_current-driver-service/conditional-naming-service/conditional-naming-service.yaml b/BMW-Dynatrace-config/CD_current-driver-service/conditional-naming-service/conditional-naming-service.yaml new file mode 100644 index 00000000..b2ec58f8 --- /dev/null +++ b/BMW-Dynatrace-config/CD_current-driver-service/conditional-naming-service/conditional-naming-service.yaml @@ -0,0 +1,8 @@ +config: +- CDcurrent-driver-service: template.json + +CDcurrent-driver-service: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: current-driver-service +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_current-driver-service/conditional-naming-service/template.json b/BMW-Dynatrace-config/CD_current-driver-service/conditional-naming-service/template.json new file mode 100644 index 00000000..5d4fac56 --- /dev/null +++ b/BMW-Dynatrace-config/CD_current-driver-service/conditional-naming-service/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "type": "SERVICE" +} \ 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 index d41c4c77..5f35e5c1 100644 --- 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 @@ -1,30 +1,4 @@ -## 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 configure custom services? -## 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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Custom+Services) page to configure your custom services. \ 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 index 92e734fa..1695924c 100644 --- a/BMW-Dynatrace-config/CD_current-driver-service/synthetic-monitor/README.md +++ b/BMW-Dynatrace-config/CD_current-driver-service/synthetic-monitor/README.md @@ -1,37 +1,4 @@ -# Synthetic Configuration -To calculate the Availability KPI, a synthetic must be configured. +### How to configure synthetics? -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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Synthetic+Monitors) page to configure your synthetics. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_data-deletion-processor/conditional-naming-processgroup/README.md b/BMW-Dynatrace-config/CD_data-deletion-processor/conditional-naming-processgroup/README.md new file mode 100644 index 00000000..f94196a5 --- /dev/null +++ b/BMW-Dynatrace-config/CD_data-deletion-processor/conditional-naming-processgroup/README.md @@ -0,0 +1,67 @@ +### Process Group Detection Rules and Naming + +#### Detection Rule or Naming? + +For the explanation, we're using a real example of the Infotainment application: + +!(PGNaming1)[../../../../img/PGNaming1.PNG] + +Before working with your dashboards and alerting profiles, an important task to do when working with Dynatrace is checking +the structure of your applications (process groups). You can do that clicking under *technologies* and filter using your +application Management Zone. + +In the picture above, there are two Process Groups called bon-information-prod. **If you see duplicated process groups like in** +**this case, you MUST follow this guideline** + +Next step would be to open both process groups and compare the metadata. In that way, you can identify if all process instances are +part of the same application or not. An easy way to do that is asking yourself: how many instances of my application do i have? + +If you have 4 instances in total and you're able to see 2 in one PG and other 2 in other PG it means that **they are part of the ** +**same application** + +Another situation could be that checking on the metadata, then you see that are **two different application** and Dynatrace is just naming +the process group in the same way + +*Same application* +- Problem: Dynatrace is creating two different process groups, what transalates in two separated services for the same application. Instead of +seeing all the traffic in one service, you will have it splitted and it will complicate your monitoring +- Solution: create a process group detection rule. Contact Dynatrace Expert + +*Different application* +- Problem: Dynatrace is just naming in the same way applications that are different. +- Solution: This case is less severe, since it can be fixed with a process group naming rule. + + +What about our example? +!(PGNaming2)[../../../../img/PGNaming2.PNG] +!(PGNaming3)[../../../../img/PGNaming3.PNG] + +Based on the feedback of the infotaiment team, each process group is a different application (microservice) and it's visible in the kubernetes container/workload +within the metadata of each Process Group. + +#### How to create a Process Group Detection Rule +1. Open the *conditional-naming-processgroup.yaml* file and create a rule that looks like this: +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName} +- tag: Infotainment +- skipDeployment: false +``` +The result of the rule will be renaming the PG to this: +``` +bon-information-prod ipa +bon-information-prod rsl +``` + +Other possible placeholders that you can use are for example: +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName/[^\\-]*$} +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesFullPodName/buffet-(.*?)-} +{ProcessGroup:DetectedName} - {HostGroup:Name/[^\\_]*$} +{ProcessGroup:KubernetesNamespace} +{ProcessGroup:CommandLineArgs/.*?\\-f\\s\\/www\\/(.*?)\\/generated\\/httpd\\.conf.*?} + +You can combine different ones. Check the (documentation)[link] for more \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_data-deletion-processor/conditional-naming-processgroup/conditional-naming-processgroup.yaml b/BMW-Dynatrace-config/CD_data-deletion-processor/conditional-naming-processgroup/conditional-naming-processgroup.yaml new file mode 100644 index 00000000..52988a86 --- /dev/null +++ b/BMW-Dynatrace-config/CD_data-deletion-processor/conditional-naming-processgroup/conditional-naming-processgroup.yaml @@ -0,0 +1,8 @@ +config: +- CDdata-deletion-processor: template.json + +CDdata-deletion-processor: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: data-deletion-processor +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_data-deletion-processor/conditional-naming-processgroup/template.json b/BMW-Dynatrace-config/CD_data-deletion-processor/conditional-naming-processgroup/template.json new file mode 100644 index 00000000..7c039808 --- /dev/null +++ b/BMW-Dynatrace-config/CD_data-deletion-processor/conditional-naming-processgroup/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "type": "PROCESS_GROUP" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_data-deletion-processor/conditional-naming-service/README.md b/BMW-Dynatrace-config/CD_data-deletion-processor/conditional-naming-service/README.md new file mode 100644 index 00000000..c34ef308 --- /dev/null +++ b/BMW-Dynatrace-config/CD_data-deletion-processor/conditional-naming-service/README.md @@ -0,0 +1,35 @@ +### Service Naming Rules + +A typical case could be that you access to *Transaction & Services* and you find two services that are exactly the same: +*DataDownloadV1* +*DataDownloadV1* + +If you drilldown into the service and you check in the process group, you may have a PROD and a E2E for each service. + +*Note: if you see that both process group are exactly the same, please contact a Dynatrace expert to create a Process* +*Group detection rule* + +In the case the PG are PROD and E2E, then we need to create a rule that looks like this: + +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {Service:DetectedName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +- tag: Infotainment +- skipDeployment: false +``` + +The rule will get the Service Detected Name (current name) and it will extract (with a regex) the part of the kubernetes namespace after the "-", so -prod or -e2e, resulting in: +*DataDownloadV1 - prod* +*DataDownloadV1 - e2e* + +Now, services will be easy to identify. + +You can create rules based on any property/metadata. Some other placeholder's eamples: +{Service:DatabaseName} - E2E +{Service:WebServiceName} - {ProcessGroup:Kubernetes:microservice} - {ProcessGroup:Kubernetes:environment} +{Service:DetectedName} - {ProcessGroup:KubernetesContainerName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +{Service:DetectedName} - {ProcessGroup:SpringBootProfileName/[^\\-]*$} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_data-deletion-processor/conditional-naming-service/conditional-naming-service.yaml b/BMW-Dynatrace-config/CD_data-deletion-processor/conditional-naming-service/conditional-naming-service.yaml new file mode 100644 index 00000000..52988a86 --- /dev/null +++ b/BMW-Dynatrace-config/CD_data-deletion-processor/conditional-naming-service/conditional-naming-service.yaml @@ -0,0 +1,8 @@ +config: +- CDdata-deletion-processor: template.json + +CDdata-deletion-processor: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: data-deletion-processor +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_data-deletion-processor/conditional-naming-service/template.json b/BMW-Dynatrace-config/CD_data-deletion-processor/conditional-naming-service/template.json new file mode 100644 index 00000000..5d4fac56 --- /dev/null +++ b/BMW-Dynatrace-config/CD_data-deletion-processor/conditional-naming-service/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "type": "SERVICE" +} \ 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 index d41c4c77..5f35e5c1 100644 --- 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 @@ -1,30 +1,4 @@ -## 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 configure custom services? -## 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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Custom+Services) page to configure your custom services. \ 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 index 92e734fa..1695924c 100644 --- a/BMW-Dynatrace-config/CD_data-deletion-processor/synthetic-monitor/README.md +++ b/BMW-Dynatrace-config/CD_data-deletion-processor/synthetic-monitor/README.md @@ -1,37 +1,4 @@ -# Synthetic Configuration -To calculate the Availability KPI, a synthetic must be configured. +### How to configure synthetics? -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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Synthetic+Monitors) page to configure your synthetics. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_dealer-comms-provider-service/conditional-naming-processgroup/README.md b/BMW-Dynatrace-config/CD_dealer-comms-provider-service/conditional-naming-processgroup/README.md new file mode 100644 index 00000000..f94196a5 --- /dev/null +++ b/BMW-Dynatrace-config/CD_dealer-comms-provider-service/conditional-naming-processgroup/README.md @@ -0,0 +1,67 @@ +### Process Group Detection Rules and Naming + +#### Detection Rule or Naming? + +For the explanation, we're using a real example of the Infotainment application: + +!(PGNaming1)[../../../../img/PGNaming1.PNG] + +Before working with your dashboards and alerting profiles, an important task to do when working with Dynatrace is checking +the structure of your applications (process groups). You can do that clicking under *technologies* and filter using your +application Management Zone. + +In the picture above, there are two Process Groups called bon-information-prod. **If you see duplicated process groups like in** +**this case, you MUST follow this guideline** + +Next step would be to open both process groups and compare the metadata. In that way, you can identify if all process instances are +part of the same application or not. An easy way to do that is asking yourself: how many instances of my application do i have? + +If you have 4 instances in total and you're able to see 2 in one PG and other 2 in other PG it means that **they are part of the ** +**same application** + +Another situation could be that checking on the metadata, then you see that are **two different application** and Dynatrace is just naming +the process group in the same way + +*Same application* +- Problem: Dynatrace is creating two different process groups, what transalates in two separated services for the same application. Instead of +seeing all the traffic in one service, you will have it splitted and it will complicate your monitoring +- Solution: create a process group detection rule. Contact Dynatrace Expert + +*Different application* +- Problem: Dynatrace is just naming in the same way applications that are different. +- Solution: This case is less severe, since it can be fixed with a process group naming rule. + + +What about our example? +!(PGNaming2)[../../../../img/PGNaming2.PNG] +!(PGNaming3)[../../../../img/PGNaming3.PNG] + +Based on the feedback of the infotaiment team, each process group is a different application (microservice) and it's visible in the kubernetes container/workload +within the metadata of each Process Group. + +#### How to create a Process Group Detection Rule +1. Open the *conditional-naming-processgroup.yaml* file and create a rule that looks like this: +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName} +- tag: Infotainment +- skipDeployment: false +``` +The result of the rule will be renaming the PG to this: +``` +bon-information-prod ipa +bon-information-prod rsl +``` + +Other possible placeholders that you can use are for example: +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName/[^\\-]*$} +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesFullPodName/buffet-(.*?)-} +{ProcessGroup:DetectedName} - {HostGroup:Name/[^\\_]*$} +{ProcessGroup:KubernetesNamespace} +{ProcessGroup:CommandLineArgs/.*?\\-f\\s\\/www\\/(.*?)\\/generated\\/httpd\\.conf.*?} + +You can combine different ones. Check the (documentation)[link] for more \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_dealer-comms-provider-service/conditional-naming-processgroup/conditional-naming-processgroup.yaml b/BMW-Dynatrace-config/CD_dealer-comms-provider-service/conditional-naming-processgroup/conditional-naming-processgroup.yaml new file mode 100644 index 00000000..a7f361d9 --- /dev/null +++ b/BMW-Dynatrace-config/CD_dealer-comms-provider-service/conditional-naming-processgroup/conditional-naming-processgroup.yaml @@ -0,0 +1,8 @@ +config: +- CDdealer-comms-provider-service: template.json + +CDdealer-comms-provider-service: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: dealer-comms-provider-service +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_dealer-comms-provider-service/conditional-naming-processgroup/template.json b/BMW-Dynatrace-config/CD_dealer-comms-provider-service/conditional-naming-processgroup/template.json new file mode 100644 index 00000000..7c039808 --- /dev/null +++ b/BMW-Dynatrace-config/CD_dealer-comms-provider-service/conditional-naming-processgroup/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "type": "PROCESS_GROUP" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_dealer-comms-provider-service/conditional-naming-service/README.md b/BMW-Dynatrace-config/CD_dealer-comms-provider-service/conditional-naming-service/README.md new file mode 100644 index 00000000..c34ef308 --- /dev/null +++ b/BMW-Dynatrace-config/CD_dealer-comms-provider-service/conditional-naming-service/README.md @@ -0,0 +1,35 @@ +### Service Naming Rules + +A typical case could be that you access to *Transaction & Services* and you find two services that are exactly the same: +*DataDownloadV1* +*DataDownloadV1* + +If you drilldown into the service and you check in the process group, you may have a PROD and a E2E for each service. + +*Note: if you see that both process group are exactly the same, please contact a Dynatrace expert to create a Process* +*Group detection rule* + +In the case the PG are PROD and E2E, then we need to create a rule that looks like this: + +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {Service:DetectedName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +- tag: Infotainment +- skipDeployment: false +``` + +The rule will get the Service Detected Name (current name) and it will extract (with a regex) the part of the kubernetes namespace after the "-", so -prod or -e2e, resulting in: +*DataDownloadV1 - prod* +*DataDownloadV1 - e2e* + +Now, services will be easy to identify. + +You can create rules based on any property/metadata. Some other placeholder's eamples: +{Service:DatabaseName} - E2E +{Service:WebServiceName} - {ProcessGroup:Kubernetes:microservice} - {ProcessGroup:Kubernetes:environment} +{Service:DetectedName} - {ProcessGroup:KubernetesContainerName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +{Service:DetectedName} - {ProcessGroup:SpringBootProfileName/[^\\-]*$} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_dealer-comms-provider-service/conditional-naming-service/conditional-naming-service.yaml b/BMW-Dynatrace-config/CD_dealer-comms-provider-service/conditional-naming-service/conditional-naming-service.yaml new file mode 100644 index 00000000..a7f361d9 --- /dev/null +++ b/BMW-Dynatrace-config/CD_dealer-comms-provider-service/conditional-naming-service/conditional-naming-service.yaml @@ -0,0 +1,8 @@ +config: +- CDdealer-comms-provider-service: template.json + +CDdealer-comms-provider-service: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: dealer-comms-provider-service +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_dealer-comms-provider-service/conditional-naming-service/template.json b/BMW-Dynatrace-config/CD_dealer-comms-provider-service/conditional-naming-service/template.json new file mode 100644 index 00000000..5d4fac56 --- /dev/null +++ b/BMW-Dynatrace-config/CD_dealer-comms-provider-service/conditional-naming-service/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "type": "SERVICE" +} \ 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 index d41c4c77..5f35e5c1 100644 --- 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 @@ -1,30 +1,4 @@ -## 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 configure custom services? -## 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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Custom+Services) page to configure your custom services. \ 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 index 92e734fa..1695924c 100644 --- 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 @@ -1,37 +1,4 @@ -# Synthetic Configuration -To calculate the Availability KPI, a synthetic must be configured. +### How to configure synthetics? -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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Synthetic+Monitors) page to configure your synthetics. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_dealer-data-service/conditional-naming-processgroup/README.md b/BMW-Dynatrace-config/CD_dealer-data-service/conditional-naming-processgroup/README.md new file mode 100644 index 00000000..f94196a5 --- /dev/null +++ b/BMW-Dynatrace-config/CD_dealer-data-service/conditional-naming-processgroup/README.md @@ -0,0 +1,67 @@ +### Process Group Detection Rules and Naming + +#### Detection Rule or Naming? + +For the explanation, we're using a real example of the Infotainment application: + +!(PGNaming1)[../../../../img/PGNaming1.PNG] + +Before working with your dashboards and alerting profiles, an important task to do when working with Dynatrace is checking +the structure of your applications (process groups). You can do that clicking under *technologies* and filter using your +application Management Zone. + +In the picture above, there are two Process Groups called bon-information-prod. **If you see duplicated process groups like in** +**this case, you MUST follow this guideline** + +Next step would be to open both process groups and compare the metadata. In that way, you can identify if all process instances are +part of the same application or not. An easy way to do that is asking yourself: how many instances of my application do i have? + +If you have 4 instances in total and you're able to see 2 in one PG and other 2 in other PG it means that **they are part of the ** +**same application** + +Another situation could be that checking on the metadata, then you see that are **two different application** and Dynatrace is just naming +the process group in the same way + +*Same application* +- Problem: Dynatrace is creating two different process groups, what transalates in two separated services for the same application. Instead of +seeing all the traffic in one service, you will have it splitted and it will complicate your monitoring +- Solution: create a process group detection rule. Contact Dynatrace Expert + +*Different application* +- Problem: Dynatrace is just naming in the same way applications that are different. +- Solution: This case is less severe, since it can be fixed with a process group naming rule. + + +What about our example? +!(PGNaming2)[../../../../img/PGNaming2.PNG] +!(PGNaming3)[../../../../img/PGNaming3.PNG] + +Based on the feedback of the infotaiment team, each process group is a different application (microservice) and it's visible in the kubernetes container/workload +within the metadata of each Process Group. + +#### How to create a Process Group Detection Rule +1. Open the *conditional-naming-processgroup.yaml* file and create a rule that looks like this: +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName} +- tag: Infotainment +- skipDeployment: false +``` +The result of the rule will be renaming the PG to this: +``` +bon-information-prod ipa +bon-information-prod rsl +``` + +Other possible placeholders that you can use are for example: +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName/[^\\-]*$} +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesFullPodName/buffet-(.*?)-} +{ProcessGroup:DetectedName} - {HostGroup:Name/[^\\_]*$} +{ProcessGroup:KubernetesNamespace} +{ProcessGroup:CommandLineArgs/.*?\\-f\\s\\/www\\/(.*?)\\/generated\\/httpd\\.conf.*?} + +You can combine different ones. Check the (documentation)[link] for more \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_dealer-data-service/conditional-naming-processgroup/conditional-naming-processgroup.yaml b/BMW-Dynatrace-config/CD_dealer-data-service/conditional-naming-processgroup/conditional-naming-processgroup.yaml new file mode 100644 index 00000000..8f3ba023 --- /dev/null +++ b/BMW-Dynatrace-config/CD_dealer-data-service/conditional-naming-processgroup/conditional-naming-processgroup.yaml @@ -0,0 +1,8 @@ +config: +- CDdealer-data-service: template.json + +CDdealer-data-service: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: dealer-data-service +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_dealer-data-service/conditional-naming-processgroup/template.json b/BMW-Dynatrace-config/CD_dealer-data-service/conditional-naming-processgroup/template.json new file mode 100644 index 00000000..7c039808 --- /dev/null +++ b/BMW-Dynatrace-config/CD_dealer-data-service/conditional-naming-processgroup/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "type": "PROCESS_GROUP" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_dealer-data-service/conditional-naming-service/README.md b/BMW-Dynatrace-config/CD_dealer-data-service/conditional-naming-service/README.md new file mode 100644 index 00000000..c34ef308 --- /dev/null +++ b/BMW-Dynatrace-config/CD_dealer-data-service/conditional-naming-service/README.md @@ -0,0 +1,35 @@ +### Service Naming Rules + +A typical case could be that you access to *Transaction & Services* and you find two services that are exactly the same: +*DataDownloadV1* +*DataDownloadV1* + +If you drilldown into the service and you check in the process group, you may have a PROD and a E2E for each service. + +*Note: if you see that both process group are exactly the same, please contact a Dynatrace expert to create a Process* +*Group detection rule* + +In the case the PG are PROD and E2E, then we need to create a rule that looks like this: + +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {Service:DetectedName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +- tag: Infotainment +- skipDeployment: false +``` + +The rule will get the Service Detected Name (current name) and it will extract (with a regex) the part of the kubernetes namespace after the "-", so -prod or -e2e, resulting in: +*DataDownloadV1 - prod* +*DataDownloadV1 - e2e* + +Now, services will be easy to identify. + +You can create rules based on any property/metadata. Some other placeholder's eamples: +{Service:DatabaseName} - E2E +{Service:WebServiceName} - {ProcessGroup:Kubernetes:microservice} - {ProcessGroup:Kubernetes:environment} +{Service:DetectedName} - {ProcessGroup:KubernetesContainerName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +{Service:DetectedName} - {ProcessGroup:SpringBootProfileName/[^\\-]*$} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_dealer-data-service/conditional-naming-service/conditional-naming-service.yaml b/BMW-Dynatrace-config/CD_dealer-data-service/conditional-naming-service/conditional-naming-service.yaml new file mode 100644 index 00000000..8f3ba023 --- /dev/null +++ b/BMW-Dynatrace-config/CD_dealer-data-service/conditional-naming-service/conditional-naming-service.yaml @@ -0,0 +1,8 @@ +config: +- CDdealer-data-service: template.json + +CDdealer-data-service: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: dealer-data-service +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_dealer-data-service/conditional-naming-service/template.json b/BMW-Dynatrace-config/CD_dealer-data-service/conditional-naming-service/template.json new file mode 100644 index 00000000..5d4fac56 --- /dev/null +++ b/BMW-Dynatrace-config/CD_dealer-data-service/conditional-naming-service/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "type": "SERVICE" +} \ 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 index d41c4c77..5f35e5c1 100644 --- 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 @@ -1,30 +1,4 @@ -## 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 configure custom services? -## 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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Custom+Services) page to configure your custom services. \ 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 index 92e734fa..1695924c 100644 --- a/BMW-Dynatrace-config/CD_dealer-data-service/synthetic-monitor/README.md +++ b/BMW-Dynatrace-config/CD_dealer-data-service/synthetic-monitor/README.md @@ -1,37 +1,4 @@ -# Synthetic Configuration -To calculate the Availability KPI, a synthetic must be configured. +### How to configure synthetics? -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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Synthetic+Monitors) page to configure your synthetics. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_dealer-payments-invoice-service/conditional-naming-processgroup/README.md b/BMW-Dynatrace-config/CD_dealer-payments-invoice-service/conditional-naming-processgroup/README.md new file mode 100644 index 00000000..f94196a5 --- /dev/null +++ b/BMW-Dynatrace-config/CD_dealer-payments-invoice-service/conditional-naming-processgroup/README.md @@ -0,0 +1,67 @@ +### Process Group Detection Rules and Naming + +#### Detection Rule or Naming? + +For the explanation, we're using a real example of the Infotainment application: + +!(PGNaming1)[../../../../img/PGNaming1.PNG] + +Before working with your dashboards and alerting profiles, an important task to do when working with Dynatrace is checking +the structure of your applications (process groups). You can do that clicking under *technologies* and filter using your +application Management Zone. + +In the picture above, there are two Process Groups called bon-information-prod. **If you see duplicated process groups like in** +**this case, you MUST follow this guideline** + +Next step would be to open both process groups and compare the metadata. In that way, you can identify if all process instances are +part of the same application or not. An easy way to do that is asking yourself: how many instances of my application do i have? + +If you have 4 instances in total and you're able to see 2 in one PG and other 2 in other PG it means that **they are part of the ** +**same application** + +Another situation could be that checking on the metadata, then you see that are **two different application** and Dynatrace is just naming +the process group in the same way + +*Same application* +- Problem: Dynatrace is creating two different process groups, what transalates in two separated services for the same application. Instead of +seeing all the traffic in one service, you will have it splitted and it will complicate your monitoring +- Solution: create a process group detection rule. Contact Dynatrace Expert + +*Different application* +- Problem: Dynatrace is just naming in the same way applications that are different. +- Solution: This case is less severe, since it can be fixed with a process group naming rule. + + +What about our example? +!(PGNaming2)[../../../../img/PGNaming2.PNG] +!(PGNaming3)[../../../../img/PGNaming3.PNG] + +Based on the feedback of the infotaiment team, each process group is a different application (microservice) and it's visible in the kubernetes container/workload +within the metadata of each Process Group. + +#### How to create a Process Group Detection Rule +1. Open the *conditional-naming-processgroup.yaml* file and create a rule that looks like this: +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName} +- tag: Infotainment +- skipDeployment: false +``` +The result of the rule will be renaming the PG to this: +``` +bon-information-prod ipa +bon-information-prod rsl +``` + +Other possible placeholders that you can use are for example: +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName/[^\\-]*$} +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesFullPodName/buffet-(.*?)-} +{ProcessGroup:DetectedName} - {HostGroup:Name/[^\\_]*$} +{ProcessGroup:KubernetesNamespace} +{ProcessGroup:CommandLineArgs/.*?\\-f\\s\\/www\\/(.*?)\\/generated\\/httpd\\.conf.*?} + +You can combine different ones. Check the (documentation)[link] for more \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_dealer-payments-invoice-service/conditional-naming-processgroup/conditional-naming-processgroup.yaml b/BMW-Dynatrace-config/CD_dealer-payments-invoice-service/conditional-naming-processgroup/conditional-naming-processgroup.yaml new file mode 100644 index 00000000..c62295fb --- /dev/null +++ b/BMW-Dynatrace-config/CD_dealer-payments-invoice-service/conditional-naming-processgroup/conditional-naming-processgroup.yaml @@ -0,0 +1,8 @@ +config: +- CDdealer-payments-invoice-service: template.json + +CDdealer-payments-invoice-service: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: dealer-payments-invoice-service +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_dealer-payments-invoice-service/conditional-naming-processgroup/template.json b/BMW-Dynatrace-config/CD_dealer-payments-invoice-service/conditional-naming-processgroup/template.json new file mode 100644 index 00000000..7c039808 --- /dev/null +++ b/BMW-Dynatrace-config/CD_dealer-payments-invoice-service/conditional-naming-processgroup/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "type": "PROCESS_GROUP" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_dealer-payments-invoice-service/conditional-naming-service/README.md b/BMW-Dynatrace-config/CD_dealer-payments-invoice-service/conditional-naming-service/README.md new file mode 100644 index 00000000..c34ef308 --- /dev/null +++ b/BMW-Dynatrace-config/CD_dealer-payments-invoice-service/conditional-naming-service/README.md @@ -0,0 +1,35 @@ +### Service Naming Rules + +A typical case could be that you access to *Transaction & Services* and you find two services that are exactly the same: +*DataDownloadV1* +*DataDownloadV1* + +If you drilldown into the service and you check in the process group, you may have a PROD and a E2E for each service. + +*Note: if you see that both process group are exactly the same, please contact a Dynatrace expert to create a Process* +*Group detection rule* + +In the case the PG are PROD and E2E, then we need to create a rule that looks like this: + +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {Service:DetectedName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +- tag: Infotainment +- skipDeployment: false +``` + +The rule will get the Service Detected Name (current name) and it will extract (with a regex) the part of the kubernetes namespace after the "-", so -prod or -e2e, resulting in: +*DataDownloadV1 - prod* +*DataDownloadV1 - e2e* + +Now, services will be easy to identify. + +You can create rules based on any property/metadata. Some other placeholder's eamples: +{Service:DatabaseName} - E2E +{Service:WebServiceName} - {ProcessGroup:Kubernetes:microservice} - {ProcessGroup:Kubernetes:environment} +{Service:DetectedName} - {ProcessGroup:KubernetesContainerName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +{Service:DetectedName} - {ProcessGroup:SpringBootProfileName/[^\\-]*$} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_dealer-payments-invoice-service/conditional-naming-service/conditional-naming-service.yaml b/BMW-Dynatrace-config/CD_dealer-payments-invoice-service/conditional-naming-service/conditional-naming-service.yaml new file mode 100644 index 00000000..c62295fb --- /dev/null +++ b/BMW-Dynatrace-config/CD_dealer-payments-invoice-service/conditional-naming-service/conditional-naming-service.yaml @@ -0,0 +1,8 @@ +config: +- CDdealer-payments-invoice-service: template.json + +CDdealer-payments-invoice-service: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: dealer-payments-invoice-service +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_dealer-payments-invoice-service/conditional-naming-service/template.json b/BMW-Dynatrace-config/CD_dealer-payments-invoice-service/conditional-naming-service/template.json new file mode 100644 index 00000000..5d4fac56 --- /dev/null +++ b/BMW-Dynatrace-config/CD_dealer-payments-invoice-service/conditional-naming-service/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "type": "SERVICE" +} \ 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 index d41c4c77..5f35e5c1 100644 --- 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 @@ -1,30 +1,4 @@ -## 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 configure custom services? -## 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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Custom+Services) page to configure your custom services. \ 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 index 92e734fa..1695924c 100644 --- 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 @@ -1,37 +1,4 @@ -# Synthetic Configuration -To calculate the Availability KPI, a synthetic must be configured. +### How to configure synthetics? -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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Synthetic+Monitors) page to configure your synthetics. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_dealer-payments-notification-service/conditional-naming-processgroup/README.md b/BMW-Dynatrace-config/CD_dealer-payments-notification-service/conditional-naming-processgroup/README.md new file mode 100644 index 00000000..f94196a5 --- /dev/null +++ b/BMW-Dynatrace-config/CD_dealer-payments-notification-service/conditional-naming-processgroup/README.md @@ -0,0 +1,67 @@ +### Process Group Detection Rules and Naming + +#### Detection Rule or Naming? + +For the explanation, we're using a real example of the Infotainment application: + +!(PGNaming1)[../../../../img/PGNaming1.PNG] + +Before working with your dashboards and alerting profiles, an important task to do when working with Dynatrace is checking +the structure of your applications (process groups). You can do that clicking under *technologies* and filter using your +application Management Zone. + +In the picture above, there are two Process Groups called bon-information-prod. **If you see duplicated process groups like in** +**this case, you MUST follow this guideline** + +Next step would be to open both process groups and compare the metadata. In that way, you can identify if all process instances are +part of the same application or not. An easy way to do that is asking yourself: how many instances of my application do i have? + +If you have 4 instances in total and you're able to see 2 in one PG and other 2 in other PG it means that **they are part of the ** +**same application** + +Another situation could be that checking on the metadata, then you see that are **two different application** and Dynatrace is just naming +the process group in the same way + +*Same application* +- Problem: Dynatrace is creating two different process groups, what transalates in two separated services for the same application. Instead of +seeing all the traffic in one service, you will have it splitted and it will complicate your monitoring +- Solution: create a process group detection rule. Contact Dynatrace Expert + +*Different application* +- Problem: Dynatrace is just naming in the same way applications that are different. +- Solution: This case is less severe, since it can be fixed with a process group naming rule. + + +What about our example? +!(PGNaming2)[../../../../img/PGNaming2.PNG] +!(PGNaming3)[../../../../img/PGNaming3.PNG] + +Based on the feedback of the infotaiment team, each process group is a different application (microservice) and it's visible in the kubernetes container/workload +within the metadata of each Process Group. + +#### How to create a Process Group Detection Rule +1. Open the *conditional-naming-processgroup.yaml* file and create a rule that looks like this: +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName} +- tag: Infotainment +- skipDeployment: false +``` +The result of the rule will be renaming the PG to this: +``` +bon-information-prod ipa +bon-information-prod rsl +``` + +Other possible placeholders that you can use are for example: +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName/[^\\-]*$} +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesFullPodName/buffet-(.*?)-} +{ProcessGroup:DetectedName} - {HostGroup:Name/[^\\_]*$} +{ProcessGroup:KubernetesNamespace} +{ProcessGroup:CommandLineArgs/.*?\\-f\\s\\/www\\/(.*?)\\/generated\\/httpd\\.conf.*?} + +You can combine different ones. Check the (documentation)[link] for more \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_dealer-payments-notification-service/conditional-naming-processgroup/conditional-naming-processgroup.yaml b/BMW-Dynatrace-config/CD_dealer-payments-notification-service/conditional-naming-processgroup/conditional-naming-processgroup.yaml new file mode 100644 index 00000000..938b94f4 --- /dev/null +++ b/BMW-Dynatrace-config/CD_dealer-payments-notification-service/conditional-naming-processgroup/conditional-naming-processgroup.yaml @@ -0,0 +1,8 @@ +config: +- CDdealer-payments-notification-service: template.json + +CDdealer-payments-notification-service: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: dealer-payments-notification-service +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_dealer-payments-notification-service/conditional-naming-processgroup/template.json b/BMW-Dynatrace-config/CD_dealer-payments-notification-service/conditional-naming-processgroup/template.json new file mode 100644 index 00000000..7c039808 --- /dev/null +++ b/BMW-Dynatrace-config/CD_dealer-payments-notification-service/conditional-naming-processgroup/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "type": "PROCESS_GROUP" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_dealer-payments-notification-service/conditional-naming-service/README.md b/BMW-Dynatrace-config/CD_dealer-payments-notification-service/conditional-naming-service/README.md new file mode 100644 index 00000000..c34ef308 --- /dev/null +++ b/BMW-Dynatrace-config/CD_dealer-payments-notification-service/conditional-naming-service/README.md @@ -0,0 +1,35 @@ +### Service Naming Rules + +A typical case could be that you access to *Transaction & Services* and you find two services that are exactly the same: +*DataDownloadV1* +*DataDownloadV1* + +If you drilldown into the service and you check in the process group, you may have a PROD and a E2E for each service. + +*Note: if you see that both process group are exactly the same, please contact a Dynatrace expert to create a Process* +*Group detection rule* + +In the case the PG are PROD and E2E, then we need to create a rule that looks like this: + +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {Service:DetectedName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +- tag: Infotainment +- skipDeployment: false +``` + +The rule will get the Service Detected Name (current name) and it will extract (with a regex) the part of the kubernetes namespace after the "-", so -prod or -e2e, resulting in: +*DataDownloadV1 - prod* +*DataDownloadV1 - e2e* + +Now, services will be easy to identify. + +You can create rules based on any property/metadata. Some other placeholder's eamples: +{Service:DatabaseName} - E2E +{Service:WebServiceName} - {ProcessGroup:Kubernetes:microservice} - {ProcessGroup:Kubernetes:environment} +{Service:DetectedName} - {ProcessGroup:KubernetesContainerName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +{Service:DetectedName} - {ProcessGroup:SpringBootProfileName/[^\\-]*$} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_dealer-payments-notification-service/conditional-naming-service/conditional-naming-service.yaml b/BMW-Dynatrace-config/CD_dealer-payments-notification-service/conditional-naming-service/conditional-naming-service.yaml new file mode 100644 index 00000000..938b94f4 --- /dev/null +++ b/BMW-Dynatrace-config/CD_dealer-payments-notification-service/conditional-naming-service/conditional-naming-service.yaml @@ -0,0 +1,8 @@ +config: +- CDdealer-payments-notification-service: template.json + +CDdealer-payments-notification-service: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: dealer-payments-notification-service +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_dealer-payments-notification-service/conditional-naming-service/template.json b/BMW-Dynatrace-config/CD_dealer-payments-notification-service/conditional-naming-service/template.json new file mode 100644 index 00000000..5d4fac56 --- /dev/null +++ b/BMW-Dynatrace-config/CD_dealer-payments-notification-service/conditional-naming-service/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "type": "SERVICE" +} \ 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 index d41c4c77..5f35e5c1 100644 --- 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 @@ -1,30 +1,4 @@ -## 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 configure custom services? -## 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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Custom+Services) page to configure your custom services. \ 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 index 92e734fa..1695924c 100644 --- 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 @@ -1,37 +1,4 @@ -# Synthetic Configuration -To calculate the Availability KPI, a synthetic must be configured. +### How to configure synthetics? -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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Synthetic+Monitors) page to configure your synthetics. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_dealer-payments-service/conditional-naming-processgroup/README.md b/BMW-Dynatrace-config/CD_dealer-payments-service/conditional-naming-processgroup/README.md new file mode 100644 index 00000000..f94196a5 --- /dev/null +++ b/BMW-Dynatrace-config/CD_dealer-payments-service/conditional-naming-processgroup/README.md @@ -0,0 +1,67 @@ +### Process Group Detection Rules and Naming + +#### Detection Rule or Naming? + +For the explanation, we're using a real example of the Infotainment application: + +!(PGNaming1)[../../../../img/PGNaming1.PNG] + +Before working with your dashboards and alerting profiles, an important task to do when working with Dynatrace is checking +the structure of your applications (process groups). You can do that clicking under *technologies* and filter using your +application Management Zone. + +In the picture above, there are two Process Groups called bon-information-prod. **If you see duplicated process groups like in** +**this case, you MUST follow this guideline** + +Next step would be to open both process groups and compare the metadata. In that way, you can identify if all process instances are +part of the same application or not. An easy way to do that is asking yourself: how many instances of my application do i have? + +If you have 4 instances in total and you're able to see 2 in one PG and other 2 in other PG it means that **they are part of the ** +**same application** + +Another situation could be that checking on the metadata, then you see that are **two different application** and Dynatrace is just naming +the process group in the same way + +*Same application* +- Problem: Dynatrace is creating two different process groups, what transalates in two separated services for the same application. Instead of +seeing all the traffic in one service, you will have it splitted and it will complicate your monitoring +- Solution: create a process group detection rule. Contact Dynatrace Expert + +*Different application* +- Problem: Dynatrace is just naming in the same way applications that are different. +- Solution: This case is less severe, since it can be fixed with a process group naming rule. + + +What about our example? +!(PGNaming2)[../../../../img/PGNaming2.PNG] +!(PGNaming3)[../../../../img/PGNaming3.PNG] + +Based on the feedback of the infotaiment team, each process group is a different application (microservice) and it's visible in the kubernetes container/workload +within the metadata of each Process Group. + +#### How to create a Process Group Detection Rule +1. Open the *conditional-naming-processgroup.yaml* file and create a rule that looks like this: +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName} +- tag: Infotainment +- skipDeployment: false +``` +The result of the rule will be renaming the PG to this: +``` +bon-information-prod ipa +bon-information-prod rsl +``` + +Other possible placeholders that you can use are for example: +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName/[^\\-]*$} +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesFullPodName/buffet-(.*?)-} +{ProcessGroup:DetectedName} - {HostGroup:Name/[^\\_]*$} +{ProcessGroup:KubernetesNamespace} +{ProcessGroup:CommandLineArgs/.*?\\-f\\s\\/www\\/(.*?)\\/generated\\/httpd\\.conf.*?} + +You can combine different ones. Check the (documentation)[link] for more \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_dealer-payments-service/conditional-naming-processgroup/conditional-naming-processgroup.yaml b/BMW-Dynatrace-config/CD_dealer-payments-service/conditional-naming-processgroup/conditional-naming-processgroup.yaml new file mode 100644 index 00000000..6a8b1f6a --- /dev/null +++ b/BMW-Dynatrace-config/CD_dealer-payments-service/conditional-naming-processgroup/conditional-naming-processgroup.yaml @@ -0,0 +1,8 @@ +config: +- CDdealer-payments-service: template.json + +CDdealer-payments-service: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: dealer-payments-service +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_dealer-payments-service/conditional-naming-processgroup/template.json b/BMW-Dynatrace-config/CD_dealer-payments-service/conditional-naming-processgroup/template.json new file mode 100644 index 00000000..7c039808 --- /dev/null +++ b/BMW-Dynatrace-config/CD_dealer-payments-service/conditional-naming-processgroup/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "type": "PROCESS_GROUP" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_dealer-payments-service/conditional-naming-service/README.md b/BMW-Dynatrace-config/CD_dealer-payments-service/conditional-naming-service/README.md new file mode 100644 index 00000000..c34ef308 --- /dev/null +++ b/BMW-Dynatrace-config/CD_dealer-payments-service/conditional-naming-service/README.md @@ -0,0 +1,35 @@ +### Service Naming Rules + +A typical case could be that you access to *Transaction & Services* and you find two services that are exactly the same: +*DataDownloadV1* +*DataDownloadV1* + +If you drilldown into the service and you check in the process group, you may have a PROD and a E2E for each service. + +*Note: if you see that both process group are exactly the same, please contact a Dynatrace expert to create a Process* +*Group detection rule* + +In the case the PG are PROD and E2E, then we need to create a rule that looks like this: + +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {Service:DetectedName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +- tag: Infotainment +- skipDeployment: false +``` + +The rule will get the Service Detected Name (current name) and it will extract (with a regex) the part of the kubernetes namespace after the "-", so -prod or -e2e, resulting in: +*DataDownloadV1 - prod* +*DataDownloadV1 - e2e* + +Now, services will be easy to identify. + +You can create rules based on any property/metadata. Some other placeholder's eamples: +{Service:DatabaseName} - E2E +{Service:WebServiceName} - {ProcessGroup:Kubernetes:microservice} - {ProcessGroup:Kubernetes:environment} +{Service:DetectedName} - {ProcessGroup:KubernetesContainerName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +{Service:DetectedName} - {ProcessGroup:SpringBootProfileName/[^\\-]*$} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_dealer-payments-service/conditional-naming-service/conditional-naming-service.yaml b/BMW-Dynatrace-config/CD_dealer-payments-service/conditional-naming-service/conditional-naming-service.yaml new file mode 100644 index 00000000..6a8b1f6a --- /dev/null +++ b/BMW-Dynatrace-config/CD_dealer-payments-service/conditional-naming-service/conditional-naming-service.yaml @@ -0,0 +1,8 @@ +config: +- CDdealer-payments-service: template.json + +CDdealer-payments-service: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: dealer-payments-service +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_dealer-payments-service/conditional-naming-service/template.json b/BMW-Dynatrace-config/CD_dealer-payments-service/conditional-naming-service/template.json new file mode 100644 index 00000000..5d4fac56 --- /dev/null +++ b/BMW-Dynatrace-config/CD_dealer-payments-service/conditional-naming-service/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "type": "SERVICE" +} \ 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 index d41c4c77..5f35e5c1 100644 --- 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 @@ -1,30 +1,4 @@ -## 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 configure custom services? -## 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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Custom+Services) page to configure your custom services. \ 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 index 92e734fa..1695924c 100644 --- a/BMW-Dynatrace-config/CD_dealer-payments-service/synthetic-monitor/README.md +++ b/BMW-Dynatrace-config/CD_dealer-payments-service/synthetic-monitor/README.md @@ -1,37 +1,4 @@ -# Synthetic Configuration -To calculate the Availability KPI, a synthetic must be configured. +### How to configure synthetics? -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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Synthetic+Monitors) page to configure your synthetics. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_dealer-search-service/conditional-naming-processgroup/README.md b/BMW-Dynatrace-config/CD_dealer-search-service/conditional-naming-processgroup/README.md new file mode 100644 index 00000000..f94196a5 --- /dev/null +++ b/BMW-Dynatrace-config/CD_dealer-search-service/conditional-naming-processgroup/README.md @@ -0,0 +1,67 @@ +### Process Group Detection Rules and Naming + +#### Detection Rule or Naming? + +For the explanation, we're using a real example of the Infotainment application: + +!(PGNaming1)[../../../../img/PGNaming1.PNG] + +Before working with your dashboards and alerting profiles, an important task to do when working with Dynatrace is checking +the structure of your applications (process groups). You can do that clicking under *technologies* and filter using your +application Management Zone. + +In the picture above, there are two Process Groups called bon-information-prod. **If you see duplicated process groups like in** +**this case, you MUST follow this guideline** + +Next step would be to open both process groups and compare the metadata. In that way, you can identify if all process instances are +part of the same application or not. An easy way to do that is asking yourself: how many instances of my application do i have? + +If you have 4 instances in total and you're able to see 2 in one PG and other 2 in other PG it means that **they are part of the ** +**same application** + +Another situation could be that checking on the metadata, then you see that are **two different application** and Dynatrace is just naming +the process group in the same way + +*Same application* +- Problem: Dynatrace is creating two different process groups, what transalates in two separated services for the same application. Instead of +seeing all the traffic in one service, you will have it splitted and it will complicate your monitoring +- Solution: create a process group detection rule. Contact Dynatrace Expert + +*Different application* +- Problem: Dynatrace is just naming in the same way applications that are different. +- Solution: This case is less severe, since it can be fixed with a process group naming rule. + + +What about our example? +!(PGNaming2)[../../../../img/PGNaming2.PNG] +!(PGNaming3)[../../../../img/PGNaming3.PNG] + +Based on the feedback of the infotaiment team, each process group is a different application (microservice) and it's visible in the kubernetes container/workload +within the metadata of each Process Group. + +#### How to create a Process Group Detection Rule +1. Open the *conditional-naming-processgroup.yaml* file and create a rule that looks like this: +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName} +- tag: Infotainment +- skipDeployment: false +``` +The result of the rule will be renaming the PG to this: +``` +bon-information-prod ipa +bon-information-prod rsl +``` + +Other possible placeholders that you can use are for example: +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName/[^\\-]*$} +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesFullPodName/buffet-(.*?)-} +{ProcessGroup:DetectedName} - {HostGroup:Name/[^\\_]*$} +{ProcessGroup:KubernetesNamespace} +{ProcessGroup:CommandLineArgs/.*?\\-f\\s\\/www\\/(.*?)\\/generated\\/httpd\\.conf.*?} + +You can combine different ones. Check the (documentation)[link] for more \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_dealer-search-service/conditional-naming-processgroup/conditional-naming-processgroup.yaml b/BMW-Dynatrace-config/CD_dealer-search-service/conditional-naming-processgroup/conditional-naming-processgroup.yaml new file mode 100644 index 00000000..dca98b9d --- /dev/null +++ b/BMW-Dynatrace-config/CD_dealer-search-service/conditional-naming-processgroup/conditional-naming-processgroup.yaml @@ -0,0 +1,8 @@ +config: +- CDdealer-search-service: template.json + +CDdealer-search-service: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: dealer-search-service +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_dealer-search-service/conditional-naming-processgroup/template.json b/BMW-Dynatrace-config/CD_dealer-search-service/conditional-naming-processgroup/template.json new file mode 100644 index 00000000..7c039808 --- /dev/null +++ b/BMW-Dynatrace-config/CD_dealer-search-service/conditional-naming-processgroup/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "type": "PROCESS_GROUP" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_dealer-search-service/conditional-naming-service/README.md b/BMW-Dynatrace-config/CD_dealer-search-service/conditional-naming-service/README.md new file mode 100644 index 00000000..c34ef308 --- /dev/null +++ b/BMW-Dynatrace-config/CD_dealer-search-service/conditional-naming-service/README.md @@ -0,0 +1,35 @@ +### Service Naming Rules + +A typical case could be that you access to *Transaction & Services* and you find two services that are exactly the same: +*DataDownloadV1* +*DataDownloadV1* + +If you drilldown into the service and you check in the process group, you may have a PROD and a E2E for each service. + +*Note: if you see that both process group are exactly the same, please contact a Dynatrace expert to create a Process* +*Group detection rule* + +In the case the PG are PROD and E2E, then we need to create a rule that looks like this: + +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {Service:DetectedName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +- tag: Infotainment +- skipDeployment: false +``` + +The rule will get the Service Detected Name (current name) and it will extract (with a regex) the part of the kubernetes namespace after the "-", so -prod or -e2e, resulting in: +*DataDownloadV1 - prod* +*DataDownloadV1 - e2e* + +Now, services will be easy to identify. + +You can create rules based on any property/metadata. Some other placeholder's eamples: +{Service:DatabaseName} - E2E +{Service:WebServiceName} - {ProcessGroup:Kubernetes:microservice} - {ProcessGroup:Kubernetes:environment} +{Service:DetectedName} - {ProcessGroup:KubernetesContainerName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +{Service:DetectedName} - {ProcessGroup:SpringBootProfileName/[^\\-]*$} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_dealer-search-service/conditional-naming-service/conditional-naming-service.yaml b/BMW-Dynatrace-config/CD_dealer-search-service/conditional-naming-service/conditional-naming-service.yaml new file mode 100644 index 00000000..dca98b9d --- /dev/null +++ b/BMW-Dynatrace-config/CD_dealer-search-service/conditional-naming-service/conditional-naming-service.yaml @@ -0,0 +1,8 @@ +config: +- CDdealer-search-service: template.json + +CDdealer-search-service: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: dealer-search-service +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_dealer-search-service/conditional-naming-service/template.json b/BMW-Dynatrace-config/CD_dealer-search-service/conditional-naming-service/template.json new file mode 100644 index 00000000..5d4fac56 --- /dev/null +++ b/BMW-Dynatrace-config/CD_dealer-search-service/conditional-naming-service/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "type": "SERVICE" +} \ 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 index d41c4c77..5f35e5c1 100644 --- 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 @@ -1,30 +1,4 @@ -## 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 configure custom services? -## 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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Custom+Services) page to configure your custom services. \ 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 index 92e734fa..1695924c 100644 --- a/BMW-Dynatrace-config/CD_dealer-search-service/synthetic-monitor/README.md +++ b/BMW-Dynatrace-config/CD_dealer-search-service/synthetic-monitor/README.md @@ -1,37 +1,4 @@ -# Synthetic Configuration -To calculate the Availability KPI, a synthetic must be configured. +### How to configure synthetics? -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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Synthetic+Monitors) page to configure your synthetics. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_dealer-services-composite-service/conditional-naming-processgroup/README.md b/BMW-Dynatrace-config/CD_dealer-services-composite-service/conditional-naming-processgroup/README.md new file mode 100644 index 00000000..f94196a5 --- /dev/null +++ b/BMW-Dynatrace-config/CD_dealer-services-composite-service/conditional-naming-processgroup/README.md @@ -0,0 +1,67 @@ +### Process Group Detection Rules and Naming + +#### Detection Rule or Naming? + +For the explanation, we're using a real example of the Infotainment application: + +!(PGNaming1)[../../../../img/PGNaming1.PNG] + +Before working with your dashboards and alerting profiles, an important task to do when working with Dynatrace is checking +the structure of your applications (process groups). You can do that clicking under *technologies* and filter using your +application Management Zone. + +In the picture above, there are two Process Groups called bon-information-prod. **If you see duplicated process groups like in** +**this case, you MUST follow this guideline** + +Next step would be to open both process groups and compare the metadata. In that way, you can identify if all process instances are +part of the same application or not. An easy way to do that is asking yourself: how many instances of my application do i have? + +If you have 4 instances in total and you're able to see 2 in one PG and other 2 in other PG it means that **they are part of the ** +**same application** + +Another situation could be that checking on the metadata, then you see that are **two different application** and Dynatrace is just naming +the process group in the same way + +*Same application* +- Problem: Dynatrace is creating two different process groups, what transalates in two separated services for the same application. Instead of +seeing all the traffic in one service, you will have it splitted and it will complicate your monitoring +- Solution: create a process group detection rule. Contact Dynatrace Expert + +*Different application* +- Problem: Dynatrace is just naming in the same way applications that are different. +- Solution: This case is less severe, since it can be fixed with a process group naming rule. + + +What about our example? +!(PGNaming2)[../../../../img/PGNaming2.PNG] +!(PGNaming3)[../../../../img/PGNaming3.PNG] + +Based on the feedback of the infotaiment team, each process group is a different application (microservice) and it's visible in the kubernetes container/workload +within the metadata of each Process Group. + +#### How to create a Process Group Detection Rule +1. Open the *conditional-naming-processgroup.yaml* file and create a rule that looks like this: +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName} +- tag: Infotainment +- skipDeployment: false +``` +The result of the rule will be renaming the PG to this: +``` +bon-information-prod ipa +bon-information-prod rsl +``` + +Other possible placeholders that you can use are for example: +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName/[^\\-]*$} +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesFullPodName/buffet-(.*?)-} +{ProcessGroup:DetectedName} - {HostGroup:Name/[^\\_]*$} +{ProcessGroup:KubernetesNamespace} +{ProcessGroup:CommandLineArgs/.*?\\-f\\s\\/www\\/(.*?)\\/generated\\/httpd\\.conf.*?} + +You can combine different ones. Check the (documentation)[link] for more \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_dealer-services-composite-service/conditional-naming-processgroup/conditional-naming-processgroup.yaml b/BMW-Dynatrace-config/CD_dealer-services-composite-service/conditional-naming-processgroup/conditional-naming-processgroup.yaml new file mode 100644 index 00000000..7dae1bce --- /dev/null +++ b/BMW-Dynatrace-config/CD_dealer-services-composite-service/conditional-naming-processgroup/conditional-naming-processgroup.yaml @@ -0,0 +1,8 @@ +config: +- CDdealer-services-composite-service: template.json + +CDdealer-services-composite-service: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: dealer-services-composite-service +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_dealer-services-composite-service/conditional-naming-processgroup/template.json b/BMW-Dynatrace-config/CD_dealer-services-composite-service/conditional-naming-processgroup/template.json new file mode 100644 index 00000000..7c039808 --- /dev/null +++ b/BMW-Dynatrace-config/CD_dealer-services-composite-service/conditional-naming-processgroup/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "type": "PROCESS_GROUP" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_dealer-services-composite-service/conditional-naming-service/README.md b/BMW-Dynatrace-config/CD_dealer-services-composite-service/conditional-naming-service/README.md new file mode 100644 index 00000000..c34ef308 --- /dev/null +++ b/BMW-Dynatrace-config/CD_dealer-services-composite-service/conditional-naming-service/README.md @@ -0,0 +1,35 @@ +### Service Naming Rules + +A typical case could be that you access to *Transaction & Services* and you find two services that are exactly the same: +*DataDownloadV1* +*DataDownloadV1* + +If you drilldown into the service and you check in the process group, you may have a PROD and a E2E for each service. + +*Note: if you see that both process group are exactly the same, please contact a Dynatrace expert to create a Process* +*Group detection rule* + +In the case the PG are PROD and E2E, then we need to create a rule that looks like this: + +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {Service:DetectedName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +- tag: Infotainment +- skipDeployment: false +``` + +The rule will get the Service Detected Name (current name) and it will extract (with a regex) the part of the kubernetes namespace after the "-", so -prod or -e2e, resulting in: +*DataDownloadV1 - prod* +*DataDownloadV1 - e2e* + +Now, services will be easy to identify. + +You can create rules based on any property/metadata. Some other placeholder's eamples: +{Service:DatabaseName} - E2E +{Service:WebServiceName} - {ProcessGroup:Kubernetes:microservice} - {ProcessGroup:Kubernetes:environment} +{Service:DetectedName} - {ProcessGroup:KubernetesContainerName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +{Service:DetectedName} - {ProcessGroup:SpringBootProfileName/[^\\-]*$} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_dealer-services-composite-service/conditional-naming-service/conditional-naming-service.yaml b/BMW-Dynatrace-config/CD_dealer-services-composite-service/conditional-naming-service/conditional-naming-service.yaml new file mode 100644 index 00000000..7dae1bce --- /dev/null +++ b/BMW-Dynatrace-config/CD_dealer-services-composite-service/conditional-naming-service/conditional-naming-service.yaml @@ -0,0 +1,8 @@ +config: +- CDdealer-services-composite-service: template.json + +CDdealer-services-composite-service: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: dealer-services-composite-service +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_dealer-services-composite-service/conditional-naming-service/template.json b/BMW-Dynatrace-config/CD_dealer-services-composite-service/conditional-naming-service/template.json new file mode 100644 index 00000000..5d4fac56 --- /dev/null +++ b/BMW-Dynatrace-config/CD_dealer-services-composite-service/conditional-naming-service/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "type": "SERVICE" +} \ 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 index d41c4c77..5f35e5c1 100644 --- 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 @@ -1,30 +1,4 @@ -## 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 configure custom services? -## 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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Custom+Services) page to configure your custom services. \ 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 index 92e734fa..1695924c 100644 --- 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 @@ -1,37 +1,4 @@ -# Synthetic Configuration -To calculate the Availability KPI, a synthetic must be configured. +### How to configure synthetics? -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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Synthetic+Monitors) page to configure your synthetics. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_dealercockpit/conditional-naming-processgroup/README.md b/BMW-Dynatrace-config/CD_dealercockpit/conditional-naming-processgroup/README.md new file mode 100644 index 00000000..f94196a5 --- /dev/null +++ b/BMW-Dynatrace-config/CD_dealercockpit/conditional-naming-processgroup/README.md @@ -0,0 +1,67 @@ +### Process Group Detection Rules and Naming + +#### Detection Rule or Naming? + +For the explanation, we're using a real example of the Infotainment application: + +!(PGNaming1)[../../../../img/PGNaming1.PNG] + +Before working with your dashboards and alerting profiles, an important task to do when working with Dynatrace is checking +the structure of your applications (process groups). You can do that clicking under *technologies* and filter using your +application Management Zone. + +In the picture above, there are two Process Groups called bon-information-prod. **If you see duplicated process groups like in** +**this case, you MUST follow this guideline** + +Next step would be to open both process groups and compare the metadata. In that way, you can identify if all process instances are +part of the same application or not. An easy way to do that is asking yourself: how many instances of my application do i have? + +If you have 4 instances in total and you're able to see 2 in one PG and other 2 in other PG it means that **they are part of the ** +**same application** + +Another situation could be that checking on the metadata, then you see that are **two different application** and Dynatrace is just naming +the process group in the same way + +*Same application* +- Problem: Dynatrace is creating two different process groups, what transalates in two separated services for the same application. Instead of +seeing all the traffic in one service, you will have it splitted and it will complicate your monitoring +- Solution: create a process group detection rule. Contact Dynatrace Expert + +*Different application* +- Problem: Dynatrace is just naming in the same way applications that are different. +- Solution: This case is less severe, since it can be fixed with a process group naming rule. + + +What about our example? +!(PGNaming2)[../../../../img/PGNaming2.PNG] +!(PGNaming3)[../../../../img/PGNaming3.PNG] + +Based on the feedback of the infotaiment team, each process group is a different application (microservice) and it's visible in the kubernetes container/workload +within the metadata of each Process Group. + +#### How to create a Process Group Detection Rule +1. Open the *conditional-naming-processgroup.yaml* file and create a rule that looks like this: +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName} +- tag: Infotainment +- skipDeployment: false +``` +The result of the rule will be renaming the PG to this: +``` +bon-information-prod ipa +bon-information-prod rsl +``` + +Other possible placeholders that you can use are for example: +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName/[^\\-]*$} +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesFullPodName/buffet-(.*?)-} +{ProcessGroup:DetectedName} - {HostGroup:Name/[^\\_]*$} +{ProcessGroup:KubernetesNamespace} +{ProcessGroup:CommandLineArgs/.*?\\-f\\s\\/www\\/(.*?)\\/generated\\/httpd\\.conf.*?} + +You can combine different ones. Check the (documentation)[link] for more \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_dealercockpit/conditional-naming-processgroup/conditional-naming-processgroup.yaml b/BMW-Dynatrace-config/CD_dealercockpit/conditional-naming-processgroup/conditional-naming-processgroup.yaml new file mode 100644 index 00000000..0033f8e9 --- /dev/null +++ b/BMW-Dynatrace-config/CD_dealercockpit/conditional-naming-processgroup/conditional-naming-processgroup.yaml @@ -0,0 +1,8 @@ +config: +- CDdealercockpit: template.json + +CDdealercockpit: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: dealercockpit +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_dealercockpit/conditional-naming-processgroup/template.json b/BMW-Dynatrace-config/CD_dealercockpit/conditional-naming-processgroup/template.json new file mode 100644 index 00000000..7c039808 --- /dev/null +++ b/BMW-Dynatrace-config/CD_dealercockpit/conditional-naming-processgroup/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "type": "PROCESS_GROUP" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_dealercockpit/conditional-naming-service/README.md b/BMW-Dynatrace-config/CD_dealercockpit/conditional-naming-service/README.md new file mode 100644 index 00000000..c34ef308 --- /dev/null +++ b/BMW-Dynatrace-config/CD_dealercockpit/conditional-naming-service/README.md @@ -0,0 +1,35 @@ +### Service Naming Rules + +A typical case could be that you access to *Transaction & Services* and you find two services that are exactly the same: +*DataDownloadV1* +*DataDownloadV1* + +If you drilldown into the service and you check in the process group, you may have a PROD and a E2E for each service. + +*Note: if you see that both process group are exactly the same, please contact a Dynatrace expert to create a Process* +*Group detection rule* + +In the case the PG are PROD and E2E, then we need to create a rule that looks like this: + +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {Service:DetectedName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +- tag: Infotainment +- skipDeployment: false +``` + +The rule will get the Service Detected Name (current name) and it will extract (with a regex) the part of the kubernetes namespace after the "-", so -prod or -e2e, resulting in: +*DataDownloadV1 - prod* +*DataDownloadV1 - e2e* + +Now, services will be easy to identify. + +You can create rules based on any property/metadata. Some other placeholder's eamples: +{Service:DatabaseName} - E2E +{Service:WebServiceName} - {ProcessGroup:Kubernetes:microservice} - {ProcessGroup:Kubernetes:environment} +{Service:DetectedName} - {ProcessGroup:KubernetesContainerName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +{Service:DetectedName} - {ProcessGroup:SpringBootProfileName/[^\\-]*$} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_dealercockpit/conditional-naming-service/conditional-naming-service.yaml b/BMW-Dynatrace-config/CD_dealercockpit/conditional-naming-service/conditional-naming-service.yaml new file mode 100644 index 00000000..0033f8e9 --- /dev/null +++ b/BMW-Dynatrace-config/CD_dealercockpit/conditional-naming-service/conditional-naming-service.yaml @@ -0,0 +1,8 @@ +config: +- CDdealercockpit: template.json + +CDdealercockpit: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: dealercockpit +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_dealercockpit/conditional-naming-service/template.json b/BMW-Dynatrace-config/CD_dealercockpit/conditional-naming-service/template.json new file mode 100644 index 00000000..5d4fac56 --- /dev/null +++ b/BMW-Dynatrace-config/CD_dealercockpit/conditional-naming-service/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "type": "SERVICE" +} \ 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 index d41c4c77..5f35e5c1 100644 --- a/BMW-Dynatrace-config/CD_dealercockpit/custom-service-java/README.md +++ b/BMW-Dynatrace-config/CD_dealercockpit/custom-service-java/README.md @@ -1,30 +1,4 @@ -## 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 configure custom services? -## 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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Custom+Services) page to configure your custom services. \ 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 index 92e734fa..1695924c 100644 --- a/BMW-Dynatrace-config/CD_dealercockpit/synthetic-monitor/README.md +++ b/BMW-Dynatrace-config/CD_dealercockpit/synthetic-monitor/README.md @@ -1,37 +1,4 @@ -# Synthetic Configuration -To calculate the Availability KPI, a synthetic must be configured. +### How to configure synthetics? -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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Synthetic+Monitors) page to configure your synthetics. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_delivery/conditional-naming-processgroup/README.md b/BMW-Dynatrace-config/CD_delivery/conditional-naming-processgroup/README.md new file mode 100644 index 00000000..f94196a5 --- /dev/null +++ b/BMW-Dynatrace-config/CD_delivery/conditional-naming-processgroup/README.md @@ -0,0 +1,67 @@ +### Process Group Detection Rules and Naming + +#### Detection Rule or Naming? + +For the explanation, we're using a real example of the Infotainment application: + +!(PGNaming1)[../../../../img/PGNaming1.PNG] + +Before working with your dashboards and alerting profiles, an important task to do when working with Dynatrace is checking +the structure of your applications (process groups). You can do that clicking under *technologies* and filter using your +application Management Zone. + +In the picture above, there are two Process Groups called bon-information-prod. **If you see duplicated process groups like in** +**this case, you MUST follow this guideline** + +Next step would be to open both process groups and compare the metadata. In that way, you can identify if all process instances are +part of the same application or not. An easy way to do that is asking yourself: how many instances of my application do i have? + +If you have 4 instances in total and you're able to see 2 in one PG and other 2 in other PG it means that **they are part of the ** +**same application** + +Another situation could be that checking on the metadata, then you see that are **two different application** and Dynatrace is just naming +the process group in the same way + +*Same application* +- Problem: Dynatrace is creating two different process groups, what transalates in two separated services for the same application. Instead of +seeing all the traffic in one service, you will have it splitted and it will complicate your monitoring +- Solution: create a process group detection rule. Contact Dynatrace Expert + +*Different application* +- Problem: Dynatrace is just naming in the same way applications that are different. +- Solution: This case is less severe, since it can be fixed with a process group naming rule. + + +What about our example? +!(PGNaming2)[../../../../img/PGNaming2.PNG] +!(PGNaming3)[../../../../img/PGNaming3.PNG] + +Based on the feedback of the infotaiment team, each process group is a different application (microservice) and it's visible in the kubernetes container/workload +within the metadata of each Process Group. + +#### How to create a Process Group Detection Rule +1. Open the *conditional-naming-processgroup.yaml* file and create a rule that looks like this: +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName} +- tag: Infotainment +- skipDeployment: false +``` +The result of the rule will be renaming the PG to this: +``` +bon-information-prod ipa +bon-information-prod rsl +``` + +Other possible placeholders that you can use are for example: +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName/[^\\-]*$} +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesFullPodName/buffet-(.*?)-} +{ProcessGroup:DetectedName} - {HostGroup:Name/[^\\_]*$} +{ProcessGroup:KubernetesNamespace} +{ProcessGroup:CommandLineArgs/.*?\\-f\\s\\/www\\/(.*?)\\/generated\\/httpd\\.conf.*?} + +You can combine different ones. Check the (documentation)[link] for more \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_delivery/conditional-naming-processgroup/conditional-naming-processgroup.yaml b/BMW-Dynatrace-config/CD_delivery/conditional-naming-processgroup/conditional-naming-processgroup.yaml new file mode 100644 index 00000000..a6066bf0 --- /dev/null +++ b/BMW-Dynatrace-config/CD_delivery/conditional-naming-processgroup/conditional-naming-processgroup.yaml @@ -0,0 +1,8 @@ +config: +- CDdelivery: template.json + +CDdelivery: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: delivery +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_delivery/conditional-naming-processgroup/template.json b/BMW-Dynatrace-config/CD_delivery/conditional-naming-processgroup/template.json new file mode 100644 index 00000000..7c039808 --- /dev/null +++ b/BMW-Dynatrace-config/CD_delivery/conditional-naming-processgroup/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "type": "PROCESS_GROUP" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_delivery/conditional-naming-service/README.md b/BMW-Dynatrace-config/CD_delivery/conditional-naming-service/README.md new file mode 100644 index 00000000..c34ef308 --- /dev/null +++ b/BMW-Dynatrace-config/CD_delivery/conditional-naming-service/README.md @@ -0,0 +1,35 @@ +### Service Naming Rules + +A typical case could be that you access to *Transaction & Services* and you find two services that are exactly the same: +*DataDownloadV1* +*DataDownloadV1* + +If you drilldown into the service and you check in the process group, you may have a PROD and a E2E for each service. + +*Note: if you see that both process group are exactly the same, please contact a Dynatrace expert to create a Process* +*Group detection rule* + +In the case the PG are PROD and E2E, then we need to create a rule that looks like this: + +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {Service:DetectedName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +- tag: Infotainment +- skipDeployment: false +``` + +The rule will get the Service Detected Name (current name) and it will extract (with a regex) the part of the kubernetes namespace after the "-", so -prod or -e2e, resulting in: +*DataDownloadV1 - prod* +*DataDownloadV1 - e2e* + +Now, services will be easy to identify. + +You can create rules based on any property/metadata. Some other placeholder's eamples: +{Service:DatabaseName} - E2E +{Service:WebServiceName} - {ProcessGroup:Kubernetes:microservice} - {ProcessGroup:Kubernetes:environment} +{Service:DetectedName} - {ProcessGroup:KubernetesContainerName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +{Service:DetectedName} - {ProcessGroup:SpringBootProfileName/[^\\-]*$} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_delivery/conditional-naming-service/conditional-naming-service.yaml b/BMW-Dynatrace-config/CD_delivery/conditional-naming-service/conditional-naming-service.yaml new file mode 100644 index 00000000..a6066bf0 --- /dev/null +++ b/BMW-Dynatrace-config/CD_delivery/conditional-naming-service/conditional-naming-service.yaml @@ -0,0 +1,8 @@ +config: +- CDdelivery: template.json + +CDdelivery: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: delivery +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_delivery/conditional-naming-service/template.json b/BMW-Dynatrace-config/CD_delivery/conditional-naming-service/template.json new file mode 100644 index 00000000..5d4fac56 --- /dev/null +++ b/BMW-Dynatrace-config/CD_delivery/conditional-naming-service/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "type": "SERVICE" +} \ 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 index d41c4c77..5f35e5c1 100644 --- a/BMW-Dynatrace-config/CD_delivery/custom-service-java/README.md +++ b/BMW-Dynatrace-config/CD_delivery/custom-service-java/README.md @@ -1,30 +1,4 @@ -## 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 configure custom services? -## 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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Custom+Services) page to configure your custom services. \ 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 index 92e734fa..1695924c 100644 --- a/BMW-Dynatrace-config/CD_delivery/synthetic-monitor/README.md +++ b/BMW-Dynatrace-config/CD_delivery/synthetic-monitor/README.md @@ -1,37 +1,4 @@ -# Synthetic Configuration -To calculate the Availability KPI, a synthetic must be configured. +### How to configure synthetics? -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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Synthetic+Monitors) page to configure your synthetics. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_destination-composite-service/conditional-naming-processgroup/README.md b/BMW-Dynatrace-config/CD_destination-composite-service/conditional-naming-processgroup/README.md new file mode 100644 index 00000000..f94196a5 --- /dev/null +++ b/BMW-Dynatrace-config/CD_destination-composite-service/conditional-naming-processgroup/README.md @@ -0,0 +1,67 @@ +### Process Group Detection Rules and Naming + +#### Detection Rule or Naming? + +For the explanation, we're using a real example of the Infotainment application: + +!(PGNaming1)[../../../../img/PGNaming1.PNG] + +Before working with your dashboards and alerting profiles, an important task to do when working with Dynatrace is checking +the structure of your applications (process groups). You can do that clicking under *technologies* and filter using your +application Management Zone. + +In the picture above, there are two Process Groups called bon-information-prod. **If you see duplicated process groups like in** +**this case, you MUST follow this guideline** + +Next step would be to open both process groups and compare the metadata. In that way, you can identify if all process instances are +part of the same application or not. An easy way to do that is asking yourself: how many instances of my application do i have? + +If you have 4 instances in total and you're able to see 2 in one PG and other 2 in other PG it means that **they are part of the ** +**same application** + +Another situation could be that checking on the metadata, then you see that are **two different application** and Dynatrace is just naming +the process group in the same way + +*Same application* +- Problem: Dynatrace is creating two different process groups, what transalates in two separated services for the same application. Instead of +seeing all the traffic in one service, you will have it splitted and it will complicate your monitoring +- Solution: create a process group detection rule. Contact Dynatrace Expert + +*Different application* +- Problem: Dynatrace is just naming in the same way applications that are different. +- Solution: This case is less severe, since it can be fixed with a process group naming rule. + + +What about our example? +!(PGNaming2)[../../../../img/PGNaming2.PNG] +!(PGNaming3)[../../../../img/PGNaming3.PNG] + +Based on the feedback of the infotaiment team, each process group is a different application (microservice) and it's visible in the kubernetes container/workload +within the metadata of each Process Group. + +#### How to create a Process Group Detection Rule +1. Open the *conditional-naming-processgroup.yaml* file and create a rule that looks like this: +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName} +- tag: Infotainment +- skipDeployment: false +``` +The result of the rule will be renaming the PG to this: +``` +bon-information-prod ipa +bon-information-prod rsl +``` + +Other possible placeholders that you can use are for example: +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName/[^\\-]*$} +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesFullPodName/buffet-(.*?)-} +{ProcessGroup:DetectedName} - {HostGroup:Name/[^\\_]*$} +{ProcessGroup:KubernetesNamespace} +{ProcessGroup:CommandLineArgs/.*?\\-f\\s\\/www\\/(.*?)\\/generated\\/httpd\\.conf.*?} + +You can combine different ones. Check the (documentation)[link] for more \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_destination-composite-service/conditional-naming-processgroup/conditional-naming-processgroup.yaml b/BMW-Dynatrace-config/CD_destination-composite-service/conditional-naming-processgroup/conditional-naming-processgroup.yaml new file mode 100644 index 00000000..7e7d216a --- /dev/null +++ b/BMW-Dynatrace-config/CD_destination-composite-service/conditional-naming-processgroup/conditional-naming-processgroup.yaml @@ -0,0 +1,8 @@ +config: +- CDdestination-composite-service: template.json + +CDdestination-composite-service: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: destination-composite-service +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_destination-composite-service/conditional-naming-processgroup/template.json b/BMW-Dynatrace-config/CD_destination-composite-service/conditional-naming-processgroup/template.json new file mode 100644 index 00000000..7c039808 --- /dev/null +++ b/BMW-Dynatrace-config/CD_destination-composite-service/conditional-naming-processgroup/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "type": "PROCESS_GROUP" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_destination-composite-service/conditional-naming-service/README.md b/BMW-Dynatrace-config/CD_destination-composite-service/conditional-naming-service/README.md new file mode 100644 index 00000000..c34ef308 --- /dev/null +++ b/BMW-Dynatrace-config/CD_destination-composite-service/conditional-naming-service/README.md @@ -0,0 +1,35 @@ +### Service Naming Rules + +A typical case could be that you access to *Transaction & Services* and you find two services that are exactly the same: +*DataDownloadV1* +*DataDownloadV1* + +If you drilldown into the service and you check in the process group, you may have a PROD and a E2E for each service. + +*Note: if you see that both process group are exactly the same, please contact a Dynatrace expert to create a Process* +*Group detection rule* + +In the case the PG are PROD and E2E, then we need to create a rule that looks like this: + +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {Service:DetectedName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +- tag: Infotainment +- skipDeployment: false +``` + +The rule will get the Service Detected Name (current name) and it will extract (with a regex) the part of the kubernetes namespace after the "-", so -prod or -e2e, resulting in: +*DataDownloadV1 - prod* +*DataDownloadV1 - e2e* + +Now, services will be easy to identify. + +You can create rules based on any property/metadata. Some other placeholder's eamples: +{Service:DatabaseName} - E2E +{Service:WebServiceName} - {ProcessGroup:Kubernetes:microservice} - {ProcessGroup:Kubernetes:environment} +{Service:DetectedName} - {ProcessGroup:KubernetesContainerName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +{Service:DetectedName} - {ProcessGroup:SpringBootProfileName/[^\\-]*$} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_destination-composite-service/conditional-naming-service/conditional-naming-service.yaml b/BMW-Dynatrace-config/CD_destination-composite-service/conditional-naming-service/conditional-naming-service.yaml new file mode 100644 index 00000000..7e7d216a --- /dev/null +++ b/BMW-Dynatrace-config/CD_destination-composite-service/conditional-naming-service/conditional-naming-service.yaml @@ -0,0 +1,8 @@ +config: +- CDdestination-composite-service: template.json + +CDdestination-composite-service: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: destination-composite-service +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_destination-composite-service/conditional-naming-service/template.json b/BMW-Dynatrace-config/CD_destination-composite-service/conditional-naming-service/template.json new file mode 100644 index 00000000..5d4fac56 --- /dev/null +++ b/BMW-Dynatrace-config/CD_destination-composite-service/conditional-naming-service/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "type": "SERVICE" +} \ 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 index d41c4c77..5f35e5c1 100644 --- 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 @@ -1,30 +1,4 @@ -## 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 configure custom services? -## 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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Custom+Services) page to configure your custom services. \ 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 index 92e734fa..1695924c 100644 --- a/BMW-Dynatrace-config/CD_destination-composite-service/synthetic-monitor/README.md +++ b/BMW-Dynatrace-config/CD_destination-composite-service/synthetic-monitor/README.md @@ -1,37 +1,4 @@ -# Synthetic Configuration -To calculate the Availability KPI, a synthetic must be configured. +### How to configure synthetics? -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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Synthetic+Monitors) page to configure your synthetics. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_digital-key-composite-service/conditional-naming-processgroup/README.md b/BMW-Dynatrace-config/CD_digital-key-composite-service/conditional-naming-processgroup/README.md new file mode 100644 index 00000000..f94196a5 --- /dev/null +++ b/BMW-Dynatrace-config/CD_digital-key-composite-service/conditional-naming-processgroup/README.md @@ -0,0 +1,67 @@ +### Process Group Detection Rules and Naming + +#### Detection Rule or Naming? + +For the explanation, we're using a real example of the Infotainment application: + +!(PGNaming1)[../../../../img/PGNaming1.PNG] + +Before working with your dashboards and alerting profiles, an important task to do when working with Dynatrace is checking +the structure of your applications (process groups). You can do that clicking under *technologies* and filter using your +application Management Zone. + +In the picture above, there are two Process Groups called bon-information-prod. **If you see duplicated process groups like in** +**this case, you MUST follow this guideline** + +Next step would be to open both process groups and compare the metadata. In that way, you can identify if all process instances are +part of the same application or not. An easy way to do that is asking yourself: how many instances of my application do i have? + +If you have 4 instances in total and you're able to see 2 in one PG and other 2 in other PG it means that **they are part of the ** +**same application** + +Another situation could be that checking on the metadata, then you see that are **two different application** and Dynatrace is just naming +the process group in the same way + +*Same application* +- Problem: Dynatrace is creating two different process groups, what transalates in two separated services for the same application. Instead of +seeing all the traffic in one service, you will have it splitted and it will complicate your monitoring +- Solution: create a process group detection rule. Contact Dynatrace Expert + +*Different application* +- Problem: Dynatrace is just naming in the same way applications that are different. +- Solution: This case is less severe, since it can be fixed with a process group naming rule. + + +What about our example? +!(PGNaming2)[../../../../img/PGNaming2.PNG] +!(PGNaming3)[../../../../img/PGNaming3.PNG] + +Based on the feedback of the infotaiment team, each process group is a different application (microservice) and it's visible in the kubernetes container/workload +within the metadata of each Process Group. + +#### How to create a Process Group Detection Rule +1. Open the *conditional-naming-processgroup.yaml* file and create a rule that looks like this: +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName} +- tag: Infotainment +- skipDeployment: false +``` +The result of the rule will be renaming the PG to this: +``` +bon-information-prod ipa +bon-information-prod rsl +``` + +Other possible placeholders that you can use are for example: +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName/[^\\-]*$} +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesFullPodName/buffet-(.*?)-} +{ProcessGroup:DetectedName} - {HostGroup:Name/[^\\_]*$} +{ProcessGroup:KubernetesNamespace} +{ProcessGroup:CommandLineArgs/.*?\\-f\\s\\/www\\/(.*?)\\/generated\\/httpd\\.conf.*?} + +You can combine different ones. Check the (documentation)[link] for more \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_digital-key-composite-service/conditional-naming-processgroup/conditional-naming-processgroup.yaml b/BMW-Dynatrace-config/CD_digital-key-composite-service/conditional-naming-processgroup/conditional-naming-processgroup.yaml new file mode 100644 index 00000000..238f60d9 --- /dev/null +++ b/BMW-Dynatrace-config/CD_digital-key-composite-service/conditional-naming-processgroup/conditional-naming-processgroup.yaml @@ -0,0 +1,8 @@ +config: +- CDdigital-key-composite-service: template.json + +CDdigital-key-composite-service: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: digital-key-composite-service +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_digital-key-composite-service/conditional-naming-processgroup/template.json b/BMW-Dynatrace-config/CD_digital-key-composite-service/conditional-naming-processgroup/template.json new file mode 100644 index 00000000..7c039808 --- /dev/null +++ b/BMW-Dynatrace-config/CD_digital-key-composite-service/conditional-naming-processgroup/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "type": "PROCESS_GROUP" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_digital-key-composite-service/conditional-naming-service/README.md b/BMW-Dynatrace-config/CD_digital-key-composite-service/conditional-naming-service/README.md new file mode 100644 index 00000000..c34ef308 --- /dev/null +++ b/BMW-Dynatrace-config/CD_digital-key-composite-service/conditional-naming-service/README.md @@ -0,0 +1,35 @@ +### Service Naming Rules + +A typical case could be that you access to *Transaction & Services* and you find two services that are exactly the same: +*DataDownloadV1* +*DataDownloadV1* + +If you drilldown into the service and you check in the process group, you may have a PROD and a E2E for each service. + +*Note: if you see that both process group are exactly the same, please contact a Dynatrace expert to create a Process* +*Group detection rule* + +In the case the PG are PROD and E2E, then we need to create a rule that looks like this: + +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {Service:DetectedName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +- tag: Infotainment +- skipDeployment: false +``` + +The rule will get the Service Detected Name (current name) and it will extract (with a regex) the part of the kubernetes namespace after the "-", so -prod or -e2e, resulting in: +*DataDownloadV1 - prod* +*DataDownloadV1 - e2e* + +Now, services will be easy to identify. + +You can create rules based on any property/metadata. Some other placeholder's eamples: +{Service:DatabaseName} - E2E +{Service:WebServiceName} - {ProcessGroup:Kubernetes:microservice} - {ProcessGroup:Kubernetes:environment} +{Service:DetectedName} - {ProcessGroup:KubernetesContainerName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +{Service:DetectedName} - {ProcessGroup:SpringBootProfileName/[^\\-]*$} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_digital-key-composite-service/conditional-naming-service/conditional-naming-service.yaml b/BMW-Dynatrace-config/CD_digital-key-composite-service/conditional-naming-service/conditional-naming-service.yaml new file mode 100644 index 00000000..238f60d9 --- /dev/null +++ b/BMW-Dynatrace-config/CD_digital-key-composite-service/conditional-naming-service/conditional-naming-service.yaml @@ -0,0 +1,8 @@ +config: +- CDdigital-key-composite-service: template.json + +CDdigital-key-composite-service: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: digital-key-composite-service +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_digital-key-composite-service/conditional-naming-service/template.json b/BMW-Dynatrace-config/CD_digital-key-composite-service/conditional-naming-service/template.json new file mode 100644 index 00000000..5d4fac56 --- /dev/null +++ b/BMW-Dynatrace-config/CD_digital-key-composite-service/conditional-naming-service/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "type": "SERVICE" +} \ 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 index d41c4c77..5f35e5c1 100644 --- 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 @@ -1,30 +1,4 @@ -## 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 configure custom services? -## 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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Custom+Services) page to configure your custom services. \ 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 index 92e734fa..1695924c 100644 --- 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 @@ -1,37 +1,4 @@ -# Synthetic Configuration -To calculate the Availability KPI, a synthetic must be configured. +### How to configure synthetics? -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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Synthetic+Monitors) page to configure your synthetics. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_discover-bmw-composite-service/conditional-naming-processgroup/README.md b/BMW-Dynatrace-config/CD_discover-bmw-composite-service/conditional-naming-processgroup/README.md new file mode 100644 index 00000000..f94196a5 --- /dev/null +++ b/BMW-Dynatrace-config/CD_discover-bmw-composite-service/conditional-naming-processgroup/README.md @@ -0,0 +1,67 @@ +### Process Group Detection Rules and Naming + +#### Detection Rule or Naming? + +For the explanation, we're using a real example of the Infotainment application: + +!(PGNaming1)[../../../../img/PGNaming1.PNG] + +Before working with your dashboards and alerting profiles, an important task to do when working with Dynatrace is checking +the structure of your applications (process groups). You can do that clicking under *technologies* and filter using your +application Management Zone. + +In the picture above, there are two Process Groups called bon-information-prod. **If you see duplicated process groups like in** +**this case, you MUST follow this guideline** + +Next step would be to open both process groups and compare the metadata. In that way, you can identify if all process instances are +part of the same application or not. An easy way to do that is asking yourself: how many instances of my application do i have? + +If you have 4 instances in total and you're able to see 2 in one PG and other 2 in other PG it means that **they are part of the ** +**same application** + +Another situation could be that checking on the metadata, then you see that are **two different application** and Dynatrace is just naming +the process group in the same way + +*Same application* +- Problem: Dynatrace is creating two different process groups, what transalates in two separated services for the same application. Instead of +seeing all the traffic in one service, you will have it splitted and it will complicate your monitoring +- Solution: create a process group detection rule. Contact Dynatrace Expert + +*Different application* +- Problem: Dynatrace is just naming in the same way applications that are different. +- Solution: This case is less severe, since it can be fixed with a process group naming rule. + + +What about our example? +!(PGNaming2)[../../../../img/PGNaming2.PNG] +!(PGNaming3)[../../../../img/PGNaming3.PNG] + +Based on the feedback of the infotaiment team, each process group is a different application (microservice) and it's visible in the kubernetes container/workload +within the metadata of each Process Group. + +#### How to create a Process Group Detection Rule +1. Open the *conditional-naming-processgroup.yaml* file and create a rule that looks like this: +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName} +- tag: Infotainment +- skipDeployment: false +``` +The result of the rule will be renaming the PG to this: +``` +bon-information-prod ipa +bon-information-prod rsl +``` + +Other possible placeholders that you can use are for example: +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName/[^\\-]*$} +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesFullPodName/buffet-(.*?)-} +{ProcessGroup:DetectedName} - {HostGroup:Name/[^\\_]*$} +{ProcessGroup:KubernetesNamespace} +{ProcessGroup:CommandLineArgs/.*?\\-f\\s\\/www\\/(.*?)\\/generated\\/httpd\\.conf.*?} + +You can combine different ones. Check the (documentation)[link] for more \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_discover-bmw-composite-service/conditional-naming-processgroup/conditional-naming-processgroup.yaml b/BMW-Dynatrace-config/CD_discover-bmw-composite-service/conditional-naming-processgroup/conditional-naming-processgroup.yaml new file mode 100644 index 00000000..48e1f3c9 --- /dev/null +++ b/BMW-Dynatrace-config/CD_discover-bmw-composite-service/conditional-naming-processgroup/conditional-naming-processgroup.yaml @@ -0,0 +1,8 @@ +config: +- CDdiscover-bmw-composite-service: template.json + +CDdiscover-bmw-composite-service: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: discover-bmw-composite-service +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_discover-bmw-composite-service/conditional-naming-processgroup/template.json b/BMW-Dynatrace-config/CD_discover-bmw-composite-service/conditional-naming-processgroup/template.json new file mode 100644 index 00000000..7c039808 --- /dev/null +++ b/BMW-Dynatrace-config/CD_discover-bmw-composite-service/conditional-naming-processgroup/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "type": "PROCESS_GROUP" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_discover-bmw-composite-service/conditional-naming-service/README.md b/BMW-Dynatrace-config/CD_discover-bmw-composite-service/conditional-naming-service/README.md new file mode 100644 index 00000000..c34ef308 --- /dev/null +++ b/BMW-Dynatrace-config/CD_discover-bmw-composite-service/conditional-naming-service/README.md @@ -0,0 +1,35 @@ +### Service Naming Rules + +A typical case could be that you access to *Transaction & Services* and you find two services that are exactly the same: +*DataDownloadV1* +*DataDownloadV1* + +If you drilldown into the service and you check in the process group, you may have a PROD and a E2E for each service. + +*Note: if you see that both process group are exactly the same, please contact a Dynatrace expert to create a Process* +*Group detection rule* + +In the case the PG are PROD and E2E, then we need to create a rule that looks like this: + +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {Service:DetectedName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +- tag: Infotainment +- skipDeployment: false +``` + +The rule will get the Service Detected Name (current name) and it will extract (with a regex) the part of the kubernetes namespace after the "-", so -prod or -e2e, resulting in: +*DataDownloadV1 - prod* +*DataDownloadV1 - e2e* + +Now, services will be easy to identify. + +You can create rules based on any property/metadata. Some other placeholder's eamples: +{Service:DatabaseName} - E2E +{Service:WebServiceName} - {ProcessGroup:Kubernetes:microservice} - {ProcessGroup:Kubernetes:environment} +{Service:DetectedName} - {ProcessGroup:KubernetesContainerName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +{Service:DetectedName} - {ProcessGroup:SpringBootProfileName/[^\\-]*$} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_discover-bmw-composite-service/conditional-naming-service/conditional-naming-service.yaml b/BMW-Dynatrace-config/CD_discover-bmw-composite-service/conditional-naming-service/conditional-naming-service.yaml new file mode 100644 index 00000000..48e1f3c9 --- /dev/null +++ b/BMW-Dynatrace-config/CD_discover-bmw-composite-service/conditional-naming-service/conditional-naming-service.yaml @@ -0,0 +1,8 @@ +config: +- CDdiscover-bmw-composite-service: template.json + +CDdiscover-bmw-composite-service: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: discover-bmw-composite-service +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_discover-bmw-composite-service/conditional-naming-service/template.json b/BMW-Dynatrace-config/CD_discover-bmw-composite-service/conditional-naming-service/template.json new file mode 100644 index 00000000..5d4fac56 --- /dev/null +++ b/BMW-Dynatrace-config/CD_discover-bmw-composite-service/conditional-naming-service/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "type": "SERVICE" +} \ 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 index d41c4c77..5f35e5c1 100644 --- 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 @@ -1,30 +1,4 @@ -## 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 configure custom services? -## 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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Custom+Services) page to configure your custom services. \ 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 index 92e734fa..1695924c 100644 --- 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 @@ -1,37 +1,4 @@ -# Synthetic Configuration -To calculate the Availability KPI, a synthetic must be configured. +### How to configure synthetics? -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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Synthetic+Monitors) page to configure your synthetics. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_dsd/conditional-naming-processgroup/README.md b/BMW-Dynatrace-config/CD_dsd/conditional-naming-processgroup/README.md new file mode 100644 index 00000000..f94196a5 --- /dev/null +++ b/BMW-Dynatrace-config/CD_dsd/conditional-naming-processgroup/README.md @@ -0,0 +1,67 @@ +### Process Group Detection Rules and Naming + +#### Detection Rule or Naming? + +For the explanation, we're using a real example of the Infotainment application: + +!(PGNaming1)[../../../../img/PGNaming1.PNG] + +Before working with your dashboards and alerting profiles, an important task to do when working with Dynatrace is checking +the structure of your applications (process groups). You can do that clicking under *technologies* and filter using your +application Management Zone. + +In the picture above, there are two Process Groups called bon-information-prod. **If you see duplicated process groups like in** +**this case, you MUST follow this guideline** + +Next step would be to open both process groups and compare the metadata. In that way, you can identify if all process instances are +part of the same application or not. An easy way to do that is asking yourself: how many instances of my application do i have? + +If you have 4 instances in total and you're able to see 2 in one PG and other 2 in other PG it means that **they are part of the ** +**same application** + +Another situation could be that checking on the metadata, then you see that are **two different application** and Dynatrace is just naming +the process group in the same way + +*Same application* +- Problem: Dynatrace is creating two different process groups, what transalates in two separated services for the same application. Instead of +seeing all the traffic in one service, you will have it splitted and it will complicate your monitoring +- Solution: create a process group detection rule. Contact Dynatrace Expert + +*Different application* +- Problem: Dynatrace is just naming in the same way applications that are different. +- Solution: This case is less severe, since it can be fixed with a process group naming rule. + + +What about our example? +!(PGNaming2)[../../../../img/PGNaming2.PNG] +!(PGNaming3)[../../../../img/PGNaming3.PNG] + +Based on the feedback of the infotaiment team, each process group is a different application (microservice) and it's visible in the kubernetes container/workload +within the metadata of each Process Group. + +#### How to create a Process Group Detection Rule +1. Open the *conditional-naming-processgroup.yaml* file and create a rule that looks like this: +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName} +- tag: Infotainment +- skipDeployment: false +``` +The result of the rule will be renaming the PG to this: +``` +bon-information-prod ipa +bon-information-prod rsl +``` + +Other possible placeholders that you can use are for example: +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName/[^\\-]*$} +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesFullPodName/buffet-(.*?)-} +{ProcessGroup:DetectedName} - {HostGroup:Name/[^\\_]*$} +{ProcessGroup:KubernetesNamespace} +{ProcessGroup:CommandLineArgs/.*?\\-f\\s\\/www\\/(.*?)\\/generated\\/httpd\\.conf.*?} + +You can combine different ones. Check the (documentation)[link] for more \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_dsd/conditional-naming-processgroup/conditional-naming-processgroup.yaml b/BMW-Dynatrace-config/CD_dsd/conditional-naming-processgroup/conditional-naming-processgroup.yaml new file mode 100644 index 00000000..09b9f03f --- /dev/null +++ b/BMW-Dynatrace-config/CD_dsd/conditional-naming-processgroup/conditional-naming-processgroup.yaml @@ -0,0 +1,8 @@ +config: +- CDdsd: template.json + +CDdsd: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: dsd +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_dsd/conditional-naming-processgroup/template.json b/BMW-Dynatrace-config/CD_dsd/conditional-naming-processgroup/template.json new file mode 100644 index 00000000..7c039808 --- /dev/null +++ b/BMW-Dynatrace-config/CD_dsd/conditional-naming-processgroup/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "type": "PROCESS_GROUP" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_dsd/conditional-naming-service/README.md b/BMW-Dynatrace-config/CD_dsd/conditional-naming-service/README.md new file mode 100644 index 00000000..c34ef308 --- /dev/null +++ b/BMW-Dynatrace-config/CD_dsd/conditional-naming-service/README.md @@ -0,0 +1,35 @@ +### Service Naming Rules + +A typical case could be that you access to *Transaction & Services* and you find two services that are exactly the same: +*DataDownloadV1* +*DataDownloadV1* + +If you drilldown into the service and you check in the process group, you may have a PROD and a E2E for each service. + +*Note: if you see that both process group are exactly the same, please contact a Dynatrace expert to create a Process* +*Group detection rule* + +In the case the PG are PROD and E2E, then we need to create a rule that looks like this: + +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {Service:DetectedName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +- tag: Infotainment +- skipDeployment: false +``` + +The rule will get the Service Detected Name (current name) and it will extract (with a regex) the part of the kubernetes namespace after the "-", so -prod or -e2e, resulting in: +*DataDownloadV1 - prod* +*DataDownloadV1 - e2e* + +Now, services will be easy to identify. + +You can create rules based on any property/metadata. Some other placeholder's eamples: +{Service:DatabaseName} - E2E +{Service:WebServiceName} - {ProcessGroup:Kubernetes:microservice} - {ProcessGroup:Kubernetes:environment} +{Service:DetectedName} - {ProcessGroup:KubernetesContainerName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +{Service:DetectedName} - {ProcessGroup:SpringBootProfileName/[^\\-]*$} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_dsd/conditional-naming-service/conditional-naming-service.yaml b/BMW-Dynatrace-config/CD_dsd/conditional-naming-service/conditional-naming-service.yaml new file mode 100644 index 00000000..09b9f03f --- /dev/null +++ b/BMW-Dynatrace-config/CD_dsd/conditional-naming-service/conditional-naming-service.yaml @@ -0,0 +1,8 @@ +config: +- CDdsd: template.json + +CDdsd: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: dsd +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_dsd/conditional-naming-service/template.json b/BMW-Dynatrace-config/CD_dsd/conditional-naming-service/template.json new file mode 100644 index 00000000..5d4fac56 --- /dev/null +++ b/BMW-Dynatrace-config/CD_dsd/conditional-naming-service/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "type": "SERVICE" +} \ 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 index d41c4c77..5f35e5c1 100644 --- a/BMW-Dynatrace-config/CD_dsd/custom-service-java/README.md +++ b/BMW-Dynatrace-config/CD_dsd/custom-service-java/README.md @@ -1,30 +1,4 @@ -## 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 configure custom services? -## 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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Custom+Services) page to configure your custom services. \ 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 index 92e734fa..1695924c 100644 --- a/BMW-Dynatrace-config/CD_dsd/synthetic-monitor/README.md +++ b/BMW-Dynatrace-config/CD_dsd/synthetic-monitor/README.md @@ -1,37 +1,4 @@ -# Synthetic Configuration -To calculate the Availability KPI, a synthetic must be configured. +### How to configure synthetics? -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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Synthetic+Monitors) page to configure your synthetics. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_eadb/conditional-naming-processgroup/README.md b/BMW-Dynatrace-config/CD_eadb/conditional-naming-processgroup/README.md new file mode 100644 index 00000000..f94196a5 --- /dev/null +++ b/BMW-Dynatrace-config/CD_eadb/conditional-naming-processgroup/README.md @@ -0,0 +1,67 @@ +### Process Group Detection Rules and Naming + +#### Detection Rule or Naming? + +For the explanation, we're using a real example of the Infotainment application: + +!(PGNaming1)[../../../../img/PGNaming1.PNG] + +Before working with your dashboards and alerting profiles, an important task to do when working with Dynatrace is checking +the structure of your applications (process groups). You can do that clicking under *technologies* and filter using your +application Management Zone. + +In the picture above, there are two Process Groups called bon-information-prod. **If you see duplicated process groups like in** +**this case, you MUST follow this guideline** + +Next step would be to open both process groups and compare the metadata. In that way, you can identify if all process instances are +part of the same application or not. An easy way to do that is asking yourself: how many instances of my application do i have? + +If you have 4 instances in total and you're able to see 2 in one PG and other 2 in other PG it means that **they are part of the ** +**same application** + +Another situation could be that checking on the metadata, then you see that are **two different application** and Dynatrace is just naming +the process group in the same way + +*Same application* +- Problem: Dynatrace is creating two different process groups, what transalates in two separated services for the same application. Instead of +seeing all the traffic in one service, you will have it splitted and it will complicate your monitoring +- Solution: create a process group detection rule. Contact Dynatrace Expert + +*Different application* +- Problem: Dynatrace is just naming in the same way applications that are different. +- Solution: This case is less severe, since it can be fixed with a process group naming rule. + + +What about our example? +!(PGNaming2)[../../../../img/PGNaming2.PNG] +!(PGNaming3)[../../../../img/PGNaming3.PNG] + +Based on the feedback of the infotaiment team, each process group is a different application (microservice) and it's visible in the kubernetes container/workload +within the metadata of each Process Group. + +#### How to create a Process Group Detection Rule +1. Open the *conditional-naming-processgroup.yaml* file and create a rule that looks like this: +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName} +- tag: Infotainment +- skipDeployment: false +``` +The result of the rule will be renaming the PG to this: +``` +bon-information-prod ipa +bon-information-prod rsl +``` + +Other possible placeholders that you can use are for example: +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName/[^\\-]*$} +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesFullPodName/buffet-(.*?)-} +{ProcessGroup:DetectedName} - {HostGroup:Name/[^\\_]*$} +{ProcessGroup:KubernetesNamespace} +{ProcessGroup:CommandLineArgs/.*?\\-f\\s\\/www\\/(.*?)\\/generated\\/httpd\\.conf.*?} + +You can combine different ones. Check the (documentation)[link] for more \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_eadb/conditional-naming-processgroup/conditional-naming-processgroup.yaml b/BMW-Dynatrace-config/CD_eadb/conditional-naming-processgroup/conditional-naming-processgroup.yaml new file mode 100644 index 00000000..6208aeb6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_eadb/conditional-naming-processgroup/conditional-naming-processgroup.yaml @@ -0,0 +1,8 @@ +config: +- CDeadb: template.json + +CDeadb: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: eadb +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_eadb/conditional-naming-processgroup/template.json b/BMW-Dynatrace-config/CD_eadb/conditional-naming-processgroup/template.json new file mode 100644 index 00000000..7c039808 --- /dev/null +++ b/BMW-Dynatrace-config/CD_eadb/conditional-naming-processgroup/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "type": "PROCESS_GROUP" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_eadb/conditional-naming-service/README.md b/BMW-Dynatrace-config/CD_eadb/conditional-naming-service/README.md new file mode 100644 index 00000000..c34ef308 --- /dev/null +++ b/BMW-Dynatrace-config/CD_eadb/conditional-naming-service/README.md @@ -0,0 +1,35 @@ +### Service Naming Rules + +A typical case could be that you access to *Transaction & Services* and you find two services that are exactly the same: +*DataDownloadV1* +*DataDownloadV1* + +If you drilldown into the service and you check in the process group, you may have a PROD and a E2E for each service. + +*Note: if you see that both process group are exactly the same, please contact a Dynatrace expert to create a Process* +*Group detection rule* + +In the case the PG are PROD and E2E, then we need to create a rule that looks like this: + +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {Service:DetectedName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +- tag: Infotainment +- skipDeployment: false +``` + +The rule will get the Service Detected Name (current name) and it will extract (with a regex) the part of the kubernetes namespace after the "-", so -prod or -e2e, resulting in: +*DataDownloadV1 - prod* +*DataDownloadV1 - e2e* + +Now, services will be easy to identify. + +You can create rules based on any property/metadata. Some other placeholder's eamples: +{Service:DatabaseName} - E2E +{Service:WebServiceName} - {ProcessGroup:Kubernetes:microservice} - {ProcessGroup:Kubernetes:environment} +{Service:DetectedName} - {ProcessGroup:KubernetesContainerName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +{Service:DetectedName} - {ProcessGroup:SpringBootProfileName/[^\\-]*$} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_eadb/conditional-naming-service/conditional-naming-service.yaml b/BMW-Dynatrace-config/CD_eadb/conditional-naming-service/conditional-naming-service.yaml new file mode 100644 index 00000000..6208aeb6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_eadb/conditional-naming-service/conditional-naming-service.yaml @@ -0,0 +1,8 @@ +config: +- CDeadb: template.json + +CDeadb: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: eadb +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_eadb/conditional-naming-service/template.json b/BMW-Dynatrace-config/CD_eadb/conditional-naming-service/template.json new file mode 100644 index 00000000..5d4fac56 --- /dev/null +++ b/BMW-Dynatrace-config/CD_eadb/conditional-naming-service/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "type": "SERVICE" +} \ 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 index d41c4c77..5f35e5c1 100644 --- a/BMW-Dynatrace-config/CD_eadb/custom-service-java/README.md +++ b/BMW-Dynatrace-config/CD_eadb/custom-service-java/README.md @@ -1,30 +1,4 @@ -## 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 configure custom services? -## 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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Custom+Services) page to configure your custom services. \ 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 index 92e734fa..1695924c 100644 --- a/BMW-Dynatrace-config/CD_eadb/synthetic-monitor/README.md +++ b/BMW-Dynatrace-config/CD_eadb/synthetic-monitor/README.md @@ -1,37 +1,4 @@ -# Synthetic Configuration -To calculate the Availability KPI, a synthetic must be configured. +### How to configure synthetics? -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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Synthetic+Monitors) page to configure your synthetics. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ercaf/conditional-naming-processgroup/README.md b/BMW-Dynatrace-config/CD_ercaf/conditional-naming-processgroup/README.md new file mode 100644 index 00000000..f94196a5 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ercaf/conditional-naming-processgroup/README.md @@ -0,0 +1,67 @@ +### Process Group Detection Rules and Naming + +#### Detection Rule or Naming? + +For the explanation, we're using a real example of the Infotainment application: + +!(PGNaming1)[../../../../img/PGNaming1.PNG] + +Before working with your dashboards and alerting profiles, an important task to do when working with Dynatrace is checking +the structure of your applications (process groups). You can do that clicking under *technologies* and filter using your +application Management Zone. + +In the picture above, there are two Process Groups called bon-information-prod. **If you see duplicated process groups like in** +**this case, you MUST follow this guideline** + +Next step would be to open both process groups and compare the metadata. In that way, you can identify if all process instances are +part of the same application or not. An easy way to do that is asking yourself: how many instances of my application do i have? + +If you have 4 instances in total and you're able to see 2 in one PG and other 2 in other PG it means that **they are part of the ** +**same application** + +Another situation could be that checking on the metadata, then you see that are **two different application** and Dynatrace is just naming +the process group in the same way + +*Same application* +- Problem: Dynatrace is creating two different process groups, what transalates in two separated services for the same application. Instead of +seeing all the traffic in one service, you will have it splitted and it will complicate your monitoring +- Solution: create a process group detection rule. Contact Dynatrace Expert + +*Different application* +- Problem: Dynatrace is just naming in the same way applications that are different. +- Solution: This case is less severe, since it can be fixed with a process group naming rule. + + +What about our example? +!(PGNaming2)[../../../../img/PGNaming2.PNG] +!(PGNaming3)[../../../../img/PGNaming3.PNG] + +Based on the feedback of the infotaiment team, each process group is a different application (microservice) and it's visible in the kubernetes container/workload +within the metadata of each Process Group. + +#### How to create a Process Group Detection Rule +1. Open the *conditional-naming-processgroup.yaml* file and create a rule that looks like this: +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName} +- tag: Infotainment +- skipDeployment: false +``` +The result of the rule will be renaming the PG to this: +``` +bon-information-prod ipa +bon-information-prod rsl +``` + +Other possible placeholders that you can use are for example: +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName/[^\\-]*$} +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesFullPodName/buffet-(.*?)-} +{ProcessGroup:DetectedName} - {HostGroup:Name/[^\\_]*$} +{ProcessGroup:KubernetesNamespace} +{ProcessGroup:CommandLineArgs/.*?\\-f\\s\\/www\\/(.*?)\\/generated\\/httpd\\.conf.*?} + +You can combine different ones. Check the (documentation)[link] for more \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ercaf/conditional-naming-processgroup/conditional-naming-processgroup.yaml b/BMW-Dynatrace-config/CD_ercaf/conditional-naming-processgroup/conditional-naming-processgroup.yaml new file mode 100644 index 00000000..02308b84 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ercaf/conditional-naming-processgroup/conditional-naming-processgroup.yaml @@ -0,0 +1,8 @@ +config: +- CDercaf: template.json + +CDercaf: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: ercaf +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_ercaf/conditional-naming-processgroup/template.json b/BMW-Dynatrace-config/CD_ercaf/conditional-naming-processgroup/template.json new file mode 100644 index 00000000..7c039808 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ercaf/conditional-naming-processgroup/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "type": "PROCESS_GROUP" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ercaf/conditional-naming-service/README.md b/BMW-Dynatrace-config/CD_ercaf/conditional-naming-service/README.md new file mode 100644 index 00000000..c34ef308 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ercaf/conditional-naming-service/README.md @@ -0,0 +1,35 @@ +### Service Naming Rules + +A typical case could be that you access to *Transaction & Services* and you find two services that are exactly the same: +*DataDownloadV1* +*DataDownloadV1* + +If you drilldown into the service and you check in the process group, you may have a PROD and a E2E for each service. + +*Note: if you see that both process group are exactly the same, please contact a Dynatrace expert to create a Process* +*Group detection rule* + +In the case the PG are PROD and E2E, then we need to create a rule that looks like this: + +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {Service:DetectedName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +- tag: Infotainment +- skipDeployment: false +``` + +The rule will get the Service Detected Name (current name) and it will extract (with a regex) the part of the kubernetes namespace after the "-", so -prod or -e2e, resulting in: +*DataDownloadV1 - prod* +*DataDownloadV1 - e2e* + +Now, services will be easy to identify. + +You can create rules based on any property/metadata. Some other placeholder's eamples: +{Service:DatabaseName} - E2E +{Service:WebServiceName} - {ProcessGroup:Kubernetes:microservice} - {ProcessGroup:Kubernetes:environment} +{Service:DetectedName} - {ProcessGroup:KubernetesContainerName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +{Service:DetectedName} - {ProcessGroup:SpringBootProfileName/[^\\-]*$} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ercaf/conditional-naming-service/conditional-naming-service.yaml b/BMW-Dynatrace-config/CD_ercaf/conditional-naming-service/conditional-naming-service.yaml new file mode 100644 index 00000000..02308b84 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ercaf/conditional-naming-service/conditional-naming-service.yaml @@ -0,0 +1,8 @@ +config: +- CDercaf: template.json + +CDercaf: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: ercaf +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_ercaf/conditional-naming-service/template.json b/BMW-Dynatrace-config/CD_ercaf/conditional-naming-service/template.json new file mode 100644 index 00000000..5d4fac56 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ercaf/conditional-naming-service/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "type": "SERVICE" +} \ 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 index d41c4c77..5f35e5c1 100644 --- a/BMW-Dynatrace-config/CD_ercaf/custom-service-java/README.md +++ b/BMW-Dynatrace-config/CD_ercaf/custom-service-java/README.md @@ -1,30 +1,4 @@ -## 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 configure custom services? -## 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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Custom+Services) page to configure your custom services. \ 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 index 92e734fa..1695924c 100644 --- a/BMW-Dynatrace-config/CD_ercaf/synthetic-monitor/README.md +++ b/BMW-Dynatrace-config/CD_ercaf/synthetic-monitor/README.md @@ -1,37 +1,4 @@ -# Synthetic Configuration -To calculate the Availability KPI, a synthetic must be configured. +### How to configure synthetics? -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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Synthetic+Monitors) page to configure your synthetics. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ercr/conditional-naming-processgroup/README.md b/BMW-Dynatrace-config/CD_ercr/conditional-naming-processgroup/README.md new file mode 100644 index 00000000..f94196a5 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ercr/conditional-naming-processgroup/README.md @@ -0,0 +1,67 @@ +### Process Group Detection Rules and Naming + +#### Detection Rule or Naming? + +For the explanation, we're using a real example of the Infotainment application: + +!(PGNaming1)[../../../../img/PGNaming1.PNG] + +Before working with your dashboards and alerting profiles, an important task to do when working with Dynatrace is checking +the structure of your applications (process groups). You can do that clicking under *technologies* and filter using your +application Management Zone. + +In the picture above, there are two Process Groups called bon-information-prod. **If you see duplicated process groups like in** +**this case, you MUST follow this guideline** + +Next step would be to open both process groups and compare the metadata. In that way, you can identify if all process instances are +part of the same application or not. An easy way to do that is asking yourself: how many instances of my application do i have? + +If you have 4 instances in total and you're able to see 2 in one PG and other 2 in other PG it means that **they are part of the ** +**same application** + +Another situation could be that checking on the metadata, then you see that are **two different application** and Dynatrace is just naming +the process group in the same way + +*Same application* +- Problem: Dynatrace is creating two different process groups, what transalates in two separated services for the same application. Instead of +seeing all the traffic in one service, you will have it splitted and it will complicate your monitoring +- Solution: create a process group detection rule. Contact Dynatrace Expert + +*Different application* +- Problem: Dynatrace is just naming in the same way applications that are different. +- Solution: This case is less severe, since it can be fixed with a process group naming rule. + + +What about our example? +!(PGNaming2)[../../../../img/PGNaming2.PNG] +!(PGNaming3)[../../../../img/PGNaming3.PNG] + +Based on the feedback of the infotaiment team, each process group is a different application (microservice) and it's visible in the kubernetes container/workload +within the metadata of each Process Group. + +#### How to create a Process Group Detection Rule +1. Open the *conditional-naming-processgroup.yaml* file and create a rule that looks like this: +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName} +- tag: Infotainment +- skipDeployment: false +``` +The result of the rule will be renaming the PG to this: +``` +bon-information-prod ipa +bon-information-prod rsl +``` + +Other possible placeholders that you can use are for example: +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName/[^\\-]*$} +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesFullPodName/buffet-(.*?)-} +{ProcessGroup:DetectedName} - {HostGroup:Name/[^\\_]*$} +{ProcessGroup:KubernetesNamespace} +{ProcessGroup:CommandLineArgs/.*?\\-f\\s\\/www\\/(.*?)\\/generated\\/httpd\\.conf.*?} + +You can combine different ones. Check the (documentation)[link] for more \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ercr/conditional-naming-processgroup/conditional-naming-processgroup.yaml b/BMW-Dynatrace-config/CD_ercr/conditional-naming-processgroup/conditional-naming-processgroup.yaml new file mode 100644 index 00000000..30d7c739 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ercr/conditional-naming-processgroup/conditional-naming-processgroup.yaml @@ -0,0 +1,8 @@ +config: +- CDercr: template.json + +CDercr: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: ercr +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_ercr/conditional-naming-processgroup/template.json b/BMW-Dynatrace-config/CD_ercr/conditional-naming-processgroup/template.json new file mode 100644 index 00000000..7c039808 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ercr/conditional-naming-processgroup/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "type": "PROCESS_GROUP" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ercr/conditional-naming-service/README.md b/BMW-Dynatrace-config/CD_ercr/conditional-naming-service/README.md new file mode 100644 index 00000000..c34ef308 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ercr/conditional-naming-service/README.md @@ -0,0 +1,35 @@ +### Service Naming Rules + +A typical case could be that you access to *Transaction & Services* and you find two services that are exactly the same: +*DataDownloadV1* +*DataDownloadV1* + +If you drilldown into the service and you check in the process group, you may have a PROD and a E2E for each service. + +*Note: if you see that both process group are exactly the same, please contact a Dynatrace expert to create a Process* +*Group detection rule* + +In the case the PG are PROD and E2E, then we need to create a rule that looks like this: + +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {Service:DetectedName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +- tag: Infotainment +- skipDeployment: false +``` + +The rule will get the Service Detected Name (current name) and it will extract (with a regex) the part of the kubernetes namespace after the "-", so -prod or -e2e, resulting in: +*DataDownloadV1 - prod* +*DataDownloadV1 - e2e* + +Now, services will be easy to identify. + +You can create rules based on any property/metadata. Some other placeholder's eamples: +{Service:DatabaseName} - E2E +{Service:WebServiceName} - {ProcessGroup:Kubernetes:microservice} - {ProcessGroup:Kubernetes:environment} +{Service:DetectedName} - {ProcessGroup:KubernetesContainerName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +{Service:DetectedName} - {ProcessGroup:SpringBootProfileName/[^\\-]*$} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ercr/conditional-naming-service/conditional-naming-service.yaml b/BMW-Dynatrace-config/CD_ercr/conditional-naming-service/conditional-naming-service.yaml new file mode 100644 index 00000000..30d7c739 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ercr/conditional-naming-service/conditional-naming-service.yaml @@ -0,0 +1,8 @@ +config: +- CDercr: template.json + +CDercr: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: ercr +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_ercr/conditional-naming-service/template.json b/BMW-Dynatrace-config/CD_ercr/conditional-naming-service/template.json new file mode 100644 index 00000000..5d4fac56 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ercr/conditional-naming-service/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "type": "SERVICE" +} \ 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 index d41c4c77..5f35e5c1 100644 --- a/BMW-Dynatrace-config/CD_ercr/custom-service-java/README.md +++ b/BMW-Dynatrace-config/CD_ercr/custom-service-java/README.md @@ -1,30 +1,4 @@ -## 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 configure custom services? -## 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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Custom+Services) page to configure your custom services. \ 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 index 92e734fa..1695924c 100644 --- a/BMW-Dynatrace-config/CD_ercr/synthetic-monitor/README.md +++ b/BMW-Dynatrace-config/CD_ercr/synthetic-monitor/README.md @@ -1,37 +1,4 @@ -# Synthetic Configuration -To calculate the Availability KPI, a synthetic must be configured. +### How to configure synthetics? -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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Synthetic+Monitors) page to configure your synthetics. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_erd/conditional-naming-processgroup/README.md b/BMW-Dynatrace-config/CD_erd/conditional-naming-processgroup/README.md new file mode 100644 index 00000000..f94196a5 --- /dev/null +++ b/BMW-Dynatrace-config/CD_erd/conditional-naming-processgroup/README.md @@ -0,0 +1,67 @@ +### Process Group Detection Rules and Naming + +#### Detection Rule or Naming? + +For the explanation, we're using a real example of the Infotainment application: + +!(PGNaming1)[../../../../img/PGNaming1.PNG] + +Before working with your dashboards and alerting profiles, an important task to do when working with Dynatrace is checking +the structure of your applications (process groups). You can do that clicking under *technologies* and filter using your +application Management Zone. + +In the picture above, there are two Process Groups called bon-information-prod. **If you see duplicated process groups like in** +**this case, you MUST follow this guideline** + +Next step would be to open both process groups and compare the metadata. In that way, you can identify if all process instances are +part of the same application or not. An easy way to do that is asking yourself: how many instances of my application do i have? + +If you have 4 instances in total and you're able to see 2 in one PG and other 2 in other PG it means that **they are part of the ** +**same application** + +Another situation could be that checking on the metadata, then you see that are **two different application** and Dynatrace is just naming +the process group in the same way + +*Same application* +- Problem: Dynatrace is creating two different process groups, what transalates in two separated services for the same application. Instead of +seeing all the traffic in one service, you will have it splitted and it will complicate your monitoring +- Solution: create a process group detection rule. Contact Dynatrace Expert + +*Different application* +- Problem: Dynatrace is just naming in the same way applications that are different. +- Solution: This case is less severe, since it can be fixed with a process group naming rule. + + +What about our example? +!(PGNaming2)[../../../../img/PGNaming2.PNG] +!(PGNaming3)[../../../../img/PGNaming3.PNG] + +Based on the feedback of the infotaiment team, each process group is a different application (microservice) and it's visible in the kubernetes container/workload +within the metadata of each Process Group. + +#### How to create a Process Group Detection Rule +1. Open the *conditional-naming-processgroup.yaml* file and create a rule that looks like this: +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName} +- tag: Infotainment +- skipDeployment: false +``` +The result of the rule will be renaming the PG to this: +``` +bon-information-prod ipa +bon-information-prod rsl +``` + +Other possible placeholders that you can use are for example: +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName/[^\\-]*$} +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesFullPodName/buffet-(.*?)-} +{ProcessGroup:DetectedName} - {HostGroup:Name/[^\\_]*$} +{ProcessGroup:KubernetesNamespace} +{ProcessGroup:CommandLineArgs/.*?\\-f\\s\\/www\\/(.*?)\\/generated\\/httpd\\.conf.*?} + +You can combine different ones. Check the (documentation)[link] for more \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_erd/conditional-naming-processgroup/conditional-naming-processgroup.yaml b/BMW-Dynatrace-config/CD_erd/conditional-naming-processgroup/conditional-naming-processgroup.yaml new file mode 100644 index 00000000..4c2273b1 --- /dev/null +++ b/BMW-Dynatrace-config/CD_erd/conditional-naming-processgroup/conditional-naming-processgroup.yaml @@ -0,0 +1,8 @@ +config: +- CDerd: template.json + +CDerd: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: erd +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_erd/conditional-naming-processgroup/template.json b/BMW-Dynatrace-config/CD_erd/conditional-naming-processgroup/template.json new file mode 100644 index 00000000..7c039808 --- /dev/null +++ b/BMW-Dynatrace-config/CD_erd/conditional-naming-processgroup/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "type": "PROCESS_GROUP" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_erd/conditional-naming-service/README.md b/BMW-Dynatrace-config/CD_erd/conditional-naming-service/README.md new file mode 100644 index 00000000..c34ef308 --- /dev/null +++ b/BMW-Dynatrace-config/CD_erd/conditional-naming-service/README.md @@ -0,0 +1,35 @@ +### Service Naming Rules + +A typical case could be that you access to *Transaction & Services* and you find two services that are exactly the same: +*DataDownloadV1* +*DataDownloadV1* + +If you drilldown into the service and you check in the process group, you may have a PROD and a E2E for each service. + +*Note: if you see that both process group are exactly the same, please contact a Dynatrace expert to create a Process* +*Group detection rule* + +In the case the PG are PROD and E2E, then we need to create a rule that looks like this: + +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {Service:DetectedName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +- tag: Infotainment +- skipDeployment: false +``` + +The rule will get the Service Detected Name (current name) and it will extract (with a regex) the part of the kubernetes namespace after the "-", so -prod or -e2e, resulting in: +*DataDownloadV1 - prod* +*DataDownloadV1 - e2e* + +Now, services will be easy to identify. + +You can create rules based on any property/metadata. Some other placeholder's eamples: +{Service:DatabaseName} - E2E +{Service:WebServiceName} - {ProcessGroup:Kubernetes:microservice} - {ProcessGroup:Kubernetes:environment} +{Service:DetectedName} - {ProcessGroup:KubernetesContainerName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +{Service:DetectedName} - {ProcessGroup:SpringBootProfileName/[^\\-]*$} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_erd/conditional-naming-service/conditional-naming-service.yaml b/BMW-Dynatrace-config/CD_erd/conditional-naming-service/conditional-naming-service.yaml new file mode 100644 index 00000000..4c2273b1 --- /dev/null +++ b/BMW-Dynatrace-config/CD_erd/conditional-naming-service/conditional-naming-service.yaml @@ -0,0 +1,8 @@ +config: +- CDerd: template.json + +CDerd: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: erd +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_erd/conditional-naming-service/template.json b/BMW-Dynatrace-config/CD_erd/conditional-naming-service/template.json new file mode 100644 index 00000000..5d4fac56 --- /dev/null +++ b/BMW-Dynatrace-config/CD_erd/conditional-naming-service/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "type": "SERVICE" +} \ 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 index d41c4c77..5f35e5c1 100644 --- a/BMW-Dynatrace-config/CD_erd/custom-service-java/README.md +++ b/BMW-Dynatrace-config/CD_erd/custom-service-java/README.md @@ -1,30 +1,4 @@ -## 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 configure custom services? -## 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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Custom+Services) page to configure your custom services. \ 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 index 92e734fa..1695924c 100644 --- a/BMW-Dynatrace-config/CD_erd/synthetic-monitor/README.md +++ b/BMW-Dynatrace-config/CD_erd/synthetic-monitor/README.md @@ -1,37 +1,4 @@ -# Synthetic Configuration -To calculate the Availability KPI, a synthetic must be configured. +### How to configure synthetics? -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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Synthetic+Monitors) page to configure your synthetics. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_esh/conditional-naming-processgroup/README.md b/BMW-Dynatrace-config/CD_esh/conditional-naming-processgroup/README.md new file mode 100644 index 00000000..f94196a5 --- /dev/null +++ b/BMW-Dynatrace-config/CD_esh/conditional-naming-processgroup/README.md @@ -0,0 +1,67 @@ +### Process Group Detection Rules and Naming + +#### Detection Rule or Naming? + +For the explanation, we're using a real example of the Infotainment application: + +!(PGNaming1)[../../../../img/PGNaming1.PNG] + +Before working with your dashboards and alerting profiles, an important task to do when working with Dynatrace is checking +the structure of your applications (process groups). You can do that clicking under *technologies* and filter using your +application Management Zone. + +In the picture above, there are two Process Groups called bon-information-prod. **If you see duplicated process groups like in** +**this case, you MUST follow this guideline** + +Next step would be to open both process groups and compare the metadata. In that way, you can identify if all process instances are +part of the same application or not. An easy way to do that is asking yourself: how many instances of my application do i have? + +If you have 4 instances in total and you're able to see 2 in one PG and other 2 in other PG it means that **they are part of the ** +**same application** + +Another situation could be that checking on the metadata, then you see that are **two different application** and Dynatrace is just naming +the process group in the same way + +*Same application* +- Problem: Dynatrace is creating two different process groups, what transalates in two separated services for the same application. Instead of +seeing all the traffic in one service, you will have it splitted and it will complicate your monitoring +- Solution: create a process group detection rule. Contact Dynatrace Expert + +*Different application* +- Problem: Dynatrace is just naming in the same way applications that are different. +- Solution: This case is less severe, since it can be fixed with a process group naming rule. + + +What about our example? +!(PGNaming2)[../../../../img/PGNaming2.PNG] +!(PGNaming3)[../../../../img/PGNaming3.PNG] + +Based on the feedback of the infotaiment team, each process group is a different application (microservice) and it's visible in the kubernetes container/workload +within the metadata of each Process Group. + +#### How to create a Process Group Detection Rule +1. Open the *conditional-naming-processgroup.yaml* file and create a rule that looks like this: +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName} +- tag: Infotainment +- skipDeployment: false +``` +The result of the rule will be renaming the PG to this: +``` +bon-information-prod ipa +bon-information-prod rsl +``` + +Other possible placeholders that you can use are for example: +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName/[^\\-]*$} +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesFullPodName/buffet-(.*?)-} +{ProcessGroup:DetectedName} - {HostGroup:Name/[^\\_]*$} +{ProcessGroup:KubernetesNamespace} +{ProcessGroup:CommandLineArgs/.*?\\-f\\s\\/www\\/(.*?)\\/generated\\/httpd\\.conf.*?} + +You can combine different ones. Check the (documentation)[link] for more \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_esh/conditional-naming-processgroup/conditional-naming-processgroup.yaml b/BMW-Dynatrace-config/CD_esh/conditional-naming-processgroup/conditional-naming-processgroup.yaml new file mode 100644 index 00000000..ff61a5c4 --- /dev/null +++ b/BMW-Dynatrace-config/CD_esh/conditional-naming-processgroup/conditional-naming-processgroup.yaml @@ -0,0 +1,8 @@ +config: +- CDesh: template.json + +CDesh: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: esh +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_esh/conditional-naming-processgroup/template.json b/BMW-Dynatrace-config/CD_esh/conditional-naming-processgroup/template.json new file mode 100644 index 00000000..7c039808 --- /dev/null +++ b/BMW-Dynatrace-config/CD_esh/conditional-naming-processgroup/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "type": "PROCESS_GROUP" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_esh/conditional-naming-service/README.md b/BMW-Dynatrace-config/CD_esh/conditional-naming-service/README.md new file mode 100644 index 00000000..c34ef308 --- /dev/null +++ b/BMW-Dynatrace-config/CD_esh/conditional-naming-service/README.md @@ -0,0 +1,35 @@ +### Service Naming Rules + +A typical case could be that you access to *Transaction & Services* and you find two services that are exactly the same: +*DataDownloadV1* +*DataDownloadV1* + +If you drilldown into the service and you check in the process group, you may have a PROD and a E2E for each service. + +*Note: if you see that both process group are exactly the same, please contact a Dynatrace expert to create a Process* +*Group detection rule* + +In the case the PG are PROD and E2E, then we need to create a rule that looks like this: + +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {Service:DetectedName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +- tag: Infotainment +- skipDeployment: false +``` + +The rule will get the Service Detected Name (current name) and it will extract (with a regex) the part of the kubernetes namespace after the "-", so -prod or -e2e, resulting in: +*DataDownloadV1 - prod* +*DataDownloadV1 - e2e* + +Now, services will be easy to identify. + +You can create rules based on any property/metadata. Some other placeholder's eamples: +{Service:DatabaseName} - E2E +{Service:WebServiceName} - {ProcessGroup:Kubernetes:microservice} - {ProcessGroup:Kubernetes:environment} +{Service:DetectedName} - {ProcessGroup:KubernetesContainerName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +{Service:DetectedName} - {ProcessGroup:SpringBootProfileName/[^\\-]*$} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_esh/conditional-naming-service/conditional-naming-service.yaml b/BMW-Dynatrace-config/CD_esh/conditional-naming-service/conditional-naming-service.yaml new file mode 100644 index 00000000..ff61a5c4 --- /dev/null +++ b/BMW-Dynatrace-config/CD_esh/conditional-naming-service/conditional-naming-service.yaml @@ -0,0 +1,8 @@ +config: +- CDesh: template.json + +CDesh: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: esh +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_esh/conditional-naming-service/template.json b/BMW-Dynatrace-config/CD_esh/conditional-naming-service/template.json new file mode 100644 index 00000000..5d4fac56 --- /dev/null +++ b/BMW-Dynatrace-config/CD_esh/conditional-naming-service/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "type": "SERVICE" +} \ 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 index d41c4c77..5f35e5c1 100644 --- a/BMW-Dynatrace-config/CD_esh/custom-service-java/README.md +++ b/BMW-Dynatrace-config/CD_esh/custom-service-java/README.md @@ -1,30 +1,4 @@ -## 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 configure custom services? -## 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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Custom+Services) page to configure your custom services. \ 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 index 92e734fa..1695924c 100644 --- a/BMW-Dynatrace-config/CD_esh/synthetic-monitor/README.md +++ b/BMW-Dynatrace-config/CD_esh/synthetic-monitor/README.md @@ -1,37 +1,4 @@ -# Synthetic Configuration -To calculate the Availability KPI, a synthetic must be configured. +### How to configure synthetics? -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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Synthetic+Monitors) page to configure your synthetics. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_esim-composite-service/conditional-naming-processgroup/README.md b/BMW-Dynatrace-config/CD_esim-composite-service/conditional-naming-processgroup/README.md new file mode 100644 index 00000000..f94196a5 --- /dev/null +++ b/BMW-Dynatrace-config/CD_esim-composite-service/conditional-naming-processgroup/README.md @@ -0,0 +1,67 @@ +### Process Group Detection Rules and Naming + +#### Detection Rule or Naming? + +For the explanation, we're using a real example of the Infotainment application: + +!(PGNaming1)[../../../../img/PGNaming1.PNG] + +Before working with your dashboards and alerting profiles, an important task to do when working with Dynatrace is checking +the structure of your applications (process groups). You can do that clicking under *technologies* and filter using your +application Management Zone. + +In the picture above, there are two Process Groups called bon-information-prod. **If you see duplicated process groups like in** +**this case, you MUST follow this guideline** + +Next step would be to open both process groups and compare the metadata. In that way, you can identify if all process instances are +part of the same application or not. An easy way to do that is asking yourself: how many instances of my application do i have? + +If you have 4 instances in total and you're able to see 2 in one PG and other 2 in other PG it means that **they are part of the ** +**same application** + +Another situation could be that checking on the metadata, then you see that are **two different application** and Dynatrace is just naming +the process group in the same way + +*Same application* +- Problem: Dynatrace is creating two different process groups, what transalates in two separated services for the same application. Instead of +seeing all the traffic in one service, you will have it splitted and it will complicate your monitoring +- Solution: create a process group detection rule. Contact Dynatrace Expert + +*Different application* +- Problem: Dynatrace is just naming in the same way applications that are different. +- Solution: This case is less severe, since it can be fixed with a process group naming rule. + + +What about our example? +!(PGNaming2)[../../../../img/PGNaming2.PNG] +!(PGNaming3)[../../../../img/PGNaming3.PNG] + +Based on the feedback of the infotaiment team, each process group is a different application (microservice) and it's visible in the kubernetes container/workload +within the metadata of each Process Group. + +#### How to create a Process Group Detection Rule +1. Open the *conditional-naming-processgroup.yaml* file and create a rule that looks like this: +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName} +- tag: Infotainment +- skipDeployment: false +``` +The result of the rule will be renaming the PG to this: +``` +bon-information-prod ipa +bon-information-prod rsl +``` + +Other possible placeholders that you can use are for example: +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName/[^\\-]*$} +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesFullPodName/buffet-(.*?)-} +{ProcessGroup:DetectedName} - {HostGroup:Name/[^\\_]*$} +{ProcessGroup:KubernetesNamespace} +{ProcessGroup:CommandLineArgs/.*?\\-f\\s\\/www\\/(.*?)\\/generated\\/httpd\\.conf.*?} + +You can combine different ones. Check the (documentation)[link] for more \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_esim-composite-service/conditional-naming-processgroup/conditional-naming-processgroup.yaml b/BMW-Dynatrace-config/CD_esim-composite-service/conditional-naming-processgroup/conditional-naming-processgroup.yaml new file mode 100644 index 00000000..484b8cd0 --- /dev/null +++ b/BMW-Dynatrace-config/CD_esim-composite-service/conditional-naming-processgroup/conditional-naming-processgroup.yaml @@ -0,0 +1,8 @@ +config: +- CDesim-composite-service: template.json + +CDesim-composite-service: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: esim-composite-service +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_esim-composite-service/conditional-naming-processgroup/template.json b/BMW-Dynatrace-config/CD_esim-composite-service/conditional-naming-processgroup/template.json new file mode 100644 index 00000000..7c039808 --- /dev/null +++ b/BMW-Dynatrace-config/CD_esim-composite-service/conditional-naming-processgroup/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "type": "PROCESS_GROUP" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_esim-composite-service/conditional-naming-service/README.md b/BMW-Dynatrace-config/CD_esim-composite-service/conditional-naming-service/README.md new file mode 100644 index 00000000..c34ef308 --- /dev/null +++ b/BMW-Dynatrace-config/CD_esim-composite-service/conditional-naming-service/README.md @@ -0,0 +1,35 @@ +### Service Naming Rules + +A typical case could be that you access to *Transaction & Services* and you find two services that are exactly the same: +*DataDownloadV1* +*DataDownloadV1* + +If you drilldown into the service and you check in the process group, you may have a PROD and a E2E for each service. + +*Note: if you see that both process group are exactly the same, please contact a Dynatrace expert to create a Process* +*Group detection rule* + +In the case the PG are PROD and E2E, then we need to create a rule that looks like this: + +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {Service:DetectedName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +- tag: Infotainment +- skipDeployment: false +``` + +The rule will get the Service Detected Name (current name) and it will extract (with a regex) the part of the kubernetes namespace after the "-", so -prod or -e2e, resulting in: +*DataDownloadV1 - prod* +*DataDownloadV1 - e2e* + +Now, services will be easy to identify. + +You can create rules based on any property/metadata. Some other placeholder's eamples: +{Service:DatabaseName} - E2E +{Service:WebServiceName} - {ProcessGroup:Kubernetes:microservice} - {ProcessGroup:Kubernetes:environment} +{Service:DetectedName} - {ProcessGroup:KubernetesContainerName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +{Service:DetectedName} - {ProcessGroup:SpringBootProfileName/[^\\-]*$} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_esim-composite-service/conditional-naming-service/conditional-naming-service.yaml b/BMW-Dynatrace-config/CD_esim-composite-service/conditional-naming-service/conditional-naming-service.yaml new file mode 100644 index 00000000..484b8cd0 --- /dev/null +++ b/BMW-Dynatrace-config/CD_esim-composite-service/conditional-naming-service/conditional-naming-service.yaml @@ -0,0 +1,8 @@ +config: +- CDesim-composite-service: template.json + +CDesim-composite-service: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: esim-composite-service +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_esim-composite-service/conditional-naming-service/template.json b/BMW-Dynatrace-config/CD_esim-composite-service/conditional-naming-service/template.json new file mode 100644 index 00000000..5d4fac56 --- /dev/null +++ b/BMW-Dynatrace-config/CD_esim-composite-service/conditional-naming-service/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "type": "SERVICE" +} \ 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 index d41c4c77..5f35e5c1 100644 --- 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 @@ -1,30 +1,4 @@ -## 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 configure custom services? -## 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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Custom+Services) page to configure your custom services. \ 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 index 92e734fa..1695924c 100644 --- a/BMW-Dynatrace-config/CD_esim-composite-service/synthetic-monitor/README.md +++ b/BMW-Dynatrace-config/CD_esim-composite-service/synthetic-monitor/README.md @@ -1,37 +1,4 @@ -# Synthetic Configuration -To calculate the Availability KPI, a synthetic must be configured. +### How to configure synthetics? -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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Synthetic+Monitors) page to configure your synthetics. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_explore-composite-service/conditional-naming-processgroup/README.md b/BMW-Dynatrace-config/CD_explore-composite-service/conditional-naming-processgroup/README.md new file mode 100644 index 00000000..f94196a5 --- /dev/null +++ b/BMW-Dynatrace-config/CD_explore-composite-service/conditional-naming-processgroup/README.md @@ -0,0 +1,67 @@ +### Process Group Detection Rules and Naming + +#### Detection Rule or Naming? + +For the explanation, we're using a real example of the Infotainment application: + +!(PGNaming1)[../../../../img/PGNaming1.PNG] + +Before working with your dashboards and alerting profiles, an important task to do when working with Dynatrace is checking +the structure of your applications (process groups). You can do that clicking under *technologies* and filter using your +application Management Zone. + +In the picture above, there are two Process Groups called bon-information-prod. **If you see duplicated process groups like in** +**this case, you MUST follow this guideline** + +Next step would be to open both process groups and compare the metadata. In that way, you can identify if all process instances are +part of the same application or not. An easy way to do that is asking yourself: how many instances of my application do i have? + +If you have 4 instances in total and you're able to see 2 in one PG and other 2 in other PG it means that **they are part of the ** +**same application** + +Another situation could be that checking on the metadata, then you see that are **two different application** and Dynatrace is just naming +the process group in the same way + +*Same application* +- Problem: Dynatrace is creating two different process groups, what transalates in two separated services for the same application. Instead of +seeing all the traffic in one service, you will have it splitted and it will complicate your monitoring +- Solution: create a process group detection rule. Contact Dynatrace Expert + +*Different application* +- Problem: Dynatrace is just naming in the same way applications that are different. +- Solution: This case is less severe, since it can be fixed with a process group naming rule. + + +What about our example? +!(PGNaming2)[../../../../img/PGNaming2.PNG] +!(PGNaming3)[../../../../img/PGNaming3.PNG] + +Based on the feedback of the infotaiment team, each process group is a different application (microservice) and it's visible in the kubernetes container/workload +within the metadata of each Process Group. + +#### How to create a Process Group Detection Rule +1. Open the *conditional-naming-processgroup.yaml* file and create a rule that looks like this: +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName} +- tag: Infotainment +- skipDeployment: false +``` +The result of the rule will be renaming the PG to this: +``` +bon-information-prod ipa +bon-information-prod rsl +``` + +Other possible placeholders that you can use are for example: +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName/[^\\-]*$} +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesFullPodName/buffet-(.*?)-} +{ProcessGroup:DetectedName} - {HostGroup:Name/[^\\_]*$} +{ProcessGroup:KubernetesNamespace} +{ProcessGroup:CommandLineArgs/.*?\\-f\\s\\/www\\/(.*?)\\/generated\\/httpd\\.conf.*?} + +You can combine different ones. Check the (documentation)[link] for more \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_explore-composite-service/conditional-naming-processgroup/conditional-naming-processgroup.yaml b/BMW-Dynatrace-config/CD_explore-composite-service/conditional-naming-processgroup/conditional-naming-processgroup.yaml new file mode 100644 index 00000000..0fa3cf61 --- /dev/null +++ b/BMW-Dynatrace-config/CD_explore-composite-service/conditional-naming-processgroup/conditional-naming-processgroup.yaml @@ -0,0 +1,8 @@ +config: +- CDexplore-composite-service: template.json + +CDexplore-composite-service: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: explore-composite-service +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_explore-composite-service/conditional-naming-processgroup/template.json b/BMW-Dynatrace-config/CD_explore-composite-service/conditional-naming-processgroup/template.json new file mode 100644 index 00000000..7c039808 --- /dev/null +++ b/BMW-Dynatrace-config/CD_explore-composite-service/conditional-naming-processgroup/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "type": "PROCESS_GROUP" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_explore-composite-service/conditional-naming-service/README.md b/BMW-Dynatrace-config/CD_explore-composite-service/conditional-naming-service/README.md new file mode 100644 index 00000000..c34ef308 --- /dev/null +++ b/BMW-Dynatrace-config/CD_explore-composite-service/conditional-naming-service/README.md @@ -0,0 +1,35 @@ +### Service Naming Rules + +A typical case could be that you access to *Transaction & Services* and you find two services that are exactly the same: +*DataDownloadV1* +*DataDownloadV1* + +If you drilldown into the service and you check in the process group, you may have a PROD and a E2E for each service. + +*Note: if you see that both process group are exactly the same, please contact a Dynatrace expert to create a Process* +*Group detection rule* + +In the case the PG are PROD and E2E, then we need to create a rule that looks like this: + +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {Service:DetectedName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +- tag: Infotainment +- skipDeployment: false +``` + +The rule will get the Service Detected Name (current name) and it will extract (with a regex) the part of the kubernetes namespace after the "-", so -prod or -e2e, resulting in: +*DataDownloadV1 - prod* +*DataDownloadV1 - e2e* + +Now, services will be easy to identify. + +You can create rules based on any property/metadata. Some other placeholder's eamples: +{Service:DatabaseName} - E2E +{Service:WebServiceName} - {ProcessGroup:Kubernetes:microservice} - {ProcessGroup:Kubernetes:environment} +{Service:DetectedName} - {ProcessGroup:KubernetesContainerName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +{Service:DetectedName} - {ProcessGroup:SpringBootProfileName/[^\\-]*$} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_explore-composite-service/conditional-naming-service/conditional-naming-service.yaml b/BMW-Dynatrace-config/CD_explore-composite-service/conditional-naming-service/conditional-naming-service.yaml new file mode 100644 index 00000000..0fa3cf61 --- /dev/null +++ b/BMW-Dynatrace-config/CD_explore-composite-service/conditional-naming-service/conditional-naming-service.yaml @@ -0,0 +1,8 @@ +config: +- CDexplore-composite-service: template.json + +CDexplore-composite-service: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: explore-composite-service +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_explore-composite-service/conditional-naming-service/template.json b/BMW-Dynatrace-config/CD_explore-composite-service/conditional-naming-service/template.json new file mode 100644 index 00000000..5d4fac56 --- /dev/null +++ b/BMW-Dynatrace-config/CD_explore-composite-service/conditional-naming-service/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "type": "SERVICE" +} \ 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 index d41c4c77..5f35e5c1 100644 --- 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 @@ -1,30 +1,4 @@ -## 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 configure custom services? -## 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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Custom+Services) page to configure your custom services. \ 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 index 92e734fa..1695924c 100644 --- a/BMW-Dynatrace-config/CD_explore-composite-service/synthetic-monitor/README.md +++ b/BMW-Dynatrace-config/CD_explore-composite-service/synthetic-monitor/README.md @@ -1,37 +1,4 @@ -# Synthetic Configuration -To calculate the Availability KPI, a synthetic must be configured. +### How to configure synthetics? -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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Synthetic+Monitors) page to configure your synthetics. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_feature-toggles-service/conditional-naming-processgroup/README.md b/BMW-Dynatrace-config/CD_feature-toggles-service/conditional-naming-processgroup/README.md new file mode 100644 index 00000000..f94196a5 --- /dev/null +++ b/BMW-Dynatrace-config/CD_feature-toggles-service/conditional-naming-processgroup/README.md @@ -0,0 +1,67 @@ +### Process Group Detection Rules and Naming + +#### Detection Rule or Naming? + +For the explanation, we're using a real example of the Infotainment application: + +!(PGNaming1)[../../../../img/PGNaming1.PNG] + +Before working with your dashboards and alerting profiles, an important task to do when working with Dynatrace is checking +the structure of your applications (process groups). You can do that clicking under *technologies* and filter using your +application Management Zone. + +In the picture above, there are two Process Groups called bon-information-prod. **If you see duplicated process groups like in** +**this case, you MUST follow this guideline** + +Next step would be to open both process groups and compare the metadata. In that way, you can identify if all process instances are +part of the same application or not. An easy way to do that is asking yourself: how many instances of my application do i have? + +If you have 4 instances in total and you're able to see 2 in one PG and other 2 in other PG it means that **they are part of the ** +**same application** + +Another situation could be that checking on the metadata, then you see that are **two different application** and Dynatrace is just naming +the process group in the same way + +*Same application* +- Problem: Dynatrace is creating two different process groups, what transalates in two separated services for the same application. Instead of +seeing all the traffic in one service, you will have it splitted and it will complicate your monitoring +- Solution: create a process group detection rule. Contact Dynatrace Expert + +*Different application* +- Problem: Dynatrace is just naming in the same way applications that are different. +- Solution: This case is less severe, since it can be fixed with a process group naming rule. + + +What about our example? +!(PGNaming2)[../../../../img/PGNaming2.PNG] +!(PGNaming3)[../../../../img/PGNaming3.PNG] + +Based on the feedback of the infotaiment team, each process group is a different application (microservice) and it's visible in the kubernetes container/workload +within the metadata of each Process Group. + +#### How to create a Process Group Detection Rule +1. Open the *conditional-naming-processgroup.yaml* file and create a rule that looks like this: +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName} +- tag: Infotainment +- skipDeployment: false +``` +The result of the rule will be renaming the PG to this: +``` +bon-information-prod ipa +bon-information-prod rsl +``` + +Other possible placeholders that you can use are for example: +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName/[^\\-]*$} +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesFullPodName/buffet-(.*?)-} +{ProcessGroup:DetectedName} - {HostGroup:Name/[^\\_]*$} +{ProcessGroup:KubernetesNamespace} +{ProcessGroup:CommandLineArgs/.*?\\-f\\s\\/www\\/(.*?)\\/generated\\/httpd\\.conf.*?} + +You can combine different ones. Check the (documentation)[link] for more \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_feature-toggles-service/conditional-naming-processgroup/conditional-naming-processgroup.yaml b/BMW-Dynatrace-config/CD_feature-toggles-service/conditional-naming-processgroup/conditional-naming-processgroup.yaml new file mode 100644 index 00000000..1dfcba34 --- /dev/null +++ b/BMW-Dynatrace-config/CD_feature-toggles-service/conditional-naming-processgroup/conditional-naming-processgroup.yaml @@ -0,0 +1,8 @@ +config: +- CDfeature-toggles-service: template.json + +CDfeature-toggles-service: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: feature-toggles-service +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_feature-toggles-service/conditional-naming-processgroup/template.json b/BMW-Dynatrace-config/CD_feature-toggles-service/conditional-naming-processgroup/template.json new file mode 100644 index 00000000..7c039808 --- /dev/null +++ b/BMW-Dynatrace-config/CD_feature-toggles-service/conditional-naming-processgroup/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "type": "PROCESS_GROUP" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_feature-toggles-service/conditional-naming-service/README.md b/BMW-Dynatrace-config/CD_feature-toggles-service/conditional-naming-service/README.md new file mode 100644 index 00000000..c34ef308 --- /dev/null +++ b/BMW-Dynatrace-config/CD_feature-toggles-service/conditional-naming-service/README.md @@ -0,0 +1,35 @@ +### Service Naming Rules + +A typical case could be that you access to *Transaction & Services* and you find two services that are exactly the same: +*DataDownloadV1* +*DataDownloadV1* + +If you drilldown into the service and you check in the process group, you may have a PROD and a E2E for each service. + +*Note: if you see that both process group are exactly the same, please contact a Dynatrace expert to create a Process* +*Group detection rule* + +In the case the PG are PROD and E2E, then we need to create a rule that looks like this: + +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {Service:DetectedName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +- tag: Infotainment +- skipDeployment: false +``` + +The rule will get the Service Detected Name (current name) and it will extract (with a regex) the part of the kubernetes namespace after the "-", so -prod or -e2e, resulting in: +*DataDownloadV1 - prod* +*DataDownloadV1 - e2e* + +Now, services will be easy to identify. + +You can create rules based on any property/metadata. Some other placeholder's eamples: +{Service:DatabaseName} - E2E +{Service:WebServiceName} - {ProcessGroup:Kubernetes:microservice} - {ProcessGroup:Kubernetes:environment} +{Service:DetectedName} - {ProcessGroup:KubernetesContainerName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +{Service:DetectedName} - {ProcessGroup:SpringBootProfileName/[^\\-]*$} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_feature-toggles-service/conditional-naming-service/conditional-naming-service.yaml b/BMW-Dynatrace-config/CD_feature-toggles-service/conditional-naming-service/conditional-naming-service.yaml new file mode 100644 index 00000000..1dfcba34 --- /dev/null +++ b/BMW-Dynatrace-config/CD_feature-toggles-service/conditional-naming-service/conditional-naming-service.yaml @@ -0,0 +1,8 @@ +config: +- CDfeature-toggles-service: template.json + +CDfeature-toggles-service: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: feature-toggles-service +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_feature-toggles-service/conditional-naming-service/template.json b/BMW-Dynatrace-config/CD_feature-toggles-service/conditional-naming-service/template.json new file mode 100644 index 00000000..5d4fac56 --- /dev/null +++ b/BMW-Dynatrace-config/CD_feature-toggles-service/conditional-naming-service/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "type": "SERVICE" +} \ 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 index d41c4c77..5f35e5c1 100644 --- 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 @@ -1,30 +1,4 @@ -## 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 configure custom services? -## 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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Custom+Services) page to configure your custom services. \ 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 index 92e734fa..1695924c 100644 --- a/BMW-Dynatrace-config/CD_feature-toggles-service/synthetic-monitor/README.md +++ b/BMW-Dynatrace-config/CD_feature-toggles-service/synthetic-monitor/README.md @@ -1,37 +1,4 @@ -# Synthetic Configuration -To calculate the Availability KPI, a synthetic must be configured. +### How to configure synthetics? -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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Synthetic+Monitors) page to configure your synthetics. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_fmc/conditional-naming-processgroup/README.md b/BMW-Dynatrace-config/CD_fmc/conditional-naming-processgroup/README.md new file mode 100644 index 00000000..f94196a5 --- /dev/null +++ b/BMW-Dynatrace-config/CD_fmc/conditional-naming-processgroup/README.md @@ -0,0 +1,67 @@ +### Process Group Detection Rules and Naming + +#### Detection Rule or Naming? + +For the explanation, we're using a real example of the Infotainment application: + +!(PGNaming1)[../../../../img/PGNaming1.PNG] + +Before working with your dashboards and alerting profiles, an important task to do when working with Dynatrace is checking +the structure of your applications (process groups). You can do that clicking under *technologies* and filter using your +application Management Zone. + +In the picture above, there are two Process Groups called bon-information-prod. **If you see duplicated process groups like in** +**this case, you MUST follow this guideline** + +Next step would be to open both process groups and compare the metadata. In that way, you can identify if all process instances are +part of the same application or not. An easy way to do that is asking yourself: how many instances of my application do i have? + +If you have 4 instances in total and you're able to see 2 in one PG and other 2 in other PG it means that **they are part of the ** +**same application** + +Another situation could be that checking on the metadata, then you see that are **two different application** and Dynatrace is just naming +the process group in the same way + +*Same application* +- Problem: Dynatrace is creating two different process groups, what transalates in two separated services for the same application. Instead of +seeing all the traffic in one service, you will have it splitted and it will complicate your monitoring +- Solution: create a process group detection rule. Contact Dynatrace Expert + +*Different application* +- Problem: Dynatrace is just naming in the same way applications that are different. +- Solution: This case is less severe, since it can be fixed with a process group naming rule. + + +What about our example? +!(PGNaming2)[../../../../img/PGNaming2.PNG] +!(PGNaming3)[../../../../img/PGNaming3.PNG] + +Based on the feedback of the infotaiment team, each process group is a different application (microservice) and it's visible in the kubernetes container/workload +within the metadata of each Process Group. + +#### How to create a Process Group Detection Rule +1. Open the *conditional-naming-processgroup.yaml* file and create a rule that looks like this: +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName} +- tag: Infotainment +- skipDeployment: false +``` +The result of the rule will be renaming the PG to this: +``` +bon-information-prod ipa +bon-information-prod rsl +``` + +Other possible placeholders that you can use are for example: +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName/[^\\-]*$} +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesFullPodName/buffet-(.*?)-} +{ProcessGroup:DetectedName} - {HostGroup:Name/[^\\_]*$} +{ProcessGroup:KubernetesNamespace} +{ProcessGroup:CommandLineArgs/.*?\\-f\\s\\/www\\/(.*?)\\/generated\\/httpd\\.conf.*?} + +You can combine different ones. Check the (documentation)[link] for more \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_fmc/conditional-naming-processgroup/conditional-naming-processgroup.yaml b/BMW-Dynatrace-config/CD_fmc/conditional-naming-processgroup/conditional-naming-processgroup.yaml new file mode 100644 index 00000000..99685fb8 --- /dev/null +++ b/BMW-Dynatrace-config/CD_fmc/conditional-naming-processgroup/conditional-naming-processgroup.yaml @@ -0,0 +1,8 @@ +config: +- CDfmc: template.json + +CDfmc: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: fmc +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_fmc/conditional-naming-processgroup/template.json b/BMW-Dynatrace-config/CD_fmc/conditional-naming-processgroup/template.json new file mode 100644 index 00000000..7c039808 --- /dev/null +++ b/BMW-Dynatrace-config/CD_fmc/conditional-naming-processgroup/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "type": "PROCESS_GROUP" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_fmc/conditional-naming-service/README.md b/BMW-Dynatrace-config/CD_fmc/conditional-naming-service/README.md new file mode 100644 index 00000000..c34ef308 --- /dev/null +++ b/BMW-Dynatrace-config/CD_fmc/conditional-naming-service/README.md @@ -0,0 +1,35 @@ +### Service Naming Rules + +A typical case could be that you access to *Transaction & Services* and you find two services that are exactly the same: +*DataDownloadV1* +*DataDownloadV1* + +If you drilldown into the service and you check in the process group, you may have a PROD and a E2E for each service. + +*Note: if you see that both process group are exactly the same, please contact a Dynatrace expert to create a Process* +*Group detection rule* + +In the case the PG are PROD and E2E, then we need to create a rule that looks like this: + +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {Service:DetectedName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +- tag: Infotainment +- skipDeployment: false +``` + +The rule will get the Service Detected Name (current name) and it will extract (with a regex) the part of the kubernetes namespace after the "-", so -prod or -e2e, resulting in: +*DataDownloadV1 - prod* +*DataDownloadV1 - e2e* + +Now, services will be easy to identify. + +You can create rules based on any property/metadata. Some other placeholder's eamples: +{Service:DatabaseName} - E2E +{Service:WebServiceName} - {ProcessGroup:Kubernetes:microservice} - {ProcessGroup:Kubernetes:environment} +{Service:DetectedName} - {ProcessGroup:KubernetesContainerName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +{Service:DetectedName} - {ProcessGroup:SpringBootProfileName/[^\\-]*$} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_fmc/conditional-naming-service/conditional-naming-service.yaml b/BMW-Dynatrace-config/CD_fmc/conditional-naming-service/conditional-naming-service.yaml new file mode 100644 index 00000000..99685fb8 --- /dev/null +++ b/BMW-Dynatrace-config/CD_fmc/conditional-naming-service/conditional-naming-service.yaml @@ -0,0 +1,8 @@ +config: +- CDfmc: template.json + +CDfmc: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: fmc +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_fmc/conditional-naming-service/template.json b/BMW-Dynatrace-config/CD_fmc/conditional-naming-service/template.json new file mode 100644 index 00000000..5d4fac56 --- /dev/null +++ b/BMW-Dynatrace-config/CD_fmc/conditional-naming-service/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "type": "SERVICE" +} \ 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 index d41c4c77..5f35e5c1 100644 --- a/BMW-Dynatrace-config/CD_fmc/custom-service-java/README.md +++ b/BMW-Dynatrace-config/CD_fmc/custom-service-java/README.md @@ -1,30 +1,4 @@ -## 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 configure custom services? -## 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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Custom+Services) page to configure your custom services. \ 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 index 92e734fa..1695924c 100644 --- a/BMW-Dynatrace-config/CD_fmc/synthetic-monitor/README.md +++ b/BMW-Dynatrace-config/CD_fmc/synthetic-monitor/README.md @@ -1,37 +1,4 @@ -# Synthetic Configuration -To calculate the Availability KPI, a synthetic must be configured. +### How to configure synthetics? -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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Synthetic+Monitors) page to configure your synthetics. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_fuel-search-service/conditional-naming-processgroup/README.md b/BMW-Dynatrace-config/CD_fuel-search-service/conditional-naming-processgroup/README.md new file mode 100644 index 00000000..f94196a5 --- /dev/null +++ b/BMW-Dynatrace-config/CD_fuel-search-service/conditional-naming-processgroup/README.md @@ -0,0 +1,67 @@ +### Process Group Detection Rules and Naming + +#### Detection Rule or Naming? + +For the explanation, we're using a real example of the Infotainment application: + +!(PGNaming1)[../../../../img/PGNaming1.PNG] + +Before working with your dashboards and alerting profiles, an important task to do when working with Dynatrace is checking +the structure of your applications (process groups). You can do that clicking under *technologies* and filter using your +application Management Zone. + +In the picture above, there are two Process Groups called bon-information-prod. **If you see duplicated process groups like in** +**this case, you MUST follow this guideline** + +Next step would be to open both process groups and compare the metadata. In that way, you can identify if all process instances are +part of the same application or not. An easy way to do that is asking yourself: how many instances of my application do i have? + +If you have 4 instances in total and you're able to see 2 in one PG and other 2 in other PG it means that **they are part of the ** +**same application** + +Another situation could be that checking on the metadata, then you see that are **two different application** and Dynatrace is just naming +the process group in the same way + +*Same application* +- Problem: Dynatrace is creating two different process groups, what transalates in two separated services for the same application. Instead of +seeing all the traffic in one service, you will have it splitted and it will complicate your monitoring +- Solution: create a process group detection rule. Contact Dynatrace Expert + +*Different application* +- Problem: Dynatrace is just naming in the same way applications that are different. +- Solution: This case is less severe, since it can be fixed with a process group naming rule. + + +What about our example? +!(PGNaming2)[../../../../img/PGNaming2.PNG] +!(PGNaming3)[../../../../img/PGNaming3.PNG] + +Based on the feedback of the infotaiment team, each process group is a different application (microservice) and it's visible in the kubernetes container/workload +within the metadata of each Process Group. + +#### How to create a Process Group Detection Rule +1. Open the *conditional-naming-processgroup.yaml* file and create a rule that looks like this: +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName} +- tag: Infotainment +- skipDeployment: false +``` +The result of the rule will be renaming the PG to this: +``` +bon-information-prod ipa +bon-information-prod rsl +``` + +Other possible placeholders that you can use are for example: +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName/[^\\-]*$} +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesFullPodName/buffet-(.*?)-} +{ProcessGroup:DetectedName} - {HostGroup:Name/[^\\_]*$} +{ProcessGroup:KubernetesNamespace} +{ProcessGroup:CommandLineArgs/.*?\\-f\\s\\/www\\/(.*?)\\/generated\\/httpd\\.conf.*?} + +You can combine different ones. Check the (documentation)[link] for more \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_fuel-search-service/conditional-naming-processgroup/conditional-naming-processgroup.yaml b/BMW-Dynatrace-config/CD_fuel-search-service/conditional-naming-processgroup/conditional-naming-processgroup.yaml new file mode 100644 index 00000000..e4bdb903 --- /dev/null +++ b/BMW-Dynatrace-config/CD_fuel-search-service/conditional-naming-processgroup/conditional-naming-processgroup.yaml @@ -0,0 +1,8 @@ +config: +- CDfuel-search-service: template.json + +CDfuel-search-service: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: fuel-search-service +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_fuel-search-service/conditional-naming-processgroup/template.json b/BMW-Dynatrace-config/CD_fuel-search-service/conditional-naming-processgroup/template.json new file mode 100644 index 00000000..7c039808 --- /dev/null +++ b/BMW-Dynatrace-config/CD_fuel-search-service/conditional-naming-processgroup/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "type": "PROCESS_GROUP" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_fuel-search-service/conditional-naming-service/README.md b/BMW-Dynatrace-config/CD_fuel-search-service/conditional-naming-service/README.md new file mode 100644 index 00000000..c34ef308 --- /dev/null +++ b/BMW-Dynatrace-config/CD_fuel-search-service/conditional-naming-service/README.md @@ -0,0 +1,35 @@ +### Service Naming Rules + +A typical case could be that you access to *Transaction & Services* and you find two services that are exactly the same: +*DataDownloadV1* +*DataDownloadV1* + +If you drilldown into the service and you check in the process group, you may have a PROD and a E2E for each service. + +*Note: if you see that both process group are exactly the same, please contact a Dynatrace expert to create a Process* +*Group detection rule* + +In the case the PG are PROD and E2E, then we need to create a rule that looks like this: + +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {Service:DetectedName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +- tag: Infotainment +- skipDeployment: false +``` + +The rule will get the Service Detected Name (current name) and it will extract (with a regex) the part of the kubernetes namespace after the "-", so -prod or -e2e, resulting in: +*DataDownloadV1 - prod* +*DataDownloadV1 - e2e* + +Now, services will be easy to identify. + +You can create rules based on any property/metadata. Some other placeholder's eamples: +{Service:DatabaseName} - E2E +{Service:WebServiceName} - {ProcessGroup:Kubernetes:microservice} - {ProcessGroup:Kubernetes:environment} +{Service:DetectedName} - {ProcessGroup:KubernetesContainerName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +{Service:DetectedName} - {ProcessGroup:SpringBootProfileName/[^\\-]*$} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_fuel-search-service/conditional-naming-service/conditional-naming-service.yaml b/BMW-Dynatrace-config/CD_fuel-search-service/conditional-naming-service/conditional-naming-service.yaml new file mode 100644 index 00000000..e4bdb903 --- /dev/null +++ b/BMW-Dynatrace-config/CD_fuel-search-service/conditional-naming-service/conditional-naming-service.yaml @@ -0,0 +1,8 @@ +config: +- CDfuel-search-service: template.json + +CDfuel-search-service: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: fuel-search-service +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_fuel-search-service/conditional-naming-service/template.json b/BMW-Dynatrace-config/CD_fuel-search-service/conditional-naming-service/template.json new file mode 100644 index 00000000..5d4fac56 --- /dev/null +++ b/BMW-Dynatrace-config/CD_fuel-search-service/conditional-naming-service/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "type": "SERVICE" +} \ 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 index d41c4c77..5f35e5c1 100644 --- 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 @@ -1,30 +1,4 @@ -## 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 configure custom services? -## 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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Custom+Services) page to configure your custom services. \ 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 index 92e734fa..1695924c 100644 --- a/BMW-Dynatrace-config/CD_fuel-search-service/synthetic-monitor/README.md +++ b/BMW-Dynatrace-config/CD_fuel-search-service/synthetic-monitor/README.md @@ -1,37 +1,4 @@ -# Synthetic Configuration -To calculate the Availability KPI, a synthetic must be configured. +### How to configure synthetics? -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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Synthetic+Monitors) page to configure your synthetics. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_hpauth/conditional-naming-processgroup/README.md b/BMW-Dynatrace-config/CD_hpauth/conditional-naming-processgroup/README.md new file mode 100644 index 00000000..f94196a5 --- /dev/null +++ b/BMW-Dynatrace-config/CD_hpauth/conditional-naming-processgroup/README.md @@ -0,0 +1,67 @@ +### Process Group Detection Rules and Naming + +#### Detection Rule or Naming? + +For the explanation, we're using a real example of the Infotainment application: + +!(PGNaming1)[../../../../img/PGNaming1.PNG] + +Before working with your dashboards and alerting profiles, an important task to do when working with Dynatrace is checking +the structure of your applications (process groups). You can do that clicking under *technologies* and filter using your +application Management Zone. + +In the picture above, there are two Process Groups called bon-information-prod. **If you see duplicated process groups like in** +**this case, you MUST follow this guideline** + +Next step would be to open both process groups and compare the metadata. In that way, you can identify if all process instances are +part of the same application or not. An easy way to do that is asking yourself: how many instances of my application do i have? + +If you have 4 instances in total and you're able to see 2 in one PG and other 2 in other PG it means that **they are part of the ** +**same application** + +Another situation could be that checking on the metadata, then you see that are **two different application** and Dynatrace is just naming +the process group in the same way + +*Same application* +- Problem: Dynatrace is creating two different process groups, what transalates in two separated services for the same application. Instead of +seeing all the traffic in one service, you will have it splitted and it will complicate your monitoring +- Solution: create a process group detection rule. Contact Dynatrace Expert + +*Different application* +- Problem: Dynatrace is just naming in the same way applications that are different. +- Solution: This case is less severe, since it can be fixed with a process group naming rule. + + +What about our example? +!(PGNaming2)[../../../../img/PGNaming2.PNG] +!(PGNaming3)[../../../../img/PGNaming3.PNG] + +Based on the feedback of the infotaiment team, each process group is a different application (microservice) and it's visible in the kubernetes container/workload +within the metadata of each Process Group. + +#### How to create a Process Group Detection Rule +1. Open the *conditional-naming-processgroup.yaml* file and create a rule that looks like this: +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName} +- tag: Infotainment +- skipDeployment: false +``` +The result of the rule will be renaming the PG to this: +``` +bon-information-prod ipa +bon-information-prod rsl +``` + +Other possible placeholders that you can use are for example: +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName/[^\\-]*$} +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesFullPodName/buffet-(.*?)-} +{ProcessGroup:DetectedName} - {HostGroup:Name/[^\\_]*$} +{ProcessGroup:KubernetesNamespace} +{ProcessGroup:CommandLineArgs/.*?\\-f\\s\\/www\\/(.*?)\\/generated\\/httpd\\.conf.*?} + +You can combine different ones. Check the (documentation)[link] for more \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_hpauth/conditional-naming-processgroup/conditional-naming-processgroup.yaml b/BMW-Dynatrace-config/CD_hpauth/conditional-naming-processgroup/conditional-naming-processgroup.yaml new file mode 100644 index 00000000..56d546ac --- /dev/null +++ b/BMW-Dynatrace-config/CD_hpauth/conditional-naming-processgroup/conditional-naming-processgroup.yaml @@ -0,0 +1,8 @@ +config: +- CDhpauth: template.json + +CDhpauth: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: hpauth +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_hpauth/conditional-naming-processgroup/template.json b/BMW-Dynatrace-config/CD_hpauth/conditional-naming-processgroup/template.json new file mode 100644 index 00000000..7c039808 --- /dev/null +++ b/BMW-Dynatrace-config/CD_hpauth/conditional-naming-processgroup/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "type": "PROCESS_GROUP" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_hpauth/conditional-naming-service/README.md b/BMW-Dynatrace-config/CD_hpauth/conditional-naming-service/README.md new file mode 100644 index 00000000..c34ef308 --- /dev/null +++ b/BMW-Dynatrace-config/CD_hpauth/conditional-naming-service/README.md @@ -0,0 +1,35 @@ +### Service Naming Rules + +A typical case could be that you access to *Transaction & Services* and you find two services that are exactly the same: +*DataDownloadV1* +*DataDownloadV1* + +If you drilldown into the service and you check in the process group, you may have a PROD and a E2E for each service. + +*Note: if you see that both process group are exactly the same, please contact a Dynatrace expert to create a Process* +*Group detection rule* + +In the case the PG are PROD and E2E, then we need to create a rule that looks like this: + +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {Service:DetectedName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +- tag: Infotainment +- skipDeployment: false +``` + +The rule will get the Service Detected Name (current name) and it will extract (with a regex) the part of the kubernetes namespace after the "-", so -prod or -e2e, resulting in: +*DataDownloadV1 - prod* +*DataDownloadV1 - e2e* + +Now, services will be easy to identify. + +You can create rules based on any property/metadata. Some other placeholder's eamples: +{Service:DatabaseName} - E2E +{Service:WebServiceName} - {ProcessGroup:Kubernetes:microservice} - {ProcessGroup:Kubernetes:environment} +{Service:DetectedName} - {ProcessGroup:KubernetesContainerName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +{Service:DetectedName} - {ProcessGroup:SpringBootProfileName/[^\\-]*$} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_hpauth/conditional-naming-service/conditional-naming-service.yaml b/BMW-Dynatrace-config/CD_hpauth/conditional-naming-service/conditional-naming-service.yaml new file mode 100644 index 00000000..56d546ac --- /dev/null +++ b/BMW-Dynatrace-config/CD_hpauth/conditional-naming-service/conditional-naming-service.yaml @@ -0,0 +1,8 @@ +config: +- CDhpauth: template.json + +CDhpauth: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: hpauth +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_hpauth/conditional-naming-service/template.json b/BMW-Dynatrace-config/CD_hpauth/conditional-naming-service/template.json new file mode 100644 index 00000000..5d4fac56 --- /dev/null +++ b/BMW-Dynatrace-config/CD_hpauth/conditional-naming-service/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "type": "SERVICE" +} \ 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 index d41c4c77..5f35e5c1 100644 --- a/BMW-Dynatrace-config/CD_hpauth/custom-service-java/README.md +++ b/BMW-Dynatrace-config/CD_hpauth/custom-service-java/README.md @@ -1,30 +1,4 @@ -## 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 configure custom services? -## 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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Custom+Services) page to configure your custom services. \ 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 index 92e734fa..1695924c 100644 --- a/BMW-Dynatrace-config/CD_hpauth/synthetic-monitor/README.md +++ b/BMW-Dynatrace-config/CD_hpauth/synthetic-monitor/README.md @@ -1,37 +1,4 @@ -# Synthetic Configuration -To calculate the Availability KPI, a synthetic must be configured. +### How to configure synthetics? -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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Synthetic+Monitors) page to configure your synthetics. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_hubtab-service/conditional-naming-processgroup/README.md b/BMW-Dynatrace-config/CD_hubtab-service/conditional-naming-processgroup/README.md new file mode 100644 index 00000000..f94196a5 --- /dev/null +++ b/BMW-Dynatrace-config/CD_hubtab-service/conditional-naming-processgroup/README.md @@ -0,0 +1,67 @@ +### Process Group Detection Rules and Naming + +#### Detection Rule or Naming? + +For the explanation, we're using a real example of the Infotainment application: + +!(PGNaming1)[../../../../img/PGNaming1.PNG] + +Before working with your dashboards and alerting profiles, an important task to do when working with Dynatrace is checking +the structure of your applications (process groups). You can do that clicking under *technologies* and filter using your +application Management Zone. + +In the picture above, there are two Process Groups called bon-information-prod. **If you see duplicated process groups like in** +**this case, you MUST follow this guideline** + +Next step would be to open both process groups and compare the metadata. In that way, you can identify if all process instances are +part of the same application or not. An easy way to do that is asking yourself: how many instances of my application do i have? + +If you have 4 instances in total and you're able to see 2 in one PG and other 2 in other PG it means that **they are part of the ** +**same application** + +Another situation could be that checking on the metadata, then you see that are **two different application** and Dynatrace is just naming +the process group in the same way + +*Same application* +- Problem: Dynatrace is creating two different process groups, what transalates in two separated services for the same application. Instead of +seeing all the traffic in one service, you will have it splitted and it will complicate your monitoring +- Solution: create a process group detection rule. Contact Dynatrace Expert + +*Different application* +- Problem: Dynatrace is just naming in the same way applications that are different. +- Solution: This case is less severe, since it can be fixed with a process group naming rule. + + +What about our example? +!(PGNaming2)[../../../../img/PGNaming2.PNG] +!(PGNaming3)[../../../../img/PGNaming3.PNG] + +Based on the feedback of the infotaiment team, each process group is a different application (microservice) and it's visible in the kubernetes container/workload +within the metadata of each Process Group. + +#### How to create a Process Group Detection Rule +1. Open the *conditional-naming-processgroup.yaml* file and create a rule that looks like this: +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName} +- tag: Infotainment +- skipDeployment: false +``` +The result of the rule will be renaming the PG to this: +``` +bon-information-prod ipa +bon-information-prod rsl +``` + +Other possible placeholders that you can use are for example: +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName/[^\\-]*$} +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesFullPodName/buffet-(.*?)-} +{ProcessGroup:DetectedName} - {HostGroup:Name/[^\\_]*$} +{ProcessGroup:KubernetesNamespace} +{ProcessGroup:CommandLineArgs/.*?\\-f\\s\\/www\\/(.*?)\\/generated\\/httpd\\.conf.*?} + +You can combine different ones. Check the (documentation)[link] for more \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_hubtab-service/conditional-naming-processgroup/conditional-naming-processgroup.yaml b/BMW-Dynatrace-config/CD_hubtab-service/conditional-naming-processgroup/conditional-naming-processgroup.yaml new file mode 100644 index 00000000..12a07306 --- /dev/null +++ b/BMW-Dynatrace-config/CD_hubtab-service/conditional-naming-processgroup/conditional-naming-processgroup.yaml @@ -0,0 +1,8 @@ +config: +- CDhubtab-service: template.json + +CDhubtab-service: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: hubtab-service +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_hubtab-service/conditional-naming-processgroup/template.json b/BMW-Dynatrace-config/CD_hubtab-service/conditional-naming-processgroup/template.json new file mode 100644 index 00000000..7c039808 --- /dev/null +++ b/BMW-Dynatrace-config/CD_hubtab-service/conditional-naming-processgroup/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "type": "PROCESS_GROUP" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_hubtab-service/conditional-naming-service/README.md b/BMW-Dynatrace-config/CD_hubtab-service/conditional-naming-service/README.md new file mode 100644 index 00000000..c34ef308 --- /dev/null +++ b/BMW-Dynatrace-config/CD_hubtab-service/conditional-naming-service/README.md @@ -0,0 +1,35 @@ +### Service Naming Rules + +A typical case could be that you access to *Transaction & Services* and you find two services that are exactly the same: +*DataDownloadV1* +*DataDownloadV1* + +If you drilldown into the service and you check in the process group, you may have a PROD and a E2E for each service. + +*Note: if you see that both process group are exactly the same, please contact a Dynatrace expert to create a Process* +*Group detection rule* + +In the case the PG are PROD and E2E, then we need to create a rule that looks like this: + +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {Service:DetectedName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +- tag: Infotainment +- skipDeployment: false +``` + +The rule will get the Service Detected Name (current name) and it will extract (with a regex) the part of the kubernetes namespace after the "-", so -prod or -e2e, resulting in: +*DataDownloadV1 - prod* +*DataDownloadV1 - e2e* + +Now, services will be easy to identify. + +You can create rules based on any property/metadata. Some other placeholder's eamples: +{Service:DatabaseName} - E2E +{Service:WebServiceName} - {ProcessGroup:Kubernetes:microservice} - {ProcessGroup:Kubernetes:environment} +{Service:DetectedName} - {ProcessGroup:KubernetesContainerName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +{Service:DetectedName} - {ProcessGroup:SpringBootProfileName/[^\\-]*$} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_hubtab-service/conditional-naming-service/conditional-naming-service.yaml b/BMW-Dynatrace-config/CD_hubtab-service/conditional-naming-service/conditional-naming-service.yaml new file mode 100644 index 00000000..12a07306 --- /dev/null +++ b/BMW-Dynatrace-config/CD_hubtab-service/conditional-naming-service/conditional-naming-service.yaml @@ -0,0 +1,8 @@ +config: +- CDhubtab-service: template.json + +CDhubtab-service: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: hubtab-service +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_hubtab-service/conditional-naming-service/template.json b/BMW-Dynatrace-config/CD_hubtab-service/conditional-naming-service/template.json new file mode 100644 index 00000000..5d4fac56 --- /dev/null +++ b/BMW-Dynatrace-config/CD_hubtab-service/conditional-naming-service/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "type": "SERVICE" +} \ 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 index d41c4c77..5f35e5c1 100644 --- a/BMW-Dynatrace-config/CD_hubtab-service/custom-service-java/README.md +++ b/BMW-Dynatrace-config/CD_hubtab-service/custom-service-java/README.md @@ -1,30 +1,4 @@ -## 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 configure custom services? -## 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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Custom+Services) page to configure your custom services. \ 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 index 92e734fa..1695924c 100644 --- a/BMW-Dynatrace-config/CD_hubtab-service/synthetic-monitor/README.md +++ b/BMW-Dynatrace-config/CD_hubtab-service/synthetic-monitor/README.md @@ -1,37 +1,4 @@ -# Synthetic Configuration -To calculate the Availability KPI, a synthetic must be configured. +### How to configure synthetics? -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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Synthetic+Monitors) page to configure your synthetics. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_id-lookup-service/conditional-naming-processgroup/README.md b/BMW-Dynatrace-config/CD_id-lookup-service/conditional-naming-processgroup/README.md new file mode 100644 index 00000000..f94196a5 --- /dev/null +++ b/BMW-Dynatrace-config/CD_id-lookup-service/conditional-naming-processgroup/README.md @@ -0,0 +1,67 @@ +### Process Group Detection Rules and Naming + +#### Detection Rule or Naming? + +For the explanation, we're using a real example of the Infotainment application: + +!(PGNaming1)[../../../../img/PGNaming1.PNG] + +Before working with your dashboards and alerting profiles, an important task to do when working with Dynatrace is checking +the structure of your applications (process groups). You can do that clicking under *technologies* and filter using your +application Management Zone. + +In the picture above, there are two Process Groups called bon-information-prod. **If you see duplicated process groups like in** +**this case, you MUST follow this guideline** + +Next step would be to open both process groups and compare the metadata. In that way, you can identify if all process instances are +part of the same application or not. An easy way to do that is asking yourself: how many instances of my application do i have? + +If you have 4 instances in total and you're able to see 2 in one PG and other 2 in other PG it means that **they are part of the ** +**same application** + +Another situation could be that checking on the metadata, then you see that are **two different application** and Dynatrace is just naming +the process group in the same way + +*Same application* +- Problem: Dynatrace is creating two different process groups, what transalates in two separated services for the same application. Instead of +seeing all the traffic in one service, you will have it splitted and it will complicate your monitoring +- Solution: create a process group detection rule. Contact Dynatrace Expert + +*Different application* +- Problem: Dynatrace is just naming in the same way applications that are different. +- Solution: This case is less severe, since it can be fixed with a process group naming rule. + + +What about our example? +!(PGNaming2)[../../../../img/PGNaming2.PNG] +!(PGNaming3)[../../../../img/PGNaming3.PNG] + +Based on the feedback of the infotaiment team, each process group is a different application (microservice) and it's visible in the kubernetes container/workload +within the metadata of each Process Group. + +#### How to create a Process Group Detection Rule +1. Open the *conditional-naming-processgroup.yaml* file and create a rule that looks like this: +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName} +- tag: Infotainment +- skipDeployment: false +``` +The result of the rule will be renaming the PG to this: +``` +bon-information-prod ipa +bon-information-prod rsl +``` + +Other possible placeholders that you can use are for example: +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName/[^\\-]*$} +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesFullPodName/buffet-(.*?)-} +{ProcessGroup:DetectedName} - {HostGroup:Name/[^\\_]*$} +{ProcessGroup:KubernetesNamespace} +{ProcessGroup:CommandLineArgs/.*?\\-f\\s\\/www\\/(.*?)\\/generated\\/httpd\\.conf.*?} + +You can combine different ones. Check the (documentation)[link] for more \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_id-lookup-service/conditional-naming-processgroup/conditional-naming-processgroup.yaml b/BMW-Dynatrace-config/CD_id-lookup-service/conditional-naming-processgroup/conditional-naming-processgroup.yaml new file mode 100644 index 00000000..a25b68f3 --- /dev/null +++ b/BMW-Dynatrace-config/CD_id-lookup-service/conditional-naming-processgroup/conditional-naming-processgroup.yaml @@ -0,0 +1,8 @@ +config: +- CDid-lookup-service: template.json + +CDid-lookup-service: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: id-lookup-service +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_id-lookup-service/conditional-naming-processgroup/template.json b/BMW-Dynatrace-config/CD_id-lookup-service/conditional-naming-processgroup/template.json new file mode 100644 index 00000000..7c039808 --- /dev/null +++ b/BMW-Dynatrace-config/CD_id-lookup-service/conditional-naming-processgroup/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "type": "PROCESS_GROUP" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_id-lookup-service/conditional-naming-service/README.md b/BMW-Dynatrace-config/CD_id-lookup-service/conditional-naming-service/README.md new file mode 100644 index 00000000..c34ef308 --- /dev/null +++ b/BMW-Dynatrace-config/CD_id-lookup-service/conditional-naming-service/README.md @@ -0,0 +1,35 @@ +### Service Naming Rules + +A typical case could be that you access to *Transaction & Services* and you find two services that are exactly the same: +*DataDownloadV1* +*DataDownloadV1* + +If you drilldown into the service and you check in the process group, you may have a PROD and a E2E for each service. + +*Note: if you see that both process group are exactly the same, please contact a Dynatrace expert to create a Process* +*Group detection rule* + +In the case the PG are PROD and E2E, then we need to create a rule that looks like this: + +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {Service:DetectedName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +- tag: Infotainment +- skipDeployment: false +``` + +The rule will get the Service Detected Name (current name) and it will extract (with a regex) the part of the kubernetes namespace after the "-", so -prod or -e2e, resulting in: +*DataDownloadV1 - prod* +*DataDownloadV1 - e2e* + +Now, services will be easy to identify. + +You can create rules based on any property/metadata. Some other placeholder's eamples: +{Service:DatabaseName} - E2E +{Service:WebServiceName} - {ProcessGroup:Kubernetes:microservice} - {ProcessGroup:Kubernetes:environment} +{Service:DetectedName} - {ProcessGroup:KubernetesContainerName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +{Service:DetectedName} - {ProcessGroup:SpringBootProfileName/[^\\-]*$} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_id-lookup-service/conditional-naming-service/conditional-naming-service.yaml b/BMW-Dynatrace-config/CD_id-lookup-service/conditional-naming-service/conditional-naming-service.yaml new file mode 100644 index 00000000..a25b68f3 --- /dev/null +++ b/BMW-Dynatrace-config/CD_id-lookup-service/conditional-naming-service/conditional-naming-service.yaml @@ -0,0 +1,8 @@ +config: +- CDid-lookup-service: template.json + +CDid-lookup-service: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: id-lookup-service +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_id-lookup-service/conditional-naming-service/template.json b/BMW-Dynatrace-config/CD_id-lookup-service/conditional-naming-service/template.json new file mode 100644 index 00000000..5d4fac56 --- /dev/null +++ b/BMW-Dynatrace-config/CD_id-lookup-service/conditional-naming-service/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "type": "SERVICE" +} \ 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 index d41c4c77..5f35e5c1 100644 --- 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 @@ -1,30 +1,4 @@ -## 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 configure custom services? -## 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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Custom+Services) page to configure your custom services. \ 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 index 92e734fa..1695924c 100644 --- a/BMW-Dynatrace-config/CD_id-lookup-service/synthetic-monitor/README.md +++ b/BMW-Dynatrace-config/CD_id-lookup-service/synthetic-monitor/README.md @@ -1,37 +1,4 @@ -# Synthetic Configuration -To calculate the Availability KPI, a synthetic must be configured. +### How to configure synthetics? -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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Synthetic+Monitors) page to configure your synthetics. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ids-admin/conditional-naming-processgroup/README.md b/BMW-Dynatrace-config/CD_ids-admin/conditional-naming-processgroup/README.md new file mode 100644 index 00000000..f94196a5 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ids-admin/conditional-naming-processgroup/README.md @@ -0,0 +1,67 @@ +### Process Group Detection Rules and Naming + +#### Detection Rule or Naming? + +For the explanation, we're using a real example of the Infotainment application: + +!(PGNaming1)[../../../../img/PGNaming1.PNG] + +Before working with your dashboards and alerting profiles, an important task to do when working with Dynatrace is checking +the structure of your applications (process groups). You can do that clicking under *technologies* and filter using your +application Management Zone. + +In the picture above, there are two Process Groups called bon-information-prod. **If you see duplicated process groups like in** +**this case, you MUST follow this guideline** + +Next step would be to open both process groups and compare the metadata. In that way, you can identify if all process instances are +part of the same application or not. An easy way to do that is asking yourself: how many instances of my application do i have? + +If you have 4 instances in total and you're able to see 2 in one PG and other 2 in other PG it means that **they are part of the ** +**same application** + +Another situation could be that checking on the metadata, then you see that are **two different application** and Dynatrace is just naming +the process group in the same way + +*Same application* +- Problem: Dynatrace is creating two different process groups, what transalates in two separated services for the same application. Instead of +seeing all the traffic in one service, you will have it splitted and it will complicate your monitoring +- Solution: create a process group detection rule. Contact Dynatrace Expert + +*Different application* +- Problem: Dynatrace is just naming in the same way applications that are different. +- Solution: This case is less severe, since it can be fixed with a process group naming rule. + + +What about our example? +!(PGNaming2)[../../../../img/PGNaming2.PNG] +!(PGNaming3)[../../../../img/PGNaming3.PNG] + +Based on the feedback of the infotaiment team, each process group is a different application (microservice) and it's visible in the kubernetes container/workload +within the metadata of each Process Group. + +#### How to create a Process Group Detection Rule +1. Open the *conditional-naming-processgroup.yaml* file and create a rule that looks like this: +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName} +- tag: Infotainment +- skipDeployment: false +``` +The result of the rule will be renaming the PG to this: +``` +bon-information-prod ipa +bon-information-prod rsl +``` + +Other possible placeholders that you can use are for example: +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName/[^\\-]*$} +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesFullPodName/buffet-(.*?)-} +{ProcessGroup:DetectedName} - {HostGroup:Name/[^\\_]*$} +{ProcessGroup:KubernetesNamespace} +{ProcessGroup:CommandLineArgs/.*?\\-f\\s\\/www\\/(.*?)\\/generated\\/httpd\\.conf.*?} + +You can combine different ones. Check the (documentation)[link] for more \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ids-admin/conditional-naming-processgroup/conditional-naming-processgroup.yaml b/BMW-Dynatrace-config/CD_ids-admin/conditional-naming-processgroup/conditional-naming-processgroup.yaml new file mode 100644 index 00000000..31d78ba4 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ids-admin/conditional-naming-processgroup/conditional-naming-processgroup.yaml @@ -0,0 +1,8 @@ +config: +- CDids-admin: template.json + +CDids-admin: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: ids-admin +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_ids-admin/conditional-naming-processgroup/template.json b/BMW-Dynatrace-config/CD_ids-admin/conditional-naming-processgroup/template.json new file mode 100644 index 00000000..7c039808 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ids-admin/conditional-naming-processgroup/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "type": "PROCESS_GROUP" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ids-admin/conditional-naming-service/README.md b/BMW-Dynatrace-config/CD_ids-admin/conditional-naming-service/README.md new file mode 100644 index 00000000..c34ef308 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ids-admin/conditional-naming-service/README.md @@ -0,0 +1,35 @@ +### Service Naming Rules + +A typical case could be that you access to *Transaction & Services* and you find two services that are exactly the same: +*DataDownloadV1* +*DataDownloadV1* + +If you drilldown into the service and you check in the process group, you may have a PROD and a E2E for each service. + +*Note: if you see that both process group are exactly the same, please contact a Dynatrace expert to create a Process* +*Group detection rule* + +In the case the PG are PROD and E2E, then we need to create a rule that looks like this: + +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {Service:DetectedName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +- tag: Infotainment +- skipDeployment: false +``` + +The rule will get the Service Detected Name (current name) and it will extract (with a regex) the part of the kubernetes namespace after the "-", so -prod or -e2e, resulting in: +*DataDownloadV1 - prod* +*DataDownloadV1 - e2e* + +Now, services will be easy to identify. + +You can create rules based on any property/metadata. Some other placeholder's eamples: +{Service:DatabaseName} - E2E +{Service:WebServiceName} - {ProcessGroup:Kubernetes:microservice} - {ProcessGroup:Kubernetes:environment} +{Service:DetectedName} - {ProcessGroup:KubernetesContainerName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +{Service:DetectedName} - {ProcessGroup:SpringBootProfileName/[^\\-]*$} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ids-admin/conditional-naming-service/conditional-naming-service.yaml b/BMW-Dynatrace-config/CD_ids-admin/conditional-naming-service/conditional-naming-service.yaml new file mode 100644 index 00000000..31d78ba4 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ids-admin/conditional-naming-service/conditional-naming-service.yaml @@ -0,0 +1,8 @@ +config: +- CDids-admin: template.json + +CDids-admin: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: ids-admin +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_ids-admin/conditional-naming-service/template.json b/BMW-Dynatrace-config/CD_ids-admin/conditional-naming-service/template.json new file mode 100644 index 00000000..5d4fac56 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ids-admin/conditional-naming-service/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "type": "SERVICE" +} \ 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 index d41c4c77..5f35e5c1 100644 --- a/BMW-Dynatrace-config/CD_ids-admin/custom-service-java/README.md +++ b/BMW-Dynatrace-config/CD_ids-admin/custom-service-java/README.md @@ -1,30 +1,4 @@ -## 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 configure custom services? -## 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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Custom+Services) page to configure your custom services. \ 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 index 92e734fa..1695924c 100644 --- a/BMW-Dynatrace-config/CD_ids-admin/synthetic-monitor/README.md +++ b/BMW-Dynatrace-config/CD_ids-admin/synthetic-monitor/README.md @@ -1,37 +1,4 @@ -# Synthetic Configuration -To calculate the Availability KPI, a synthetic must be configured. +### How to configure synthetics? -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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Synthetic+Monitors) page to configure your synthetics. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ids-svds/conditional-naming-processgroup/README.md b/BMW-Dynatrace-config/CD_ids-svds/conditional-naming-processgroup/README.md new file mode 100644 index 00000000..f94196a5 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ids-svds/conditional-naming-processgroup/README.md @@ -0,0 +1,67 @@ +### Process Group Detection Rules and Naming + +#### Detection Rule or Naming? + +For the explanation, we're using a real example of the Infotainment application: + +!(PGNaming1)[../../../../img/PGNaming1.PNG] + +Before working with your dashboards and alerting profiles, an important task to do when working with Dynatrace is checking +the structure of your applications (process groups). You can do that clicking under *technologies* and filter using your +application Management Zone. + +In the picture above, there are two Process Groups called bon-information-prod. **If you see duplicated process groups like in** +**this case, you MUST follow this guideline** + +Next step would be to open both process groups and compare the metadata. In that way, you can identify if all process instances are +part of the same application or not. An easy way to do that is asking yourself: how many instances of my application do i have? + +If you have 4 instances in total and you're able to see 2 in one PG and other 2 in other PG it means that **they are part of the ** +**same application** + +Another situation could be that checking on the metadata, then you see that are **two different application** and Dynatrace is just naming +the process group in the same way + +*Same application* +- Problem: Dynatrace is creating two different process groups, what transalates in two separated services for the same application. Instead of +seeing all the traffic in one service, you will have it splitted and it will complicate your monitoring +- Solution: create a process group detection rule. Contact Dynatrace Expert + +*Different application* +- Problem: Dynatrace is just naming in the same way applications that are different. +- Solution: This case is less severe, since it can be fixed with a process group naming rule. + + +What about our example? +!(PGNaming2)[../../../../img/PGNaming2.PNG] +!(PGNaming3)[../../../../img/PGNaming3.PNG] + +Based on the feedback of the infotaiment team, each process group is a different application (microservice) and it's visible in the kubernetes container/workload +within the metadata of each Process Group. + +#### How to create a Process Group Detection Rule +1. Open the *conditional-naming-processgroup.yaml* file and create a rule that looks like this: +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName} +- tag: Infotainment +- skipDeployment: false +``` +The result of the rule will be renaming the PG to this: +``` +bon-information-prod ipa +bon-information-prod rsl +``` + +Other possible placeholders that you can use are for example: +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName/[^\\-]*$} +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesFullPodName/buffet-(.*?)-} +{ProcessGroup:DetectedName} - {HostGroup:Name/[^\\_]*$} +{ProcessGroup:KubernetesNamespace} +{ProcessGroup:CommandLineArgs/.*?\\-f\\s\\/www\\/(.*?)\\/generated\\/httpd\\.conf.*?} + +You can combine different ones. Check the (documentation)[link] for more \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ids-svds/conditional-naming-processgroup/conditional-naming-processgroup.yaml b/BMW-Dynatrace-config/CD_ids-svds/conditional-naming-processgroup/conditional-naming-processgroup.yaml new file mode 100644 index 00000000..decc6ab2 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ids-svds/conditional-naming-processgroup/conditional-naming-processgroup.yaml @@ -0,0 +1,8 @@ +config: +- CDids-svds: template.json + +CDids-svds: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: ids-svds +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_ids-svds/conditional-naming-processgroup/template.json b/BMW-Dynatrace-config/CD_ids-svds/conditional-naming-processgroup/template.json new file mode 100644 index 00000000..7c039808 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ids-svds/conditional-naming-processgroup/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "type": "PROCESS_GROUP" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ids-svds/conditional-naming-service/README.md b/BMW-Dynatrace-config/CD_ids-svds/conditional-naming-service/README.md new file mode 100644 index 00000000..c34ef308 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ids-svds/conditional-naming-service/README.md @@ -0,0 +1,35 @@ +### Service Naming Rules + +A typical case could be that you access to *Transaction & Services* and you find two services that are exactly the same: +*DataDownloadV1* +*DataDownloadV1* + +If you drilldown into the service and you check in the process group, you may have a PROD and a E2E for each service. + +*Note: if you see that both process group are exactly the same, please contact a Dynatrace expert to create a Process* +*Group detection rule* + +In the case the PG are PROD and E2E, then we need to create a rule that looks like this: + +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {Service:DetectedName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +- tag: Infotainment +- skipDeployment: false +``` + +The rule will get the Service Detected Name (current name) and it will extract (with a regex) the part of the kubernetes namespace after the "-", so -prod or -e2e, resulting in: +*DataDownloadV1 - prod* +*DataDownloadV1 - e2e* + +Now, services will be easy to identify. + +You can create rules based on any property/metadata. Some other placeholder's eamples: +{Service:DatabaseName} - E2E +{Service:WebServiceName} - {ProcessGroup:Kubernetes:microservice} - {ProcessGroup:Kubernetes:environment} +{Service:DetectedName} - {ProcessGroup:KubernetesContainerName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +{Service:DetectedName} - {ProcessGroup:SpringBootProfileName/[^\\-]*$} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ids-svds/conditional-naming-service/conditional-naming-service.yaml b/BMW-Dynatrace-config/CD_ids-svds/conditional-naming-service/conditional-naming-service.yaml new file mode 100644 index 00000000..decc6ab2 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ids-svds/conditional-naming-service/conditional-naming-service.yaml @@ -0,0 +1,8 @@ +config: +- CDids-svds: template.json + +CDids-svds: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: ids-svds +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_ids-svds/conditional-naming-service/template.json b/BMW-Dynatrace-config/CD_ids-svds/conditional-naming-service/template.json new file mode 100644 index 00000000..5d4fac56 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ids-svds/conditional-naming-service/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "type": "SERVICE" +} \ 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 index d41c4c77..5f35e5c1 100644 --- a/BMW-Dynatrace-config/CD_ids-svds/custom-service-java/README.md +++ b/BMW-Dynatrace-config/CD_ids-svds/custom-service-java/README.md @@ -1,30 +1,4 @@ -## 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 configure custom services? -## 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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Custom+Services) page to configure your custom services. \ 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 index 92e734fa..1695924c 100644 --- a/BMW-Dynatrace-config/CD_ids-svds/synthetic-monitor/README.md +++ b/BMW-Dynatrace-config/CD_ids-svds/synthetic-monitor/README.md @@ -1,37 +1,4 @@ -# Synthetic Configuration -To calculate the Availability KPI, a synthetic must be configured. +### How to configure synthetics? -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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Synthetic+Monitors) page to configure your synthetics. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ids-sync/conditional-naming-processgroup/README.md b/BMW-Dynatrace-config/CD_ids-sync/conditional-naming-processgroup/README.md new file mode 100644 index 00000000..f94196a5 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ids-sync/conditional-naming-processgroup/README.md @@ -0,0 +1,67 @@ +### Process Group Detection Rules and Naming + +#### Detection Rule or Naming? + +For the explanation, we're using a real example of the Infotainment application: + +!(PGNaming1)[../../../../img/PGNaming1.PNG] + +Before working with your dashboards and alerting profiles, an important task to do when working with Dynatrace is checking +the structure of your applications (process groups). You can do that clicking under *technologies* and filter using your +application Management Zone. + +In the picture above, there are two Process Groups called bon-information-prod. **If you see duplicated process groups like in** +**this case, you MUST follow this guideline** + +Next step would be to open both process groups and compare the metadata. In that way, you can identify if all process instances are +part of the same application or not. An easy way to do that is asking yourself: how many instances of my application do i have? + +If you have 4 instances in total and you're able to see 2 in one PG and other 2 in other PG it means that **they are part of the ** +**same application** + +Another situation could be that checking on the metadata, then you see that are **two different application** and Dynatrace is just naming +the process group in the same way + +*Same application* +- Problem: Dynatrace is creating two different process groups, what transalates in two separated services for the same application. Instead of +seeing all the traffic in one service, you will have it splitted and it will complicate your monitoring +- Solution: create a process group detection rule. Contact Dynatrace Expert + +*Different application* +- Problem: Dynatrace is just naming in the same way applications that are different. +- Solution: This case is less severe, since it can be fixed with a process group naming rule. + + +What about our example? +!(PGNaming2)[../../../../img/PGNaming2.PNG] +!(PGNaming3)[../../../../img/PGNaming3.PNG] + +Based on the feedback of the infotaiment team, each process group is a different application (microservice) and it's visible in the kubernetes container/workload +within the metadata of each Process Group. + +#### How to create a Process Group Detection Rule +1. Open the *conditional-naming-processgroup.yaml* file and create a rule that looks like this: +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName} +- tag: Infotainment +- skipDeployment: false +``` +The result of the rule will be renaming the PG to this: +``` +bon-information-prod ipa +bon-information-prod rsl +``` + +Other possible placeholders that you can use are for example: +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName/[^\\-]*$} +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesFullPodName/buffet-(.*?)-} +{ProcessGroup:DetectedName} - {HostGroup:Name/[^\\_]*$} +{ProcessGroup:KubernetesNamespace} +{ProcessGroup:CommandLineArgs/.*?\\-f\\s\\/www\\/(.*?)\\/generated\\/httpd\\.conf.*?} + +You can combine different ones. Check the (documentation)[link] for more \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ids-sync/conditional-naming-processgroup/conditional-naming-processgroup.yaml b/BMW-Dynatrace-config/CD_ids-sync/conditional-naming-processgroup/conditional-naming-processgroup.yaml new file mode 100644 index 00000000..2b06b721 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ids-sync/conditional-naming-processgroup/conditional-naming-processgroup.yaml @@ -0,0 +1,8 @@ +config: +- CDids-sync: template.json + +CDids-sync: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: ids-sync +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_ids-sync/conditional-naming-processgroup/template.json b/BMW-Dynatrace-config/CD_ids-sync/conditional-naming-processgroup/template.json new file mode 100644 index 00000000..7c039808 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ids-sync/conditional-naming-processgroup/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "type": "PROCESS_GROUP" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ids-sync/conditional-naming-service/README.md b/BMW-Dynatrace-config/CD_ids-sync/conditional-naming-service/README.md new file mode 100644 index 00000000..c34ef308 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ids-sync/conditional-naming-service/README.md @@ -0,0 +1,35 @@ +### Service Naming Rules + +A typical case could be that you access to *Transaction & Services* and you find two services that are exactly the same: +*DataDownloadV1* +*DataDownloadV1* + +If you drilldown into the service and you check in the process group, you may have a PROD and a E2E for each service. + +*Note: if you see that both process group are exactly the same, please contact a Dynatrace expert to create a Process* +*Group detection rule* + +In the case the PG are PROD and E2E, then we need to create a rule that looks like this: + +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {Service:DetectedName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +- tag: Infotainment +- skipDeployment: false +``` + +The rule will get the Service Detected Name (current name) and it will extract (with a regex) the part of the kubernetes namespace after the "-", so -prod or -e2e, resulting in: +*DataDownloadV1 - prod* +*DataDownloadV1 - e2e* + +Now, services will be easy to identify. + +You can create rules based on any property/metadata. Some other placeholder's eamples: +{Service:DatabaseName} - E2E +{Service:WebServiceName} - {ProcessGroup:Kubernetes:microservice} - {ProcessGroup:Kubernetes:environment} +{Service:DetectedName} - {ProcessGroup:KubernetesContainerName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +{Service:DetectedName} - {ProcessGroup:SpringBootProfileName/[^\\-]*$} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ids-sync/conditional-naming-service/conditional-naming-service.yaml b/BMW-Dynatrace-config/CD_ids-sync/conditional-naming-service/conditional-naming-service.yaml new file mode 100644 index 00000000..2b06b721 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ids-sync/conditional-naming-service/conditional-naming-service.yaml @@ -0,0 +1,8 @@ +config: +- CDids-sync: template.json + +CDids-sync: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: ids-sync +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_ids-sync/conditional-naming-service/template.json b/BMW-Dynatrace-config/CD_ids-sync/conditional-naming-service/template.json new file mode 100644 index 00000000..5d4fac56 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ids-sync/conditional-naming-service/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "type": "SERVICE" +} \ 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 index d41c4c77..5f35e5c1 100644 --- a/BMW-Dynatrace-config/CD_ids-sync/custom-service-java/README.md +++ b/BMW-Dynatrace-config/CD_ids-sync/custom-service-java/README.md @@ -1,30 +1,4 @@ -## 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 configure custom services? -## 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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Custom+Services) page to configure your custom services. \ 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 index 92e734fa..1695924c 100644 --- a/BMW-Dynatrace-config/CD_ids-sync/synthetic-monitor/README.md +++ b/BMW-Dynatrace-config/CD_ids-sync/synthetic-monitor/README.md @@ -1,37 +1,4 @@ -# Synthetic Configuration -To calculate the Availability KPI, a synthetic must be configured. +### How to configure synthetics? -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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Synthetic+Monitors) page to configure your synthetics. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ids-ws/conditional-naming-processgroup/README.md b/BMW-Dynatrace-config/CD_ids-ws/conditional-naming-processgroup/README.md new file mode 100644 index 00000000..f94196a5 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ids-ws/conditional-naming-processgroup/README.md @@ -0,0 +1,67 @@ +### Process Group Detection Rules and Naming + +#### Detection Rule or Naming? + +For the explanation, we're using a real example of the Infotainment application: + +!(PGNaming1)[../../../../img/PGNaming1.PNG] + +Before working with your dashboards and alerting profiles, an important task to do when working with Dynatrace is checking +the structure of your applications (process groups). You can do that clicking under *technologies* and filter using your +application Management Zone. + +In the picture above, there are two Process Groups called bon-information-prod. **If you see duplicated process groups like in** +**this case, you MUST follow this guideline** + +Next step would be to open both process groups and compare the metadata. In that way, you can identify if all process instances are +part of the same application or not. An easy way to do that is asking yourself: how many instances of my application do i have? + +If you have 4 instances in total and you're able to see 2 in one PG and other 2 in other PG it means that **they are part of the ** +**same application** + +Another situation could be that checking on the metadata, then you see that are **two different application** and Dynatrace is just naming +the process group in the same way + +*Same application* +- Problem: Dynatrace is creating two different process groups, what transalates in two separated services for the same application. Instead of +seeing all the traffic in one service, you will have it splitted and it will complicate your monitoring +- Solution: create a process group detection rule. Contact Dynatrace Expert + +*Different application* +- Problem: Dynatrace is just naming in the same way applications that are different. +- Solution: This case is less severe, since it can be fixed with a process group naming rule. + + +What about our example? +!(PGNaming2)[../../../../img/PGNaming2.PNG] +!(PGNaming3)[../../../../img/PGNaming3.PNG] + +Based on the feedback of the infotaiment team, each process group is a different application (microservice) and it's visible in the kubernetes container/workload +within the metadata of each Process Group. + +#### How to create a Process Group Detection Rule +1. Open the *conditional-naming-processgroup.yaml* file and create a rule that looks like this: +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName} +- tag: Infotainment +- skipDeployment: false +``` +The result of the rule will be renaming the PG to this: +``` +bon-information-prod ipa +bon-information-prod rsl +``` + +Other possible placeholders that you can use are for example: +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName/[^\\-]*$} +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesFullPodName/buffet-(.*?)-} +{ProcessGroup:DetectedName} - {HostGroup:Name/[^\\_]*$} +{ProcessGroup:KubernetesNamespace} +{ProcessGroup:CommandLineArgs/.*?\\-f\\s\\/www\\/(.*?)\\/generated\\/httpd\\.conf.*?} + +You can combine different ones. Check the (documentation)[link] for more \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ids-ws/conditional-naming-processgroup/conditional-naming-processgroup.yaml b/BMW-Dynatrace-config/CD_ids-ws/conditional-naming-processgroup/conditional-naming-processgroup.yaml new file mode 100644 index 00000000..00d14cf9 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ids-ws/conditional-naming-processgroup/conditional-naming-processgroup.yaml @@ -0,0 +1,8 @@ +config: +- CDids-ws: template.json + +CDids-ws: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: ids-ws +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_ids-ws/conditional-naming-processgroup/template.json b/BMW-Dynatrace-config/CD_ids-ws/conditional-naming-processgroup/template.json new file mode 100644 index 00000000..7c039808 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ids-ws/conditional-naming-processgroup/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "type": "PROCESS_GROUP" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ids-ws/conditional-naming-service/README.md b/BMW-Dynatrace-config/CD_ids-ws/conditional-naming-service/README.md new file mode 100644 index 00000000..c34ef308 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ids-ws/conditional-naming-service/README.md @@ -0,0 +1,35 @@ +### Service Naming Rules + +A typical case could be that you access to *Transaction & Services* and you find two services that are exactly the same: +*DataDownloadV1* +*DataDownloadV1* + +If you drilldown into the service and you check in the process group, you may have a PROD and a E2E for each service. + +*Note: if you see that both process group are exactly the same, please contact a Dynatrace expert to create a Process* +*Group detection rule* + +In the case the PG are PROD and E2E, then we need to create a rule that looks like this: + +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {Service:DetectedName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +- tag: Infotainment +- skipDeployment: false +``` + +The rule will get the Service Detected Name (current name) and it will extract (with a regex) the part of the kubernetes namespace after the "-", so -prod or -e2e, resulting in: +*DataDownloadV1 - prod* +*DataDownloadV1 - e2e* + +Now, services will be easy to identify. + +You can create rules based on any property/metadata. Some other placeholder's eamples: +{Service:DatabaseName} - E2E +{Service:WebServiceName} - {ProcessGroup:Kubernetes:microservice} - {ProcessGroup:Kubernetes:environment} +{Service:DetectedName} - {ProcessGroup:KubernetesContainerName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +{Service:DetectedName} - {ProcessGroup:SpringBootProfileName/[^\\-]*$} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ids-ws/conditional-naming-service/conditional-naming-service.yaml b/BMW-Dynatrace-config/CD_ids-ws/conditional-naming-service/conditional-naming-service.yaml new file mode 100644 index 00000000..00d14cf9 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ids-ws/conditional-naming-service/conditional-naming-service.yaml @@ -0,0 +1,8 @@ +config: +- CDids-ws: template.json + +CDids-ws: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: ids-ws +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_ids-ws/conditional-naming-service/template.json b/BMW-Dynatrace-config/CD_ids-ws/conditional-naming-service/template.json new file mode 100644 index 00000000..5d4fac56 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ids-ws/conditional-naming-service/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "type": "SERVICE" +} \ 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 index d41c4c77..5f35e5c1 100644 --- a/BMW-Dynatrace-config/CD_ids-ws/custom-service-java/README.md +++ b/BMW-Dynatrace-config/CD_ids-ws/custom-service-java/README.md @@ -1,30 +1,4 @@ -## 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 configure custom services? -## 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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Custom+Services) page to configure your custom services. \ 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 index 92e734fa..1695924c 100644 --- a/BMW-Dynatrace-config/CD_ids-ws/synthetic-monitor/README.md +++ b/BMW-Dynatrace-config/CD_ids-ws/synthetic-monitor/README.md @@ -1,37 +1,4 @@ -# Synthetic Configuration -To calculate the Availability KPI, a synthetic must be configured. +### How to configure synthetics? -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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Synthetic+Monitors) page to configure your synthetics. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_image-composite-service/calculated-metrics-service/README.md b/BMW-Dynatrace-config/CD_image-composite-service/calculated-metrics-service/README.md new file mode 100644 index 00000000..0bf8efbc --- /dev/null +++ b/BMW-Dynatrace-config/CD_image-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_image-composite-service/conditional-naming-processgroup/README.md b/BMW-Dynatrace-config/CD_image-composite-service/conditional-naming-processgroup/README.md new file mode 100644 index 00000000..f94196a5 --- /dev/null +++ b/BMW-Dynatrace-config/CD_image-composite-service/conditional-naming-processgroup/README.md @@ -0,0 +1,67 @@ +### Process Group Detection Rules and Naming + +#### Detection Rule or Naming? + +For the explanation, we're using a real example of the Infotainment application: + +!(PGNaming1)[../../../../img/PGNaming1.PNG] + +Before working with your dashboards and alerting profiles, an important task to do when working with Dynatrace is checking +the structure of your applications (process groups). You can do that clicking under *technologies* and filter using your +application Management Zone. + +In the picture above, there are two Process Groups called bon-information-prod. **If you see duplicated process groups like in** +**this case, you MUST follow this guideline** + +Next step would be to open both process groups and compare the metadata. In that way, you can identify if all process instances are +part of the same application or not. An easy way to do that is asking yourself: how many instances of my application do i have? + +If you have 4 instances in total and you're able to see 2 in one PG and other 2 in other PG it means that **they are part of the ** +**same application** + +Another situation could be that checking on the metadata, then you see that are **two different application** and Dynatrace is just naming +the process group in the same way + +*Same application* +- Problem: Dynatrace is creating two different process groups, what transalates in two separated services for the same application. Instead of +seeing all the traffic in one service, you will have it splitted and it will complicate your monitoring +- Solution: create a process group detection rule. Contact Dynatrace Expert + +*Different application* +- Problem: Dynatrace is just naming in the same way applications that are different. +- Solution: This case is less severe, since it can be fixed with a process group naming rule. + + +What about our example? +!(PGNaming2)[../../../../img/PGNaming2.PNG] +!(PGNaming3)[../../../../img/PGNaming3.PNG] + +Based on the feedback of the infotaiment team, each process group is a different application (microservice) and it's visible in the kubernetes container/workload +within the metadata of each Process Group. + +#### How to create a Process Group Detection Rule +1. Open the *conditional-naming-processgroup.yaml* file and create a rule that looks like this: +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName} +- tag: Infotainment +- skipDeployment: false +``` +The result of the rule will be renaming the PG to this: +``` +bon-information-prod ipa +bon-information-prod rsl +``` + +Other possible placeholders that you can use are for example: +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName/[^\\-]*$} +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesFullPodName/buffet-(.*?)-} +{ProcessGroup:DetectedName} - {HostGroup:Name/[^\\_]*$} +{ProcessGroup:KubernetesNamespace} +{ProcessGroup:CommandLineArgs/.*?\\-f\\s\\/www\\/(.*?)\\/generated\\/httpd\\.conf.*?} + +You can combine different ones. Check the (documentation)[link] for more \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_image-composite-service/conditional-naming-processgroup/conditional-naming-processgroup.yaml b/BMW-Dynatrace-config/CD_image-composite-service/conditional-naming-processgroup/conditional-naming-processgroup.yaml new file mode 100644 index 00000000..28009396 --- /dev/null +++ b/BMW-Dynatrace-config/CD_image-composite-service/conditional-naming-processgroup/conditional-naming-processgroup.yaml @@ -0,0 +1,8 @@ +config: +- CDimage-composite-service: template.json + +CDimage-composite-service: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: image-composite-service +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_image-composite-service/conditional-naming-processgroup/template.json b/BMW-Dynatrace-config/CD_image-composite-service/conditional-naming-processgroup/template.json new file mode 100644 index 00000000..7c039808 --- /dev/null +++ b/BMW-Dynatrace-config/CD_image-composite-service/conditional-naming-processgroup/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "type": "PROCESS_GROUP" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_image-composite-service/conditional-naming-service/README.md b/BMW-Dynatrace-config/CD_image-composite-service/conditional-naming-service/README.md new file mode 100644 index 00000000..c34ef308 --- /dev/null +++ b/BMW-Dynatrace-config/CD_image-composite-service/conditional-naming-service/README.md @@ -0,0 +1,35 @@ +### Service Naming Rules + +A typical case could be that you access to *Transaction & Services* and you find two services that are exactly the same: +*DataDownloadV1* +*DataDownloadV1* + +If you drilldown into the service and you check in the process group, you may have a PROD and a E2E for each service. + +*Note: if you see that both process group are exactly the same, please contact a Dynatrace expert to create a Process* +*Group detection rule* + +In the case the PG are PROD and E2E, then we need to create a rule that looks like this: + +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {Service:DetectedName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +- tag: Infotainment +- skipDeployment: false +``` + +The rule will get the Service Detected Name (current name) and it will extract (with a regex) the part of the kubernetes namespace after the "-", so -prod or -e2e, resulting in: +*DataDownloadV1 - prod* +*DataDownloadV1 - e2e* + +Now, services will be easy to identify. + +You can create rules based on any property/metadata. Some other placeholder's eamples: +{Service:DatabaseName} - E2E +{Service:WebServiceName} - {ProcessGroup:Kubernetes:microservice} - {ProcessGroup:Kubernetes:environment} +{Service:DetectedName} - {ProcessGroup:KubernetesContainerName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +{Service:DetectedName} - {ProcessGroup:SpringBootProfileName/[^\\-]*$} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_image-composite-service/conditional-naming-service/conditional-naming-service.yaml b/BMW-Dynatrace-config/CD_image-composite-service/conditional-naming-service/conditional-naming-service.yaml new file mode 100644 index 00000000..28009396 --- /dev/null +++ b/BMW-Dynatrace-config/CD_image-composite-service/conditional-naming-service/conditional-naming-service.yaml @@ -0,0 +1,8 @@ +config: +- CDimage-composite-service: template.json + +CDimage-composite-service: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: image-composite-service +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_image-composite-service/conditional-naming-service/template.json b/BMW-Dynatrace-config/CD_image-composite-service/conditional-naming-service/template.json new file mode 100644 index 00000000..5d4fac56 --- /dev/null +++ b/BMW-Dynatrace-config/CD_image-composite-service/conditional-naming-service/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "type": "SERVICE" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_image-composite-service/custom-service-java/README.md b/BMW-Dynatrace-config/CD_image-composite-service/custom-service-java/README.md new file mode 100644 index 00000000..5f35e5c1 --- /dev/null +++ b/BMW-Dynatrace-config/CD_image-composite-service/custom-service-java/README.md @@ -0,0 +1,4 @@ + +### How to configure custom services? + +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Custom+Services) page to configure your custom services. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_image-composite-service/custom-service-java/custom-service-java.yaml b/BMW-Dynatrace-config/CD_image-composite-service/custom-service-java/custom-service-java.yaml new file mode 100644 index 00000000..25f8a028 --- /dev/null +++ b/BMW-Dynatrace-config/CD_image-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_image-composite-service/custom-service-java/template-1-1.json b/BMW-Dynatrace-config/CD_image-composite-service/custom-service-java/template-1-1.json new file mode 100644 index 00000000..b3003515 --- /dev/null +++ b/BMW-Dynatrace-config/CD_image-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_image-composite-service/notification/README.md b/BMW-Dynatrace-config/CD_image-composite-service/notification/README.md new file mode 100644 index 00000000..e1a6af84 --- /dev/null +++ b/BMW-Dynatrace-config/CD_image-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_image-composite-service/notification/email.json b/BMW-Dynatrace-config/CD_image-composite-service/notification/email.json new file mode 100644 index 00000000..486642a7 --- /dev/null +++ b/BMW-Dynatrace-config/CD_image-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_image-composite-service/notification/msTeams.json b/BMW-Dynatrace-config/CD_image-composite-service/notification/msTeams.json new file mode 100644 index 00000000..33e92cf6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_image-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_image-composite-service/notification/notification.yaml b/BMW-Dynatrace-config/CD_image-composite-service/notification/notification.yaml new file mode 100644 index 00000000..9f091166 --- /dev/null +++ b/BMW-Dynatrace-config/CD_image-composite-service/notification/notification.yaml @@ -0,0 +1,51 @@ +config: +- CDimage-composite-service-PROD: msTeams.json +- CDimage-composite-service-INT: msTeams.json + +#Prod notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDimage-composite-service-PROD: +- name: CD_image-composite-service PROD +- alertingProfile: CD_image-composite-service/alerting-profile/CDimage-composite-service-PROD.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDimage-composite-service-PROD.EMEA-Prod: +- name: CD_image-composite-service PROD +- alertingProfile: CD_image-composite-service/alerting-profile/CDimage-composite-service-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDimage-composite-service-PROD.NA-Prod: +- name: CD_image-composite-service PROD +- alertingProfile: CD_image-composite-service/alerting-profile/CDimage-composite-service-PROD.id +- webhook: https://empty +- skipDeployment: "false" +CDimage-composite-service-PROD.CN-Prod: +- name: CD_image-composite-service PROD +- alertingProfile: CD_image-composite-service/alerting-profile/CDimage-composite-service-PROD.id +- webhook: https://empty +- skipDeployment: "false" + +#INT notification system for EMEA/NA/CN +#Dry-run needed for all hubs +CDimage-composite-service-INT: +- name: CD_image-composite-service INT +- alertingProfile: CD_image-composite-service/alerting-profile/CDimage-composite-service-INT.id +- webhook: https://empty +- skipDeployment: "true" +#Configuration +CDimage-composite-service-INT.EMEA-PreProd: +- name: CD_image-composite-service INT +- alertingProfile: CD_image-composite-service/alerting-profile/CDimage-composite-service-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDimage-composite-service-INT.NA-PreProd: +- name: CD_image-composite-service INT +- alertingProfile: CD_image-composite-service/alerting-profile/CDimage-composite-service-INT.id +- webhook: https://empty +- skipDeployment: "false" +CDimage-composite-service-INT.CN-PreProd: +- name: CD_image-composite-service INT +- alertingProfile: CD_image-composite-service/alerting-profile/CDimage-composite-service-INT.id +- webhook: https://empty +- skipDeployment: "false" \ 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 index 92e734fa..1695924c 100644 --- a/BMW-Dynatrace-config/CD_image-composite-service/synthetic-monitor/README.md +++ b/BMW-Dynatrace-config/CD_image-composite-service/synthetic-monitor/README.md @@ -1,37 +1,4 @@ -# Synthetic Configuration -To calculate the Availability KPI, a synthetic must be configured. +### How to configure synthetics? -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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Synthetic+Monitors) page to configure your synthetics. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_imiles-service/conditional-naming-processgroup/README.md b/BMW-Dynatrace-config/CD_imiles-service/conditional-naming-processgroup/README.md new file mode 100644 index 00000000..f94196a5 --- /dev/null +++ b/BMW-Dynatrace-config/CD_imiles-service/conditional-naming-processgroup/README.md @@ -0,0 +1,67 @@ +### Process Group Detection Rules and Naming + +#### Detection Rule or Naming? + +For the explanation, we're using a real example of the Infotainment application: + +!(PGNaming1)[../../../../img/PGNaming1.PNG] + +Before working with your dashboards and alerting profiles, an important task to do when working with Dynatrace is checking +the structure of your applications (process groups). You can do that clicking under *technologies* and filter using your +application Management Zone. + +In the picture above, there are two Process Groups called bon-information-prod. **If you see duplicated process groups like in** +**this case, you MUST follow this guideline** + +Next step would be to open both process groups and compare the metadata. In that way, you can identify if all process instances are +part of the same application or not. An easy way to do that is asking yourself: how many instances of my application do i have? + +If you have 4 instances in total and you're able to see 2 in one PG and other 2 in other PG it means that **they are part of the ** +**same application** + +Another situation could be that checking on the metadata, then you see that are **two different application** and Dynatrace is just naming +the process group in the same way + +*Same application* +- Problem: Dynatrace is creating two different process groups, what transalates in two separated services for the same application. Instead of +seeing all the traffic in one service, you will have it splitted and it will complicate your monitoring +- Solution: create a process group detection rule. Contact Dynatrace Expert + +*Different application* +- Problem: Dynatrace is just naming in the same way applications that are different. +- Solution: This case is less severe, since it can be fixed with a process group naming rule. + + +What about our example? +!(PGNaming2)[../../../../img/PGNaming2.PNG] +!(PGNaming3)[../../../../img/PGNaming3.PNG] + +Based on the feedback of the infotaiment team, each process group is a different application (microservice) and it's visible in the kubernetes container/workload +within the metadata of each Process Group. + +#### How to create a Process Group Detection Rule +1. Open the *conditional-naming-processgroup.yaml* file and create a rule that looks like this: +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName} +- tag: Infotainment +- skipDeployment: false +``` +The result of the rule will be renaming the PG to this: +``` +bon-information-prod ipa +bon-information-prod rsl +``` + +Other possible placeholders that you can use are for example: +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName/[^\\-]*$} +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesFullPodName/buffet-(.*?)-} +{ProcessGroup:DetectedName} - {HostGroup:Name/[^\\_]*$} +{ProcessGroup:KubernetesNamespace} +{ProcessGroup:CommandLineArgs/.*?\\-f\\s\\/www\\/(.*?)\\/generated\\/httpd\\.conf.*?} + +You can combine different ones. Check the (documentation)[link] for more \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_imiles-service/conditional-naming-processgroup/conditional-naming-processgroup.yaml b/BMW-Dynatrace-config/CD_imiles-service/conditional-naming-processgroup/conditional-naming-processgroup.yaml new file mode 100644 index 00000000..001949c7 --- /dev/null +++ b/BMW-Dynatrace-config/CD_imiles-service/conditional-naming-processgroup/conditional-naming-processgroup.yaml @@ -0,0 +1,8 @@ +config: +- CDimiles-service: template.json + +CDimiles-service: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: imiles-service +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_imiles-service/conditional-naming-processgroup/template.json b/BMW-Dynatrace-config/CD_imiles-service/conditional-naming-processgroup/template.json new file mode 100644 index 00000000..7c039808 --- /dev/null +++ b/BMW-Dynatrace-config/CD_imiles-service/conditional-naming-processgroup/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "type": "PROCESS_GROUP" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_imiles-service/conditional-naming-service/README.md b/BMW-Dynatrace-config/CD_imiles-service/conditional-naming-service/README.md new file mode 100644 index 00000000..c34ef308 --- /dev/null +++ b/BMW-Dynatrace-config/CD_imiles-service/conditional-naming-service/README.md @@ -0,0 +1,35 @@ +### Service Naming Rules + +A typical case could be that you access to *Transaction & Services* and you find two services that are exactly the same: +*DataDownloadV1* +*DataDownloadV1* + +If you drilldown into the service and you check in the process group, you may have a PROD and a E2E for each service. + +*Note: if you see that both process group are exactly the same, please contact a Dynatrace expert to create a Process* +*Group detection rule* + +In the case the PG are PROD and E2E, then we need to create a rule that looks like this: + +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {Service:DetectedName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +- tag: Infotainment +- skipDeployment: false +``` + +The rule will get the Service Detected Name (current name) and it will extract (with a regex) the part of the kubernetes namespace after the "-", so -prod or -e2e, resulting in: +*DataDownloadV1 - prod* +*DataDownloadV1 - e2e* + +Now, services will be easy to identify. + +You can create rules based on any property/metadata. Some other placeholder's eamples: +{Service:DatabaseName} - E2E +{Service:WebServiceName} - {ProcessGroup:Kubernetes:microservice} - {ProcessGroup:Kubernetes:environment} +{Service:DetectedName} - {ProcessGroup:KubernetesContainerName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +{Service:DetectedName} - {ProcessGroup:SpringBootProfileName/[^\\-]*$} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_imiles-service/conditional-naming-service/conditional-naming-service.yaml b/BMW-Dynatrace-config/CD_imiles-service/conditional-naming-service/conditional-naming-service.yaml new file mode 100644 index 00000000..001949c7 --- /dev/null +++ b/BMW-Dynatrace-config/CD_imiles-service/conditional-naming-service/conditional-naming-service.yaml @@ -0,0 +1,8 @@ +config: +- CDimiles-service: template.json + +CDimiles-service: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: imiles-service +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_imiles-service/conditional-naming-service/template.json b/BMW-Dynatrace-config/CD_imiles-service/conditional-naming-service/template.json new file mode 100644 index 00000000..5d4fac56 --- /dev/null +++ b/BMW-Dynatrace-config/CD_imiles-service/conditional-naming-service/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "type": "SERVICE" +} \ 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 index d41c4c77..5f35e5c1 100644 --- a/BMW-Dynatrace-config/CD_imiles-service/custom-service-java/README.md +++ b/BMW-Dynatrace-config/CD_imiles-service/custom-service-java/README.md @@ -1,30 +1,4 @@ -## 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 configure custom services? -## 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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Custom+Services) page to configure your custom services. \ 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 index 92e734fa..1695924c 100644 --- a/BMW-Dynatrace-config/CD_imiles-service/synthetic-monitor/README.md +++ b/BMW-Dynatrace-config/CD_imiles-service/synthetic-monitor/README.md @@ -1,37 +1,4 @@ -# Synthetic Configuration -To calculate the Availability KPI, a synthetic must be configured. +### How to configure synthetics? -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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Synthetic+Monitors) page to configure your synthetics. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ipa-gateway/conditional-naming-processgroup/README.md b/BMW-Dynatrace-config/CD_ipa-gateway/conditional-naming-processgroup/README.md new file mode 100644 index 00000000..f94196a5 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ipa-gateway/conditional-naming-processgroup/README.md @@ -0,0 +1,67 @@ +### Process Group Detection Rules and Naming + +#### Detection Rule or Naming? + +For the explanation, we're using a real example of the Infotainment application: + +!(PGNaming1)[../../../../img/PGNaming1.PNG] + +Before working with your dashboards and alerting profiles, an important task to do when working with Dynatrace is checking +the structure of your applications (process groups). You can do that clicking under *technologies* and filter using your +application Management Zone. + +In the picture above, there are two Process Groups called bon-information-prod. **If you see duplicated process groups like in** +**this case, you MUST follow this guideline** + +Next step would be to open both process groups and compare the metadata. In that way, you can identify if all process instances are +part of the same application or not. An easy way to do that is asking yourself: how many instances of my application do i have? + +If you have 4 instances in total and you're able to see 2 in one PG and other 2 in other PG it means that **they are part of the ** +**same application** + +Another situation could be that checking on the metadata, then you see that are **two different application** and Dynatrace is just naming +the process group in the same way + +*Same application* +- Problem: Dynatrace is creating two different process groups, what transalates in two separated services for the same application. Instead of +seeing all the traffic in one service, you will have it splitted and it will complicate your monitoring +- Solution: create a process group detection rule. Contact Dynatrace Expert + +*Different application* +- Problem: Dynatrace is just naming in the same way applications that are different. +- Solution: This case is less severe, since it can be fixed with a process group naming rule. + + +What about our example? +!(PGNaming2)[../../../../img/PGNaming2.PNG] +!(PGNaming3)[../../../../img/PGNaming3.PNG] + +Based on the feedback of the infotaiment team, each process group is a different application (microservice) and it's visible in the kubernetes container/workload +within the metadata of each Process Group. + +#### How to create a Process Group Detection Rule +1. Open the *conditional-naming-processgroup.yaml* file and create a rule that looks like this: +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName} +- tag: Infotainment +- skipDeployment: false +``` +The result of the rule will be renaming the PG to this: +``` +bon-information-prod ipa +bon-information-prod rsl +``` + +Other possible placeholders that you can use are for example: +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName/[^\\-]*$} +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesFullPodName/buffet-(.*?)-} +{ProcessGroup:DetectedName} - {HostGroup:Name/[^\\_]*$} +{ProcessGroup:KubernetesNamespace} +{ProcessGroup:CommandLineArgs/.*?\\-f\\s\\/www\\/(.*?)\\/generated\\/httpd\\.conf.*?} + +You can combine different ones. Check the (documentation)[link] for more \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ipa-gateway/conditional-naming-processgroup/conditional-naming-processgroup.yaml b/BMW-Dynatrace-config/CD_ipa-gateway/conditional-naming-processgroup/conditional-naming-processgroup.yaml new file mode 100644 index 00000000..7cf80534 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ipa-gateway/conditional-naming-processgroup/conditional-naming-processgroup.yaml @@ -0,0 +1,8 @@ +config: +- CDipa-gateway: template.json + +CDipa-gateway: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: ipa-gateway +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_ipa-gateway/conditional-naming-processgroup/template.json b/BMW-Dynatrace-config/CD_ipa-gateway/conditional-naming-processgroup/template.json new file mode 100644 index 00000000..7c039808 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ipa-gateway/conditional-naming-processgroup/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "type": "PROCESS_GROUP" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ipa-gateway/conditional-naming-service/README.md b/BMW-Dynatrace-config/CD_ipa-gateway/conditional-naming-service/README.md new file mode 100644 index 00000000..c34ef308 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ipa-gateway/conditional-naming-service/README.md @@ -0,0 +1,35 @@ +### Service Naming Rules + +A typical case could be that you access to *Transaction & Services* and you find two services that are exactly the same: +*DataDownloadV1* +*DataDownloadV1* + +If you drilldown into the service and you check in the process group, you may have a PROD and a E2E for each service. + +*Note: if you see that both process group are exactly the same, please contact a Dynatrace expert to create a Process* +*Group detection rule* + +In the case the PG are PROD and E2E, then we need to create a rule that looks like this: + +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {Service:DetectedName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +- tag: Infotainment +- skipDeployment: false +``` + +The rule will get the Service Detected Name (current name) and it will extract (with a regex) the part of the kubernetes namespace after the "-", so -prod or -e2e, resulting in: +*DataDownloadV1 - prod* +*DataDownloadV1 - e2e* + +Now, services will be easy to identify. + +You can create rules based on any property/metadata. Some other placeholder's eamples: +{Service:DatabaseName} - E2E +{Service:WebServiceName} - {ProcessGroup:Kubernetes:microservice} - {ProcessGroup:Kubernetes:environment} +{Service:DetectedName} - {ProcessGroup:KubernetesContainerName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +{Service:DetectedName} - {ProcessGroup:SpringBootProfileName/[^\\-]*$} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ipa-gateway/conditional-naming-service/conditional-naming-service.yaml b/BMW-Dynatrace-config/CD_ipa-gateway/conditional-naming-service/conditional-naming-service.yaml new file mode 100644 index 00000000..7cf80534 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ipa-gateway/conditional-naming-service/conditional-naming-service.yaml @@ -0,0 +1,8 @@ +config: +- CDipa-gateway: template.json + +CDipa-gateway: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: ipa-gateway +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_ipa-gateway/conditional-naming-service/template.json b/BMW-Dynatrace-config/CD_ipa-gateway/conditional-naming-service/template.json new file mode 100644 index 00000000..5d4fac56 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ipa-gateway/conditional-naming-service/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "type": "SERVICE" +} \ 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 index d41c4c77..5f35e5c1 100644 --- a/BMW-Dynatrace-config/CD_ipa-gateway/custom-service-java/README.md +++ b/BMW-Dynatrace-config/CD_ipa-gateway/custom-service-java/README.md @@ -1,30 +1,4 @@ -## 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 configure custom services? -## 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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Custom+Services) page to configure your custom services. \ 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 index 92e734fa..1695924c 100644 --- a/BMW-Dynatrace-config/CD_ipa-gateway/synthetic-monitor/README.md +++ b/BMW-Dynatrace-config/CD_ipa-gateway/synthetic-monitor/README.md @@ -1,37 +1,4 @@ -# Synthetic Configuration -To calculate the Availability KPI, a synthetic must be configured. +### How to configure synthetics? -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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Synthetic+Monitors) page to configure your synthetics. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_jdssp21/conditional-naming-processgroup/README.md b/BMW-Dynatrace-config/CD_jdssp21/conditional-naming-processgroup/README.md new file mode 100644 index 00000000..f94196a5 --- /dev/null +++ b/BMW-Dynatrace-config/CD_jdssp21/conditional-naming-processgroup/README.md @@ -0,0 +1,67 @@ +### Process Group Detection Rules and Naming + +#### Detection Rule or Naming? + +For the explanation, we're using a real example of the Infotainment application: + +!(PGNaming1)[../../../../img/PGNaming1.PNG] + +Before working with your dashboards and alerting profiles, an important task to do when working with Dynatrace is checking +the structure of your applications (process groups). You can do that clicking under *technologies* and filter using your +application Management Zone. + +In the picture above, there are two Process Groups called bon-information-prod. **If you see duplicated process groups like in** +**this case, you MUST follow this guideline** + +Next step would be to open both process groups and compare the metadata. In that way, you can identify if all process instances are +part of the same application or not. An easy way to do that is asking yourself: how many instances of my application do i have? + +If you have 4 instances in total and you're able to see 2 in one PG and other 2 in other PG it means that **they are part of the ** +**same application** + +Another situation could be that checking on the metadata, then you see that are **two different application** and Dynatrace is just naming +the process group in the same way + +*Same application* +- Problem: Dynatrace is creating two different process groups, what transalates in two separated services for the same application. Instead of +seeing all the traffic in one service, you will have it splitted and it will complicate your monitoring +- Solution: create a process group detection rule. Contact Dynatrace Expert + +*Different application* +- Problem: Dynatrace is just naming in the same way applications that are different. +- Solution: This case is less severe, since it can be fixed with a process group naming rule. + + +What about our example? +!(PGNaming2)[../../../../img/PGNaming2.PNG] +!(PGNaming3)[../../../../img/PGNaming3.PNG] + +Based on the feedback of the infotaiment team, each process group is a different application (microservice) and it's visible in the kubernetes container/workload +within the metadata of each Process Group. + +#### How to create a Process Group Detection Rule +1. Open the *conditional-naming-processgroup.yaml* file and create a rule that looks like this: +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName} +- tag: Infotainment +- skipDeployment: false +``` +The result of the rule will be renaming the PG to this: +``` +bon-information-prod ipa +bon-information-prod rsl +``` + +Other possible placeholders that you can use are for example: +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName/[^\\-]*$} +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesFullPodName/buffet-(.*?)-} +{ProcessGroup:DetectedName} - {HostGroup:Name/[^\\_]*$} +{ProcessGroup:KubernetesNamespace} +{ProcessGroup:CommandLineArgs/.*?\\-f\\s\\/www\\/(.*?)\\/generated\\/httpd\\.conf.*?} + +You can combine different ones. Check the (documentation)[link] for more \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_jdssp21/conditional-naming-processgroup/conditional-naming-processgroup.yaml b/BMW-Dynatrace-config/CD_jdssp21/conditional-naming-processgroup/conditional-naming-processgroup.yaml new file mode 100644 index 00000000..cb9f3c86 --- /dev/null +++ b/BMW-Dynatrace-config/CD_jdssp21/conditional-naming-processgroup/conditional-naming-processgroup.yaml @@ -0,0 +1,8 @@ +config: +- CDjdssp21: template.json + +CDjdssp21: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: jdssp21 +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_jdssp21/conditional-naming-processgroup/template.json b/BMW-Dynatrace-config/CD_jdssp21/conditional-naming-processgroup/template.json new file mode 100644 index 00000000..7c039808 --- /dev/null +++ b/BMW-Dynatrace-config/CD_jdssp21/conditional-naming-processgroup/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "type": "PROCESS_GROUP" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_jdssp21/conditional-naming-service/README.md b/BMW-Dynatrace-config/CD_jdssp21/conditional-naming-service/README.md new file mode 100644 index 00000000..c34ef308 --- /dev/null +++ b/BMW-Dynatrace-config/CD_jdssp21/conditional-naming-service/README.md @@ -0,0 +1,35 @@ +### Service Naming Rules + +A typical case could be that you access to *Transaction & Services* and you find two services that are exactly the same: +*DataDownloadV1* +*DataDownloadV1* + +If you drilldown into the service and you check in the process group, you may have a PROD and a E2E for each service. + +*Note: if you see that both process group are exactly the same, please contact a Dynatrace expert to create a Process* +*Group detection rule* + +In the case the PG are PROD and E2E, then we need to create a rule that looks like this: + +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {Service:DetectedName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +- tag: Infotainment +- skipDeployment: false +``` + +The rule will get the Service Detected Name (current name) and it will extract (with a regex) the part of the kubernetes namespace after the "-", so -prod or -e2e, resulting in: +*DataDownloadV1 - prod* +*DataDownloadV1 - e2e* + +Now, services will be easy to identify. + +You can create rules based on any property/metadata. Some other placeholder's eamples: +{Service:DatabaseName} - E2E +{Service:WebServiceName} - {ProcessGroup:Kubernetes:microservice} - {ProcessGroup:Kubernetes:environment} +{Service:DetectedName} - {ProcessGroup:KubernetesContainerName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +{Service:DetectedName} - {ProcessGroup:SpringBootProfileName/[^\\-]*$} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_jdssp21/conditional-naming-service/conditional-naming-service.yaml b/BMW-Dynatrace-config/CD_jdssp21/conditional-naming-service/conditional-naming-service.yaml new file mode 100644 index 00000000..cb9f3c86 --- /dev/null +++ b/BMW-Dynatrace-config/CD_jdssp21/conditional-naming-service/conditional-naming-service.yaml @@ -0,0 +1,8 @@ +config: +- CDjdssp21: template.json + +CDjdssp21: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: jdssp21 +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_jdssp21/conditional-naming-service/template.json b/BMW-Dynatrace-config/CD_jdssp21/conditional-naming-service/template.json new file mode 100644 index 00000000..5d4fac56 --- /dev/null +++ b/BMW-Dynatrace-config/CD_jdssp21/conditional-naming-service/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "type": "SERVICE" +} \ 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 index d41c4c77..5f35e5c1 100644 --- a/BMW-Dynatrace-config/CD_jdssp21/custom-service-java/README.md +++ b/BMW-Dynatrace-config/CD_jdssp21/custom-service-java/README.md @@ -1,30 +1,4 @@ -## 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 configure custom services? -## 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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Custom+Services) page to configure your custom services. \ 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 index 92e734fa..1695924c 100644 --- a/BMW-Dynatrace-config/CD_jdssp21/synthetic-monitor/README.md +++ b/BMW-Dynatrace-config/CD_jdssp21/synthetic-monitor/README.md @@ -1,37 +1,4 @@ -# Synthetic Configuration -To calculate the Availability KPI, a synthetic must be configured. +### How to configure synthetics? -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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Synthetic+Monitors) page to configure your synthetics. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_legacy-deletion-service/conditional-naming-processgroup/README.md b/BMW-Dynatrace-config/CD_legacy-deletion-service/conditional-naming-processgroup/README.md new file mode 100644 index 00000000..f94196a5 --- /dev/null +++ b/BMW-Dynatrace-config/CD_legacy-deletion-service/conditional-naming-processgroup/README.md @@ -0,0 +1,67 @@ +### Process Group Detection Rules and Naming + +#### Detection Rule or Naming? + +For the explanation, we're using a real example of the Infotainment application: + +!(PGNaming1)[../../../../img/PGNaming1.PNG] + +Before working with your dashboards and alerting profiles, an important task to do when working with Dynatrace is checking +the structure of your applications (process groups). You can do that clicking under *technologies* and filter using your +application Management Zone. + +In the picture above, there are two Process Groups called bon-information-prod. **If you see duplicated process groups like in** +**this case, you MUST follow this guideline** + +Next step would be to open both process groups and compare the metadata. In that way, you can identify if all process instances are +part of the same application or not. An easy way to do that is asking yourself: how many instances of my application do i have? + +If you have 4 instances in total and you're able to see 2 in one PG and other 2 in other PG it means that **they are part of the ** +**same application** + +Another situation could be that checking on the metadata, then you see that are **two different application** and Dynatrace is just naming +the process group in the same way + +*Same application* +- Problem: Dynatrace is creating two different process groups, what transalates in two separated services for the same application. Instead of +seeing all the traffic in one service, you will have it splitted and it will complicate your monitoring +- Solution: create a process group detection rule. Contact Dynatrace Expert + +*Different application* +- Problem: Dynatrace is just naming in the same way applications that are different. +- Solution: This case is less severe, since it can be fixed with a process group naming rule. + + +What about our example? +!(PGNaming2)[../../../../img/PGNaming2.PNG] +!(PGNaming3)[../../../../img/PGNaming3.PNG] + +Based on the feedback of the infotaiment team, each process group is a different application (microservice) and it's visible in the kubernetes container/workload +within the metadata of each Process Group. + +#### How to create a Process Group Detection Rule +1. Open the *conditional-naming-processgroup.yaml* file and create a rule that looks like this: +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName} +- tag: Infotainment +- skipDeployment: false +``` +The result of the rule will be renaming the PG to this: +``` +bon-information-prod ipa +bon-information-prod rsl +``` + +Other possible placeholders that you can use are for example: +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName/[^\\-]*$} +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesFullPodName/buffet-(.*?)-} +{ProcessGroup:DetectedName} - {HostGroup:Name/[^\\_]*$} +{ProcessGroup:KubernetesNamespace} +{ProcessGroup:CommandLineArgs/.*?\\-f\\s\\/www\\/(.*?)\\/generated\\/httpd\\.conf.*?} + +You can combine different ones. Check the (documentation)[link] for more \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_legacy-deletion-service/conditional-naming-processgroup/conditional-naming-processgroup.yaml b/BMW-Dynatrace-config/CD_legacy-deletion-service/conditional-naming-processgroup/conditional-naming-processgroup.yaml new file mode 100644 index 00000000..acc19556 --- /dev/null +++ b/BMW-Dynatrace-config/CD_legacy-deletion-service/conditional-naming-processgroup/conditional-naming-processgroup.yaml @@ -0,0 +1,8 @@ +config: +- CDlegacy-deletion-service: template.json + +CDlegacy-deletion-service: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: legacy-deletion-service +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_legacy-deletion-service/conditional-naming-processgroup/template.json b/BMW-Dynatrace-config/CD_legacy-deletion-service/conditional-naming-processgroup/template.json new file mode 100644 index 00000000..7c039808 --- /dev/null +++ b/BMW-Dynatrace-config/CD_legacy-deletion-service/conditional-naming-processgroup/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "type": "PROCESS_GROUP" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_legacy-deletion-service/conditional-naming-service/README.md b/BMW-Dynatrace-config/CD_legacy-deletion-service/conditional-naming-service/README.md new file mode 100644 index 00000000..c34ef308 --- /dev/null +++ b/BMW-Dynatrace-config/CD_legacy-deletion-service/conditional-naming-service/README.md @@ -0,0 +1,35 @@ +### Service Naming Rules + +A typical case could be that you access to *Transaction & Services* and you find two services that are exactly the same: +*DataDownloadV1* +*DataDownloadV1* + +If you drilldown into the service and you check in the process group, you may have a PROD and a E2E for each service. + +*Note: if you see that both process group are exactly the same, please contact a Dynatrace expert to create a Process* +*Group detection rule* + +In the case the PG are PROD and E2E, then we need to create a rule that looks like this: + +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {Service:DetectedName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +- tag: Infotainment +- skipDeployment: false +``` + +The rule will get the Service Detected Name (current name) and it will extract (with a regex) the part of the kubernetes namespace after the "-", so -prod or -e2e, resulting in: +*DataDownloadV1 - prod* +*DataDownloadV1 - e2e* + +Now, services will be easy to identify. + +You can create rules based on any property/metadata. Some other placeholder's eamples: +{Service:DatabaseName} - E2E +{Service:WebServiceName} - {ProcessGroup:Kubernetes:microservice} - {ProcessGroup:Kubernetes:environment} +{Service:DetectedName} - {ProcessGroup:KubernetesContainerName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +{Service:DetectedName} - {ProcessGroup:SpringBootProfileName/[^\\-]*$} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_legacy-deletion-service/conditional-naming-service/conditional-naming-service.yaml b/BMW-Dynatrace-config/CD_legacy-deletion-service/conditional-naming-service/conditional-naming-service.yaml new file mode 100644 index 00000000..acc19556 --- /dev/null +++ b/BMW-Dynatrace-config/CD_legacy-deletion-service/conditional-naming-service/conditional-naming-service.yaml @@ -0,0 +1,8 @@ +config: +- CDlegacy-deletion-service: template.json + +CDlegacy-deletion-service: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: legacy-deletion-service +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_legacy-deletion-service/conditional-naming-service/template.json b/BMW-Dynatrace-config/CD_legacy-deletion-service/conditional-naming-service/template.json new file mode 100644 index 00000000..5d4fac56 --- /dev/null +++ b/BMW-Dynatrace-config/CD_legacy-deletion-service/conditional-naming-service/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "type": "SERVICE" +} \ 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 index d41c4c77..5f35e5c1 100644 --- 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 @@ -1,30 +1,4 @@ -## 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 configure custom services? -## 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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Custom+Services) page to configure your custom services. \ 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 index 92e734fa..1695924c 100644 --- a/BMW-Dynatrace-config/CD_legacy-deletion-service/synthetic-monitor/README.md +++ b/BMW-Dynatrace-config/CD_legacy-deletion-service/synthetic-monitor/README.md @@ -1,37 +1,4 @@ -# Synthetic Configuration -To calculate the Availability KPI, a synthetic must be configured. +### How to configure synthetics? -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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Synthetic+Monitors) page to configure your synthetics. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_legacy-sar-service/conditional-naming-processgroup/README.md b/BMW-Dynatrace-config/CD_legacy-sar-service/conditional-naming-processgroup/README.md new file mode 100644 index 00000000..f94196a5 --- /dev/null +++ b/BMW-Dynatrace-config/CD_legacy-sar-service/conditional-naming-processgroup/README.md @@ -0,0 +1,67 @@ +### Process Group Detection Rules and Naming + +#### Detection Rule or Naming? + +For the explanation, we're using a real example of the Infotainment application: + +!(PGNaming1)[../../../../img/PGNaming1.PNG] + +Before working with your dashboards and alerting profiles, an important task to do when working with Dynatrace is checking +the structure of your applications (process groups). You can do that clicking under *technologies* and filter using your +application Management Zone. + +In the picture above, there are two Process Groups called bon-information-prod. **If you see duplicated process groups like in** +**this case, you MUST follow this guideline** + +Next step would be to open both process groups and compare the metadata. In that way, you can identify if all process instances are +part of the same application or not. An easy way to do that is asking yourself: how many instances of my application do i have? + +If you have 4 instances in total and you're able to see 2 in one PG and other 2 in other PG it means that **they are part of the ** +**same application** + +Another situation could be that checking on the metadata, then you see that are **two different application** and Dynatrace is just naming +the process group in the same way + +*Same application* +- Problem: Dynatrace is creating two different process groups, what transalates in two separated services for the same application. Instead of +seeing all the traffic in one service, you will have it splitted and it will complicate your monitoring +- Solution: create a process group detection rule. Contact Dynatrace Expert + +*Different application* +- Problem: Dynatrace is just naming in the same way applications that are different. +- Solution: This case is less severe, since it can be fixed with a process group naming rule. + + +What about our example? +!(PGNaming2)[../../../../img/PGNaming2.PNG] +!(PGNaming3)[../../../../img/PGNaming3.PNG] + +Based on the feedback of the infotaiment team, each process group is a different application (microservice) and it's visible in the kubernetes container/workload +within the metadata of each Process Group. + +#### How to create a Process Group Detection Rule +1. Open the *conditional-naming-processgroup.yaml* file and create a rule that looks like this: +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName} +- tag: Infotainment +- skipDeployment: false +``` +The result of the rule will be renaming the PG to this: +``` +bon-information-prod ipa +bon-information-prod rsl +``` + +Other possible placeholders that you can use are for example: +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName/[^\\-]*$} +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesFullPodName/buffet-(.*?)-} +{ProcessGroup:DetectedName} - {HostGroup:Name/[^\\_]*$} +{ProcessGroup:KubernetesNamespace} +{ProcessGroup:CommandLineArgs/.*?\\-f\\s\\/www\\/(.*?)\\/generated\\/httpd\\.conf.*?} + +You can combine different ones. Check the (documentation)[link] for more \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_legacy-sar-service/conditional-naming-processgroup/conditional-naming-processgroup.yaml b/BMW-Dynatrace-config/CD_legacy-sar-service/conditional-naming-processgroup/conditional-naming-processgroup.yaml new file mode 100644 index 00000000..9295a863 --- /dev/null +++ b/BMW-Dynatrace-config/CD_legacy-sar-service/conditional-naming-processgroup/conditional-naming-processgroup.yaml @@ -0,0 +1,8 @@ +config: +- CDlegacy-sar-service: template.json + +CDlegacy-sar-service: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: legacy-sar-service +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_legacy-sar-service/conditional-naming-processgroup/template.json b/BMW-Dynatrace-config/CD_legacy-sar-service/conditional-naming-processgroup/template.json new file mode 100644 index 00000000..7c039808 --- /dev/null +++ b/BMW-Dynatrace-config/CD_legacy-sar-service/conditional-naming-processgroup/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "type": "PROCESS_GROUP" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_legacy-sar-service/conditional-naming-service/README.md b/BMW-Dynatrace-config/CD_legacy-sar-service/conditional-naming-service/README.md new file mode 100644 index 00000000..c34ef308 --- /dev/null +++ b/BMW-Dynatrace-config/CD_legacy-sar-service/conditional-naming-service/README.md @@ -0,0 +1,35 @@ +### Service Naming Rules + +A typical case could be that you access to *Transaction & Services* and you find two services that are exactly the same: +*DataDownloadV1* +*DataDownloadV1* + +If you drilldown into the service and you check in the process group, you may have a PROD and a E2E for each service. + +*Note: if you see that both process group are exactly the same, please contact a Dynatrace expert to create a Process* +*Group detection rule* + +In the case the PG are PROD and E2E, then we need to create a rule that looks like this: + +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {Service:DetectedName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +- tag: Infotainment +- skipDeployment: false +``` + +The rule will get the Service Detected Name (current name) and it will extract (with a regex) the part of the kubernetes namespace after the "-", so -prod or -e2e, resulting in: +*DataDownloadV1 - prod* +*DataDownloadV1 - e2e* + +Now, services will be easy to identify. + +You can create rules based on any property/metadata. Some other placeholder's eamples: +{Service:DatabaseName} - E2E +{Service:WebServiceName} - {ProcessGroup:Kubernetes:microservice} - {ProcessGroup:Kubernetes:environment} +{Service:DetectedName} - {ProcessGroup:KubernetesContainerName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +{Service:DetectedName} - {ProcessGroup:SpringBootProfileName/[^\\-]*$} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_legacy-sar-service/conditional-naming-service/conditional-naming-service.yaml b/BMW-Dynatrace-config/CD_legacy-sar-service/conditional-naming-service/conditional-naming-service.yaml new file mode 100644 index 00000000..9295a863 --- /dev/null +++ b/BMW-Dynatrace-config/CD_legacy-sar-service/conditional-naming-service/conditional-naming-service.yaml @@ -0,0 +1,8 @@ +config: +- CDlegacy-sar-service: template.json + +CDlegacy-sar-service: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: legacy-sar-service +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_legacy-sar-service/conditional-naming-service/template.json b/BMW-Dynatrace-config/CD_legacy-sar-service/conditional-naming-service/template.json new file mode 100644 index 00000000..5d4fac56 --- /dev/null +++ b/BMW-Dynatrace-config/CD_legacy-sar-service/conditional-naming-service/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "type": "SERVICE" +} \ 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 index d41c4c77..5f35e5c1 100644 --- 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 @@ -1,30 +1,4 @@ -## 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 configure custom services? -## 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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Custom+Services) page to configure your custom services. \ 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 index 92e734fa..1695924c 100644 --- a/BMW-Dynatrace-config/CD_legacy-sar-service/synthetic-monitor/README.md +++ b/BMW-Dynatrace-config/CD_legacy-sar-service/synthetic-monitor/README.md @@ -1,37 +1,4 @@ -# Synthetic Configuration -To calculate the Availability KPI, a synthetic must be configured. +### How to configure synthetics? -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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Synthetic+Monitors) page to configure your synthetics. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_legal-document-composite-service/conditional-naming-processgroup/README.md b/BMW-Dynatrace-config/CD_legal-document-composite-service/conditional-naming-processgroup/README.md new file mode 100644 index 00000000..f94196a5 --- /dev/null +++ b/BMW-Dynatrace-config/CD_legal-document-composite-service/conditional-naming-processgroup/README.md @@ -0,0 +1,67 @@ +### Process Group Detection Rules and Naming + +#### Detection Rule or Naming? + +For the explanation, we're using a real example of the Infotainment application: + +!(PGNaming1)[../../../../img/PGNaming1.PNG] + +Before working with your dashboards and alerting profiles, an important task to do when working with Dynatrace is checking +the structure of your applications (process groups). You can do that clicking under *technologies* and filter using your +application Management Zone. + +In the picture above, there are two Process Groups called bon-information-prod. **If you see duplicated process groups like in** +**this case, you MUST follow this guideline** + +Next step would be to open both process groups and compare the metadata. In that way, you can identify if all process instances are +part of the same application or not. An easy way to do that is asking yourself: how many instances of my application do i have? + +If you have 4 instances in total and you're able to see 2 in one PG and other 2 in other PG it means that **they are part of the ** +**same application** + +Another situation could be that checking on the metadata, then you see that are **two different application** and Dynatrace is just naming +the process group in the same way + +*Same application* +- Problem: Dynatrace is creating two different process groups, what transalates in two separated services for the same application. Instead of +seeing all the traffic in one service, you will have it splitted and it will complicate your monitoring +- Solution: create a process group detection rule. Contact Dynatrace Expert + +*Different application* +- Problem: Dynatrace is just naming in the same way applications that are different. +- Solution: This case is less severe, since it can be fixed with a process group naming rule. + + +What about our example? +!(PGNaming2)[../../../../img/PGNaming2.PNG] +!(PGNaming3)[../../../../img/PGNaming3.PNG] + +Based on the feedback of the infotaiment team, each process group is a different application (microservice) and it's visible in the kubernetes container/workload +within the metadata of each Process Group. + +#### How to create a Process Group Detection Rule +1. Open the *conditional-naming-processgroup.yaml* file and create a rule that looks like this: +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName} +- tag: Infotainment +- skipDeployment: false +``` +The result of the rule will be renaming the PG to this: +``` +bon-information-prod ipa +bon-information-prod rsl +``` + +Other possible placeholders that you can use are for example: +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName/[^\\-]*$} +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesFullPodName/buffet-(.*?)-} +{ProcessGroup:DetectedName} - {HostGroup:Name/[^\\_]*$} +{ProcessGroup:KubernetesNamespace} +{ProcessGroup:CommandLineArgs/.*?\\-f\\s\\/www\\/(.*?)\\/generated\\/httpd\\.conf.*?} + +You can combine different ones. Check the (documentation)[link] for more \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_legal-document-composite-service/conditional-naming-processgroup/conditional-naming-processgroup.yaml b/BMW-Dynatrace-config/CD_legal-document-composite-service/conditional-naming-processgroup/conditional-naming-processgroup.yaml new file mode 100644 index 00000000..a5a9491e --- /dev/null +++ b/BMW-Dynatrace-config/CD_legal-document-composite-service/conditional-naming-processgroup/conditional-naming-processgroup.yaml @@ -0,0 +1,8 @@ +config: +- CDlegal-document-composite-service: template.json + +CDlegal-document-composite-service: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: legal-document-composite-service +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_legal-document-composite-service/conditional-naming-processgroup/template.json b/BMW-Dynatrace-config/CD_legal-document-composite-service/conditional-naming-processgroup/template.json new file mode 100644 index 00000000..7c039808 --- /dev/null +++ b/BMW-Dynatrace-config/CD_legal-document-composite-service/conditional-naming-processgroup/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "type": "PROCESS_GROUP" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_legal-document-composite-service/conditional-naming-service/README.md b/BMW-Dynatrace-config/CD_legal-document-composite-service/conditional-naming-service/README.md new file mode 100644 index 00000000..c34ef308 --- /dev/null +++ b/BMW-Dynatrace-config/CD_legal-document-composite-service/conditional-naming-service/README.md @@ -0,0 +1,35 @@ +### Service Naming Rules + +A typical case could be that you access to *Transaction & Services* and you find two services that are exactly the same: +*DataDownloadV1* +*DataDownloadV1* + +If you drilldown into the service and you check in the process group, you may have a PROD and a E2E for each service. + +*Note: if you see that both process group are exactly the same, please contact a Dynatrace expert to create a Process* +*Group detection rule* + +In the case the PG are PROD and E2E, then we need to create a rule that looks like this: + +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {Service:DetectedName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +- tag: Infotainment +- skipDeployment: false +``` + +The rule will get the Service Detected Name (current name) and it will extract (with a regex) the part of the kubernetes namespace after the "-", so -prod or -e2e, resulting in: +*DataDownloadV1 - prod* +*DataDownloadV1 - e2e* + +Now, services will be easy to identify. + +You can create rules based on any property/metadata. Some other placeholder's eamples: +{Service:DatabaseName} - E2E +{Service:WebServiceName} - {ProcessGroup:Kubernetes:microservice} - {ProcessGroup:Kubernetes:environment} +{Service:DetectedName} - {ProcessGroup:KubernetesContainerName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +{Service:DetectedName} - {ProcessGroup:SpringBootProfileName/[^\\-]*$} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_legal-document-composite-service/conditional-naming-service/conditional-naming-service.yaml b/BMW-Dynatrace-config/CD_legal-document-composite-service/conditional-naming-service/conditional-naming-service.yaml new file mode 100644 index 00000000..a5a9491e --- /dev/null +++ b/BMW-Dynatrace-config/CD_legal-document-composite-service/conditional-naming-service/conditional-naming-service.yaml @@ -0,0 +1,8 @@ +config: +- CDlegal-document-composite-service: template.json + +CDlegal-document-composite-service: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: legal-document-composite-service +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_legal-document-composite-service/conditional-naming-service/template.json b/BMW-Dynatrace-config/CD_legal-document-composite-service/conditional-naming-service/template.json new file mode 100644 index 00000000..5d4fac56 --- /dev/null +++ b/BMW-Dynatrace-config/CD_legal-document-composite-service/conditional-naming-service/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "type": "SERVICE" +} \ 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 index d41c4c77..5f35e5c1 100644 --- 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 @@ -1,30 +1,4 @@ -## 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 configure custom services? -## 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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Custom+Services) page to configure your custom services. \ 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 index 92e734fa..1695924c 100644 --- 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 @@ -1,37 +1,4 @@ -# Synthetic Configuration -To calculate the Availability KPI, a synthetic must be configured. +### How to configure synthetics? -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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Synthetic+Monitors) page to configure your synthetics. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_log-data-deletion-service/conditional-naming-processgroup/README.md b/BMW-Dynatrace-config/CD_log-data-deletion-service/conditional-naming-processgroup/README.md new file mode 100644 index 00000000..f94196a5 --- /dev/null +++ b/BMW-Dynatrace-config/CD_log-data-deletion-service/conditional-naming-processgroup/README.md @@ -0,0 +1,67 @@ +### Process Group Detection Rules and Naming + +#### Detection Rule or Naming? + +For the explanation, we're using a real example of the Infotainment application: + +!(PGNaming1)[../../../../img/PGNaming1.PNG] + +Before working with your dashboards and alerting profiles, an important task to do when working with Dynatrace is checking +the structure of your applications (process groups). You can do that clicking under *technologies* and filter using your +application Management Zone. + +In the picture above, there are two Process Groups called bon-information-prod. **If you see duplicated process groups like in** +**this case, you MUST follow this guideline** + +Next step would be to open both process groups and compare the metadata. In that way, you can identify if all process instances are +part of the same application or not. An easy way to do that is asking yourself: how many instances of my application do i have? + +If you have 4 instances in total and you're able to see 2 in one PG and other 2 in other PG it means that **they are part of the ** +**same application** + +Another situation could be that checking on the metadata, then you see that are **two different application** and Dynatrace is just naming +the process group in the same way + +*Same application* +- Problem: Dynatrace is creating two different process groups, what transalates in two separated services for the same application. Instead of +seeing all the traffic in one service, you will have it splitted and it will complicate your monitoring +- Solution: create a process group detection rule. Contact Dynatrace Expert + +*Different application* +- Problem: Dynatrace is just naming in the same way applications that are different. +- Solution: This case is less severe, since it can be fixed with a process group naming rule. + + +What about our example? +!(PGNaming2)[../../../../img/PGNaming2.PNG] +!(PGNaming3)[../../../../img/PGNaming3.PNG] + +Based on the feedback of the infotaiment team, each process group is a different application (microservice) and it's visible in the kubernetes container/workload +within the metadata of each Process Group. + +#### How to create a Process Group Detection Rule +1. Open the *conditional-naming-processgroup.yaml* file and create a rule that looks like this: +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName} +- tag: Infotainment +- skipDeployment: false +``` +The result of the rule will be renaming the PG to this: +``` +bon-information-prod ipa +bon-information-prod rsl +``` + +Other possible placeholders that you can use are for example: +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName/[^\\-]*$} +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesFullPodName/buffet-(.*?)-} +{ProcessGroup:DetectedName} - {HostGroup:Name/[^\\_]*$} +{ProcessGroup:KubernetesNamespace} +{ProcessGroup:CommandLineArgs/.*?\\-f\\s\\/www\\/(.*?)\\/generated\\/httpd\\.conf.*?} + +You can combine different ones. Check the (documentation)[link] for more \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_log-data-deletion-service/conditional-naming-processgroup/conditional-naming-processgroup.yaml b/BMW-Dynatrace-config/CD_log-data-deletion-service/conditional-naming-processgroup/conditional-naming-processgroup.yaml new file mode 100644 index 00000000..c2a0ca11 --- /dev/null +++ b/BMW-Dynatrace-config/CD_log-data-deletion-service/conditional-naming-processgroup/conditional-naming-processgroup.yaml @@ -0,0 +1,8 @@ +config: +- CDlog-data-deletion-service: template.json + +CDlog-data-deletion-service: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: log-data-deletion-service +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_log-data-deletion-service/conditional-naming-processgroup/template.json b/BMW-Dynatrace-config/CD_log-data-deletion-service/conditional-naming-processgroup/template.json new file mode 100644 index 00000000..7c039808 --- /dev/null +++ b/BMW-Dynatrace-config/CD_log-data-deletion-service/conditional-naming-processgroup/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "type": "PROCESS_GROUP" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_log-data-deletion-service/conditional-naming-service/README.md b/BMW-Dynatrace-config/CD_log-data-deletion-service/conditional-naming-service/README.md new file mode 100644 index 00000000..c34ef308 --- /dev/null +++ b/BMW-Dynatrace-config/CD_log-data-deletion-service/conditional-naming-service/README.md @@ -0,0 +1,35 @@ +### Service Naming Rules + +A typical case could be that you access to *Transaction & Services* and you find two services that are exactly the same: +*DataDownloadV1* +*DataDownloadV1* + +If you drilldown into the service and you check in the process group, you may have a PROD and a E2E for each service. + +*Note: if you see that both process group are exactly the same, please contact a Dynatrace expert to create a Process* +*Group detection rule* + +In the case the PG are PROD and E2E, then we need to create a rule that looks like this: + +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {Service:DetectedName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +- tag: Infotainment +- skipDeployment: false +``` + +The rule will get the Service Detected Name (current name) and it will extract (with a regex) the part of the kubernetes namespace after the "-", so -prod or -e2e, resulting in: +*DataDownloadV1 - prod* +*DataDownloadV1 - e2e* + +Now, services will be easy to identify. + +You can create rules based on any property/metadata. Some other placeholder's eamples: +{Service:DatabaseName} - E2E +{Service:WebServiceName} - {ProcessGroup:Kubernetes:microservice} - {ProcessGroup:Kubernetes:environment} +{Service:DetectedName} - {ProcessGroup:KubernetesContainerName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +{Service:DetectedName} - {ProcessGroup:SpringBootProfileName/[^\\-]*$} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_log-data-deletion-service/conditional-naming-service/conditional-naming-service.yaml b/BMW-Dynatrace-config/CD_log-data-deletion-service/conditional-naming-service/conditional-naming-service.yaml new file mode 100644 index 00000000..c2a0ca11 --- /dev/null +++ b/BMW-Dynatrace-config/CD_log-data-deletion-service/conditional-naming-service/conditional-naming-service.yaml @@ -0,0 +1,8 @@ +config: +- CDlog-data-deletion-service: template.json + +CDlog-data-deletion-service: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: log-data-deletion-service +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_log-data-deletion-service/conditional-naming-service/template.json b/BMW-Dynatrace-config/CD_log-data-deletion-service/conditional-naming-service/template.json new file mode 100644 index 00000000..5d4fac56 --- /dev/null +++ b/BMW-Dynatrace-config/CD_log-data-deletion-service/conditional-naming-service/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "type": "SERVICE" +} \ 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 index d41c4c77..5f35e5c1 100644 --- 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 @@ -1,30 +1,4 @@ -## 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 configure custom services? -## 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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Custom+Services) page to configure your custom services. \ 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 index 92e734fa..1695924c 100644 --- 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 @@ -1,37 +1,4 @@ -# Synthetic Configuration -To calculate the Availability KPI, a synthetic must be configured. +### How to configure synthetics? -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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Synthetic+Monitors) page to configure your synthetics. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_lsc-kc/conditional-naming-processgroup/README.md b/BMW-Dynatrace-config/CD_lsc-kc/conditional-naming-processgroup/README.md new file mode 100644 index 00000000..f94196a5 --- /dev/null +++ b/BMW-Dynatrace-config/CD_lsc-kc/conditional-naming-processgroup/README.md @@ -0,0 +1,67 @@ +### Process Group Detection Rules and Naming + +#### Detection Rule or Naming? + +For the explanation, we're using a real example of the Infotainment application: + +!(PGNaming1)[../../../../img/PGNaming1.PNG] + +Before working with your dashboards and alerting profiles, an important task to do when working with Dynatrace is checking +the structure of your applications (process groups). You can do that clicking under *technologies* and filter using your +application Management Zone. + +In the picture above, there are two Process Groups called bon-information-prod. **If you see duplicated process groups like in** +**this case, you MUST follow this guideline** + +Next step would be to open both process groups and compare the metadata. In that way, you can identify if all process instances are +part of the same application or not. An easy way to do that is asking yourself: how many instances of my application do i have? + +If you have 4 instances in total and you're able to see 2 in one PG and other 2 in other PG it means that **they are part of the ** +**same application** + +Another situation could be that checking on the metadata, then you see that are **two different application** and Dynatrace is just naming +the process group in the same way + +*Same application* +- Problem: Dynatrace is creating two different process groups, what transalates in two separated services for the same application. Instead of +seeing all the traffic in one service, you will have it splitted and it will complicate your monitoring +- Solution: create a process group detection rule. Contact Dynatrace Expert + +*Different application* +- Problem: Dynatrace is just naming in the same way applications that are different. +- Solution: This case is less severe, since it can be fixed with a process group naming rule. + + +What about our example? +!(PGNaming2)[../../../../img/PGNaming2.PNG] +!(PGNaming3)[../../../../img/PGNaming3.PNG] + +Based on the feedback of the infotaiment team, each process group is a different application (microservice) and it's visible in the kubernetes container/workload +within the metadata of each Process Group. + +#### How to create a Process Group Detection Rule +1. Open the *conditional-naming-processgroup.yaml* file and create a rule that looks like this: +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName} +- tag: Infotainment +- skipDeployment: false +``` +The result of the rule will be renaming the PG to this: +``` +bon-information-prod ipa +bon-information-prod rsl +``` + +Other possible placeholders that you can use are for example: +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName/[^\\-]*$} +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesFullPodName/buffet-(.*?)-} +{ProcessGroup:DetectedName} - {HostGroup:Name/[^\\_]*$} +{ProcessGroup:KubernetesNamespace} +{ProcessGroup:CommandLineArgs/.*?\\-f\\s\\/www\\/(.*?)\\/generated\\/httpd\\.conf.*?} + +You can combine different ones. Check the (documentation)[link] for more \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_lsc-kc/conditional-naming-processgroup/conditional-naming-processgroup.yaml b/BMW-Dynatrace-config/CD_lsc-kc/conditional-naming-processgroup/conditional-naming-processgroup.yaml new file mode 100644 index 00000000..fbca5175 --- /dev/null +++ b/BMW-Dynatrace-config/CD_lsc-kc/conditional-naming-processgroup/conditional-naming-processgroup.yaml @@ -0,0 +1,8 @@ +config: +- CDlsc-kc: template.json + +CDlsc-kc: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: lsc-kc +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_lsc-kc/conditional-naming-processgroup/template.json b/BMW-Dynatrace-config/CD_lsc-kc/conditional-naming-processgroup/template.json new file mode 100644 index 00000000..7c039808 --- /dev/null +++ b/BMW-Dynatrace-config/CD_lsc-kc/conditional-naming-processgroup/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "type": "PROCESS_GROUP" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_lsc-kc/conditional-naming-service/README.md b/BMW-Dynatrace-config/CD_lsc-kc/conditional-naming-service/README.md new file mode 100644 index 00000000..c34ef308 --- /dev/null +++ b/BMW-Dynatrace-config/CD_lsc-kc/conditional-naming-service/README.md @@ -0,0 +1,35 @@ +### Service Naming Rules + +A typical case could be that you access to *Transaction & Services* and you find two services that are exactly the same: +*DataDownloadV1* +*DataDownloadV1* + +If you drilldown into the service and you check in the process group, you may have a PROD and a E2E for each service. + +*Note: if you see that both process group are exactly the same, please contact a Dynatrace expert to create a Process* +*Group detection rule* + +In the case the PG are PROD and E2E, then we need to create a rule that looks like this: + +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {Service:DetectedName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +- tag: Infotainment +- skipDeployment: false +``` + +The rule will get the Service Detected Name (current name) and it will extract (with a regex) the part of the kubernetes namespace after the "-", so -prod or -e2e, resulting in: +*DataDownloadV1 - prod* +*DataDownloadV1 - e2e* + +Now, services will be easy to identify. + +You can create rules based on any property/metadata. Some other placeholder's eamples: +{Service:DatabaseName} - E2E +{Service:WebServiceName} - {ProcessGroup:Kubernetes:microservice} - {ProcessGroup:Kubernetes:environment} +{Service:DetectedName} - {ProcessGroup:KubernetesContainerName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +{Service:DetectedName} - {ProcessGroup:SpringBootProfileName/[^\\-]*$} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_lsc-kc/conditional-naming-service/conditional-naming-service.yaml b/BMW-Dynatrace-config/CD_lsc-kc/conditional-naming-service/conditional-naming-service.yaml new file mode 100644 index 00000000..fbca5175 --- /dev/null +++ b/BMW-Dynatrace-config/CD_lsc-kc/conditional-naming-service/conditional-naming-service.yaml @@ -0,0 +1,8 @@ +config: +- CDlsc-kc: template.json + +CDlsc-kc: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: lsc-kc +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_lsc-kc/conditional-naming-service/template.json b/BMW-Dynatrace-config/CD_lsc-kc/conditional-naming-service/template.json new file mode 100644 index 00000000..5d4fac56 --- /dev/null +++ b/BMW-Dynatrace-config/CD_lsc-kc/conditional-naming-service/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "type": "SERVICE" +} \ 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 index d41c4c77..5f35e5c1 100644 --- a/BMW-Dynatrace-config/CD_lsc-kc/custom-service-java/README.md +++ b/BMW-Dynatrace-config/CD_lsc-kc/custom-service-java/README.md @@ -1,30 +1,4 @@ -## 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 configure custom services? -## 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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Custom+Services) page to configure your custom services. \ 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 index 92e734fa..1695924c 100644 --- a/BMW-Dynatrace-config/CD_lsc-kc/synthetic-monitor/README.md +++ b/BMW-Dynatrace-config/CD_lsc-kc/synthetic-monitor/README.md @@ -1,37 +1,4 @@ -# Synthetic Configuration -To calculate the Availability KPI, a synthetic must be configured. +### How to configure synthetics? -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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Synthetic+Monitors) page to configure your synthetics. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_lsc-mm/conditional-naming-processgroup/README.md b/BMW-Dynatrace-config/CD_lsc-mm/conditional-naming-processgroup/README.md new file mode 100644 index 00000000..f94196a5 --- /dev/null +++ b/BMW-Dynatrace-config/CD_lsc-mm/conditional-naming-processgroup/README.md @@ -0,0 +1,67 @@ +### Process Group Detection Rules and Naming + +#### Detection Rule or Naming? + +For the explanation, we're using a real example of the Infotainment application: + +!(PGNaming1)[../../../../img/PGNaming1.PNG] + +Before working with your dashboards and alerting profiles, an important task to do when working with Dynatrace is checking +the structure of your applications (process groups). You can do that clicking under *technologies* and filter using your +application Management Zone. + +In the picture above, there are two Process Groups called bon-information-prod. **If you see duplicated process groups like in** +**this case, you MUST follow this guideline** + +Next step would be to open both process groups and compare the metadata. In that way, you can identify if all process instances are +part of the same application or not. An easy way to do that is asking yourself: how many instances of my application do i have? + +If you have 4 instances in total and you're able to see 2 in one PG and other 2 in other PG it means that **they are part of the ** +**same application** + +Another situation could be that checking on the metadata, then you see that are **two different application** and Dynatrace is just naming +the process group in the same way + +*Same application* +- Problem: Dynatrace is creating two different process groups, what transalates in two separated services for the same application. Instead of +seeing all the traffic in one service, you will have it splitted and it will complicate your monitoring +- Solution: create a process group detection rule. Contact Dynatrace Expert + +*Different application* +- Problem: Dynatrace is just naming in the same way applications that are different. +- Solution: This case is less severe, since it can be fixed with a process group naming rule. + + +What about our example? +!(PGNaming2)[../../../../img/PGNaming2.PNG] +!(PGNaming3)[../../../../img/PGNaming3.PNG] + +Based on the feedback of the infotaiment team, each process group is a different application (microservice) and it's visible in the kubernetes container/workload +within the metadata of each Process Group. + +#### How to create a Process Group Detection Rule +1. Open the *conditional-naming-processgroup.yaml* file and create a rule that looks like this: +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName} +- tag: Infotainment +- skipDeployment: false +``` +The result of the rule will be renaming the PG to this: +``` +bon-information-prod ipa +bon-information-prod rsl +``` + +Other possible placeholders that you can use are for example: +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName/[^\\-]*$} +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesFullPodName/buffet-(.*?)-} +{ProcessGroup:DetectedName} - {HostGroup:Name/[^\\_]*$} +{ProcessGroup:KubernetesNamespace} +{ProcessGroup:CommandLineArgs/.*?\\-f\\s\\/www\\/(.*?)\\/generated\\/httpd\\.conf.*?} + +You can combine different ones. Check the (documentation)[link] for more \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_lsc-mm/conditional-naming-processgroup/conditional-naming-processgroup.yaml b/BMW-Dynatrace-config/CD_lsc-mm/conditional-naming-processgroup/conditional-naming-processgroup.yaml new file mode 100644 index 00000000..48f51136 --- /dev/null +++ b/BMW-Dynatrace-config/CD_lsc-mm/conditional-naming-processgroup/conditional-naming-processgroup.yaml @@ -0,0 +1,8 @@ +config: +- CDlsc-mm: template.json + +CDlsc-mm: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: lsc-mm +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_lsc-mm/conditional-naming-processgroup/template.json b/BMW-Dynatrace-config/CD_lsc-mm/conditional-naming-processgroup/template.json new file mode 100644 index 00000000..7c039808 --- /dev/null +++ b/BMW-Dynatrace-config/CD_lsc-mm/conditional-naming-processgroup/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "type": "PROCESS_GROUP" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_lsc-mm/conditional-naming-service/README.md b/BMW-Dynatrace-config/CD_lsc-mm/conditional-naming-service/README.md new file mode 100644 index 00000000..c34ef308 --- /dev/null +++ b/BMW-Dynatrace-config/CD_lsc-mm/conditional-naming-service/README.md @@ -0,0 +1,35 @@ +### Service Naming Rules + +A typical case could be that you access to *Transaction & Services* and you find two services that are exactly the same: +*DataDownloadV1* +*DataDownloadV1* + +If you drilldown into the service and you check in the process group, you may have a PROD and a E2E for each service. + +*Note: if you see that both process group are exactly the same, please contact a Dynatrace expert to create a Process* +*Group detection rule* + +In the case the PG are PROD and E2E, then we need to create a rule that looks like this: + +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {Service:DetectedName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +- tag: Infotainment +- skipDeployment: false +``` + +The rule will get the Service Detected Name (current name) and it will extract (with a regex) the part of the kubernetes namespace after the "-", so -prod or -e2e, resulting in: +*DataDownloadV1 - prod* +*DataDownloadV1 - e2e* + +Now, services will be easy to identify. + +You can create rules based on any property/metadata. Some other placeholder's eamples: +{Service:DatabaseName} - E2E +{Service:WebServiceName} - {ProcessGroup:Kubernetes:microservice} - {ProcessGroup:Kubernetes:environment} +{Service:DetectedName} - {ProcessGroup:KubernetesContainerName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +{Service:DetectedName} - {ProcessGroup:SpringBootProfileName/[^\\-]*$} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_lsc-mm/conditional-naming-service/conditional-naming-service.yaml b/BMW-Dynatrace-config/CD_lsc-mm/conditional-naming-service/conditional-naming-service.yaml new file mode 100644 index 00000000..48f51136 --- /dev/null +++ b/BMW-Dynatrace-config/CD_lsc-mm/conditional-naming-service/conditional-naming-service.yaml @@ -0,0 +1,8 @@ +config: +- CDlsc-mm: template.json + +CDlsc-mm: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: lsc-mm +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_lsc-mm/conditional-naming-service/template.json b/BMW-Dynatrace-config/CD_lsc-mm/conditional-naming-service/template.json new file mode 100644 index 00000000..5d4fac56 --- /dev/null +++ b/BMW-Dynatrace-config/CD_lsc-mm/conditional-naming-service/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "type": "SERVICE" +} \ 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 index d41c4c77..5f35e5c1 100644 --- a/BMW-Dynatrace-config/CD_lsc-mm/custom-service-java/README.md +++ b/BMW-Dynatrace-config/CD_lsc-mm/custom-service-java/README.md @@ -1,30 +1,4 @@ -## 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 configure custom services? -## 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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Custom+Services) page to configure your custom services. \ 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 index 92e734fa..1695924c 100644 --- a/BMW-Dynatrace-config/CD_lsc-mm/synthetic-monitor/README.md +++ b/BMW-Dynatrace-config/CD_lsc-mm/synthetic-monitor/README.md @@ -1,37 +1,4 @@ -# Synthetic Configuration -To calculate the Availability KPI, a synthetic must be configured. +### How to configure synthetics? -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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Synthetic+Monitors) page to configure your synthetics. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_lsc-oc/conditional-naming-processgroup/README.md b/BMW-Dynatrace-config/CD_lsc-oc/conditional-naming-processgroup/README.md new file mode 100644 index 00000000..f94196a5 --- /dev/null +++ b/BMW-Dynatrace-config/CD_lsc-oc/conditional-naming-processgroup/README.md @@ -0,0 +1,67 @@ +### Process Group Detection Rules and Naming + +#### Detection Rule or Naming? + +For the explanation, we're using a real example of the Infotainment application: + +!(PGNaming1)[../../../../img/PGNaming1.PNG] + +Before working with your dashboards and alerting profiles, an important task to do when working with Dynatrace is checking +the structure of your applications (process groups). You can do that clicking under *technologies* and filter using your +application Management Zone. + +In the picture above, there are two Process Groups called bon-information-prod. **If you see duplicated process groups like in** +**this case, you MUST follow this guideline** + +Next step would be to open both process groups and compare the metadata. In that way, you can identify if all process instances are +part of the same application or not. An easy way to do that is asking yourself: how many instances of my application do i have? + +If you have 4 instances in total and you're able to see 2 in one PG and other 2 in other PG it means that **they are part of the ** +**same application** + +Another situation could be that checking on the metadata, then you see that are **two different application** and Dynatrace is just naming +the process group in the same way + +*Same application* +- Problem: Dynatrace is creating two different process groups, what transalates in two separated services for the same application. Instead of +seeing all the traffic in one service, you will have it splitted and it will complicate your monitoring +- Solution: create a process group detection rule. Contact Dynatrace Expert + +*Different application* +- Problem: Dynatrace is just naming in the same way applications that are different. +- Solution: This case is less severe, since it can be fixed with a process group naming rule. + + +What about our example? +!(PGNaming2)[../../../../img/PGNaming2.PNG] +!(PGNaming3)[../../../../img/PGNaming3.PNG] + +Based on the feedback of the infotaiment team, each process group is a different application (microservice) and it's visible in the kubernetes container/workload +within the metadata of each Process Group. + +#### How to create a Process Group Detection Rule +1. Open the *conditional-naming-processgroup.yaml* file and create a rule that looks like this: +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName} +- tag: Infotainment +- skipDeployment: false +``` +The result of the rule will be renaming the PG to this: +``` +bon-information-prod ipa +bon-information-prod rsl +``` + +Other possible placeholders that you can use are for example: +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName/[^\\-]*$} +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesFullPodName/buffet-(.*?)-} +{ProcessGroup:DetectedName} - {HostGroup:Name/[^\\_]*$} +{ProcessGroup:KubernetesNamespace} +{ProcessGroup:CommandLineArgs/.*?\\-f\\s\\/www\\/(.*?)\\/generated\\/httpd\\.conf.*?} + +You can combine different ones. Check the (documentation)[link] for more \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_lsc-oc/conditional-naming-processgroup/conditional-naming-processgroup.yaml b/BMW-Dynatrace-config/CD_lsc-oc/conditional-naming-processgroup/conditional-naming-processgroup.yaml new file mode 100644 index 00000000..c3595bf2 --- /dev/null +++ b/BMW-Dynatrace-config/CD_lsc-oc/conditional-naming-processgroup/conditional-naming-processgroup.yaml @@ -0,0 +1,8 @@ +config: +- CDlsc-oc: template.json + +CDlsc-oc: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: lsc-oc +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_lsc-oc/conditional-naming-processgroup/template.json b/BMW-Dynatrace-config/CD_lsc-oc/conditional-naming-processgroup/template.json new file mode 100644 index 00000000..7c039808 --- /dev/null +++ b/BMW-Dynatrace-config/CD_lsc-oc/conditional-naming-processgroup/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "type": "PROCESS_GROUP" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_lsc-oc/conditional-naming-service/README.md b/BMW-Dynatrace-config/CD_lsc-oc/conditional-naming-service/README.md new file mode 100644 index 00000000..c34ef308 --- /dev/null +++ b/BMW-Dynatrace-config/CD_lsc-oc/conditional-naming-service/README.md @@ -0,0 +1,35 @@ +### Service Naming Rules + +A typical case could be that you access to *Transaction & Services* and you find two services that are exactly the same: +*DataDownloadV1* +*DataDownloadV1* + +If you drilldown into the service and you check in the process group, you may have a PROD and a E2E for each service. + +*Note: if you see that both process group are exactly the same, please contact a Dynatrace expert to create a Process* +*Group detection rule* + +In the case the PG are PROD and E2E, then we need to create a rule that looks like this: + +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {Service:DetectedName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +- tag: Infotainment +- skipDeployment: false +``` + +The rule will get the Service Detected Name (current name) and it will extract (with a regex) the part of the kubernetes namespace after the "-", so -prod or -e2e, resulting in: +*DataDownloadV1 - prod* +*DataDownloadV1 - e2e* + +Now, services will be easy to identify. + +You can create rules based on any property/metadata. Some other placeholder's eamples: +{Service:DatabaseName} - E2E +{Service:WebServiceName} - {ProcessGroup:Kubernetes:microservice} - {ProcessGroup:Kubernetes:environment} +{Service:DetectedName} - {ProcessGroup:KubernetesContainerName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +{Service:DetectedName} - {ProcessGroup:SpringBootProfileName/[^\\-]*$} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_lsc-oc/conditional-naming-service/conditional-naming-service.yaml b/BMW-Dynatrace-config/CD_lsc-oc/conditional-naming-service/conditional-naming-service.yaml new file mode 100644 index 00000000..c3595bf2 --- /dev/null +++ b/BMW-Dynatrace-config/CD_lsc-oc/conditional-naming-service/conditional-naming-service.yaml @@ -0,0 +1,8 @@ +config: +- CDlsc-oc: template.json + +CDlsc-oc: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: lsc-oc +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_lsc-oc/conditional-naming-service/template.json b/BMW-Dynatrace-config/CD_lsc-oc/conditional-naming-service/template.json new file mode 100644 index 00000000..5d4fac56 --- /dev/null +++ b/BMW-Dynatrace-config/CD_lsc-oc/conditional-naming-service/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "type": "SERVICE" +} \ 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 index d41c4c77..5f35e5c1 100644 --- a/BMW-Dynatrace-config/CD_lsc-oc/custom-service-java/README.md +++ b/BMW-Dynatrace-config/CD_lsc-oc/custom-service-java/README.md @@ -1,30 +1,4 @@ -## 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 configure custom services? -## 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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Custom+Services) page to configure your custom services. \ 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 index 92e734fa..1695924c 100644 --- a/BMW-Dynatrace-config/CD_lsc-oc/synthetic-monitor/README.md +++ b/BMW-Dynatrace-config/CD_lsc-oc/synthetic-monitor/README.md @@ -1,37 +1,4 @@ -# Synthetic Configuration -To calculate the Availability KPI, a synthetic must be configured. +### How to configure synthetics? -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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Synthetic+Monitors) page to configure your synthetics. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_lsc-og/conditional-naming-processgroup/README.md b/BMW-Dynatrace-config/CD_lsc-og/conditional-naming-processgroup/README.md new file mode 100644 index 00000000..f94196a5 --- /dev/null +++ b/BMW-Dynatrace-config/CD_lsc-og/conditional-naming-processgroup/README.md @@ -0,0 +1,67 @@ +### Process Group Detection Rules and Naming + +#### Detection Rule or Naming? + +For the explanation, we're using a real example of the Infotainment application: + +!(PGNaming1)[../../../../img/PGNaming1.PNG] + +Before working with your dashboards and alerting profiles, an important task to do when working with Dynatrace is checking +the structure of your applications (process groups). You can do that clicking under *technologies* and filter using your +application Management Zone. + +In the picture above, there are two Process Groups called bon-information-prod. **If you see duplicated process groups like in** +**this case, you MUST follow this guideline** + +Next step would be to open both process groups and compare the metadata. In that way, you can identify if all process instances are +part of the same application or not. An easy way to do that is asking yourself: how many instances of my application do i have? + +If you have 4 instances in total and you're able to see 2 in one PG and other 2 in other PG it means that **they are part of the ** +**same application** + +Another situation could be that checking on the metadata, then you see that are **two different application** and Dynatrace is just naming +the process group in the same way + +*Same application* +- Problem: Dynatrace is creating two different process groups, what transalates in two separated services for the same application. Instead of +seeing all the traffic in one service, you will have it splitted and it will complicate your monitoring +- Solution: create a process group detection rule. Contact Dynatrace Expert + +*Different application* +- Problem: Dynatrace is just naming in the same way applications that are different. +- Solution: This case is less severe, since it can be fixed with a process group naming rule. + + +What about our example? +!(PGNaming2)[../../../../img/PGNaming2.PNG] +!(PGNaming3)[../../../../img/PGNaming3.PNG] + +Based on the feedback of the infotaiment team, each process group is a different application (microservice) and it's visible in the kubernetes container/workload +within the metadata of each Process Group. + +#### How to create a Process Group Detection Rule +1. Open the *conditional-naming-processgroup.yaml* file and create a rule that looks like this: +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName} +- tag: Infotainment +- skipDeployment: false +``` +The result of the rule will be renaming the PG to this: +``` +bon-information-prod ipa +bon-information-prod rsl +``` + +Other possible placeholders that you can use are for example: +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName/[^\\-]*$} +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesFullPodName/buffet-(.*?)-} +{ProcessGroup:DetectedName} - {HostGroup:Name/[^\\_]*$} +{ProcessGroup:KubernetesNamespace} +{ProcessGroup:CommandLineArgs/.*?\\-f\\s\\/www\\/(.*?)\\/generated\\/httpd\\.conf.*?} + +You can combine different ones. Check the (documentation)[link] for more \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_lsc-og/conditional-naming-processgroup/conditional-naming-processgroup.yaml b/BMW-Dynatrace-config/CD_lsc-og/conditional-naming-processgroup/conditional-naming-processgroup.yaml new file mode 100644 index 00000000..04ac9831 --- /dev/null +++ b/BMW-Dynatrace-config/CD_lsc-og/conditional-naming-processgroup/conditional-naming-processgroup.yaml @@ -0,0 +1,8 @@ +config: +- CDlsc-og: template.json + +CDlsc-og: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: lsc-og +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_lsc-og/conditional-naming-processgroup/template.json b/BMW-Dynatrace-config/CD_lsc-og/conditional-naming-processgroup/template.json new file mode 100644 index 00000000..7c039808 --- /dev/null +++ b/BMW-Dynatrace-config/CD_lsc-og/conditional-naming-processgroup/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "type": "PROCESS_GROUP" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_lsc-og/conditional-naming-service/README.md b/BMW-Dynatrace-config/CD_lsc-og/conditional-naming-service/README.md new file mode 100644 index 00000000..c34ef308 --- /dev/null +++ b/BMW-Dynatrace-config/CD_lsc-og/conditional-naming-service/README.md @@ -0,0 +1,35 @@ +### Service Naming Rules + +A typical case could be that you access to *Transaction & Services* and you find two services that are exactly the same: +*DataDownloadV1* +*DataDownloadV1* + +If you drilldown into the service and you check in the process group, you may have a PROD and a E2E for each service. + +*Note: if you see that both process group are exactly the same, please contact a Dynatrace expert to create a Process* +*Group detection rule* + +In the case the PG are PROD and E2E, then we need to create a rule that looks like this: + +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {Service:DetectedName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +- tag: Infotainment +- skipDeployment: false +``` + +The rule will get the Service Detected Name (current name) and it will extract (with a regex) the part of the kubernetes namespace after the "-", so -prod or -e2e, resulting in: +*DataDownloadV1 - prod* +*DataDownloadV1 - e2e* + +Now, services will be easy to identify. + +You can create rules based on any property/metadata. Some other placeholder's eamples: +{Service:DatabaseName} - E2E +{Service:WebServiceName} - {ProcessGroup:Kubernetes:microservice} - {ProcessGroup:Kubernetes:environment} +{Service:DetectedName} - {ProcessGroup:KubernetesContainerName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +{Service:DetectedName} - {ProcessGroup:SpringBootProfileName/[^\\-]*$} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_lsc-og/conditional-naming-service/conditional-naming-service.yaml b/BMW-Dynatrace-config/CD_lsc-og/conditional-naming-service/conditional-naming-service.yaml new file mode 100644 index 00000000..04ac9831 --- /dev/null +++ b/BMW-Dynatrace-config/CD_lsc-og/conditional-naming-service/conditional-naming-service.yaml @@ -0,0 +1,8 @@ +config: +- CDlsc-og: template.json + +CDlsc-og: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: lsc-og +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_lsc-og/conditional-naming-service/template.json b/BMW-Dynatrace-config/CD_lsc-og/conditional-naming-service/template.json new file mode 100644 index 00000000..5d4fac56 --- /dev/null +++ b/BMW-Dynatrace-config/CD_lsc-og/conditional-naming-service/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "type": "SERVICE" +} \ 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 index d41c4c77..5f35e5c1 100644 --- a/BMW-Dynatrace-config/CD_lsc-og/custom-service-java/README.md +++ b/BMW-Dynatrace-config/CD_lsc-og/custom-service-java/README.md @@ -1,30 +1,4 @@ -## 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 configure custom services? -## 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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Custom+Services) page to configure your custom services. \ 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 index 92e734fa..1695924c 100644 --- a/BMW-Dynatrace-config/CD_lsc-og/synthetic-monitor/README.md +++ b/BMW-Dynatrace-config/CD_lsc-og/synthetic-monitor/README.md @@ -1,37 +1,4 @@ -# Synthetic Configuration -To calculate the Availability KPI, a synthetic must be configured. +### How to configure synthetics? -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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Synthetic+Monitors) page to configure your synthetics. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_mds/conditional-naming-processgroup/README.md b/BMW-Dynatrace-config/CD_mds/conditional-naming-processgroup/README.md new file mode 100644 index 00000000..f94196a5 --- /dev/null +++ b/BMW-Dynatrace-config/CD_mds/conditional-naming-processgroup/README.md @@ -0,0 +1,67 @@ +### Process Group Detection Rules and Naming + +#### Detection Rule or Naming? + +For the explanation, we're using a real example of the Infotainment application: + +!(PGNaming1)[../../../../img/PGNaming1.PNG] + +Before working with your dashboards and alerting profiles, an important task to do when working with Dynatrace is checking +the structure of your applications (process groups). You can do that clicking under *technologies* and filter using your +application Management Zone. + +In the picture above, there are two Process Groups called bon-information-prod. **If you see duplicated process groups like in** +**this case, you MUST follow this guideline** + +Next step would be to open both process groups and compare the metadata. In that way, you can identify if all process instances are +part of the same application or not. An easy way to do that is asking yourself: how many instances of my application do i have? + +If you have 4 instances in total and you're able to see 2 in one PG and other 2 in other PG it means that **they are part of the ** +**same application** + +Another situation could be that checking on the metadata, then you see that are **two different application** and Dynatrace is just naming +the process group in the same way + +*Same application* +- Problem: Dynatrace is creating two different process groups, what transalates in two separated services for the same application. Instead of +seeing all the traffic in one service, you will have it splitted and it will complicate your monitoring +- Solution: create a process group detection rule. Contact Dynatrace Expert + +*Different application* +- Problem: Dynatrace is just naming in the same way applications that are different. +- Solution: This case is less severe, since it can be fixed with a process group naming rule. + + +What about our example? +!(PGNaming2)[../../../../img/PGNaming2.PNG] +!(PGNaming3)[../../../../img/PGNaming3.PNG] + +Based on the feedback of the infotaiment team, each process group is a different application (microservice) and it's visible in the kubernetes container/workload +within the metadata of each Process Group. + +#### How to create a Process Group Detection Rule +1. Open the *conditional-naming-processgroup.yaml* file and create a rule that looks like this: +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName} +- tag: Infotainment +- skipDeployment: false +``` +The result of the rule will be renaming the PG to this: +``` +bon-information-prod ipa +bon-information-prod rsl +``` + +Other possible placeholders that you can use are for example: +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName/[^\\-]*$} +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesFullPodName/buffet-(.*?)-} +{ProcessGroup:DetectedName} - {HostGroup:Name/[^\\_]*$} +{ProcessGroup:KubernetesNamespace} +{ProcessGroup:CommandLineArgs/.*?\\-f\\s\\/www\\/(.*?)\\/generated\\/httpd\\.conf.*?} + +You can combine different ones. Check the (documentation)[link] for more \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_mds/conditional-naming-processgroup/conditional-naming-processgroup.yaml b/BMW-Dynatrace-config/CD_mds/conditional-naming-processgroup/conditional-naming-processgroup.yaml new file mode 100644 index 00000000..750dbdb5 --- /dev/null +++ b/BMW-Dynatrace-config/CD_mds/conditional-naming-processgroup/conditional-naming-processgroup.yaml @@ -0,0 +1,8 @@ +config: +- CDmds: template.json + +CDmds: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: mds +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_mds/conditional-naming-processgroup/template.json b/BMW-Dynatrace-config/CD_mds/conditional-naming-processgroup/template.json new file mode 100644 index 00000000..7c039808 --- /dev/null +++ b/BMW-Dynatrace-config/CD_mds/conditional-naming-processgroup/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "type": "PROCESS_GROUP" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_mds/conditional-naming-service/README.md b/BMW-Dynatrace-config/CD_mds/conditional-naming-service/README.md new file mode 100644 index 00000000..c34ef308 --- /dev/null +++ b/BMW-Dynatrace-config/CD_mds/conditional-naming-service/README.md @@ -0,0 +1,35 @@ +### Service Naming Rules + +A typical case could be that you access to *Transaction & Services* and you find two services that are exactly the same: +*DataDownloadV1* +*DataDownloadV1* + +If you drilldown into the service and you check in the process group, you may have a PROD and a E2E for each service. + +*Note: if you see that both process group are exactly the same, please contact a Dynatrace expert to create a Process* +*Group detection rule* + +In the case the PG are PROD and E2E, then we need to create a rule that looks like this: + +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {Service:DetectedName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +- tag: Infotainment +- skipDeployment: false +``` + +The rule will get the Service Detected Name (current name) and it will extract (with a regex) the part of the kubernetes namespace after the "-", so -prod or -e2e, resulting in: +*DataDownloadV1 - prod* +*DataDownloadV1 - e2e* + +Now, services will be easy to identify. + +You can create rules based on any property/metadata. Some other placeholder's eamples: +{Service:DatabaseName} - E2E +{Service:WebServiceName} - {ProcessGroup:Kubernetes:microservice} - {ProcessGroup:Kubernetes:environment} +{Service:DetectedName} - {ProcessGroup:KubernetesContainerName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +{Service:DetectedName} - {ProcessGroup:SpringBootProfileName/[^\\-]*$} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_mds/conditional-naming-service/conditional-naming-service.yaml b/BMW-Dynatrace-config/CD_mds/conditional-naming-service/conditional-naming-service.yaml new file mode 100644 index 00000000..750dbdb5 --- /dev/null +++ b/BMW-Dynatrace-config/CD_mds/conditional-naming-service/conditional-naming-service.yaml @@ -0,0 +1,8 @@ +config: +- CDmds: template.json + +CDmds: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: mds +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_mds/conditional-naming-service/template.json b/BMW-Dynatrace-config/CD_mds/conditional-naming-service/template.json new file mode 100644 index 00000000..5d4fac56 --- /dev/null +++ b/BMW-Dynatrace-config/CD_mds/conditional-naming-service/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "type": "SERVICE" +} \ 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 index d41c4c77..5f35e5c1 100644 --- a/BMW-Dynatrace-config/CD_mds/custom-service-java/README.md +++ b/BMW-Dynatrace-config/CD_mds/custom-service-java/README.md @@ -1,30 +1,4 @@ -## 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 configure custom services? -## 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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Custom+Services) page to configure your custom services. \ 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 index 92e734fa..1695924c 100644 --- a/BMW-Dynatrace-config/CD_mds/synthetic-monitor/README.md +++ b/BMW-Dynatrace-config/CD_mds/synthetic-monitor/README.md @@ -1,37 +1,4 @@ -# Synthetic Configuration -To calculate the Availability KPI, a synthetic must be configured. +### How to configure synthetics? -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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Synthetic+Monitors) page to configure your synthetics. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ml-ingestion-service/conditional-naming-processgroup/README.md b/BMW-Dynatrace-config/CD_ml-ingestion-service/conditional-naming-processgroup/README.md new file mode 100644 index 00000000..f94196a5 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ml-ingestion-service/conditional-naming-processgroup/README.md @@ -0,0 +1,67 @@ +### Process Group Detection Rules and Naming + +#### Detection Rule or Naming? + +For the explanation, we're using a real example of the Infotainment application: + +!(PGNaming1)[../../../../img/PGNaming1.PNG] + +Before working with your dashboards and alerting profiles, an important task to do when working with Dynatrace is checking +the structure of your applications (process groups). You can do that clicking under *technologies* and filter using your +application Management Zone. + +In the picture above, there are two Process Groups called bon-information-prod. **If you see duplicated process groups like in** +**this case, you MUST follow this guideline** + +Next step would be to open both process groups and compare the metadata. In that way, you can identify if all process instances are +part of the same application or not. An easy way to do that is asking yourself: how many instances of my application do i have? + +If you have 4 instances in total and you're able to see 2 in one PG and other 2 in other PG it means that **they are part of the ** +**same application** + +Another situation could be that checking on the metadata, then you see that are **two different application** and Dynatrace is just naming +the process group in the same way + +*Same application* +- Problem: Dynatrace is creating two different process groups, what transalates in two separated services for the same application. Instead of +seeing all the traffic in one service, you will have it splitted and it will complicate your monitoring +- Solution: create a process group detection rule. Contact Dynatrace Expert + +*Different application* +- Problem: Dynatrace is just naming in the same way applications that are different. +- Solution: This case is less severe, since it can be fixed with a process group naming rule. + + +What about our example? +!(PGNaming2)[../../../../img/PGNaming2.PNG] +!(PGNaming3)[../../../../img/PGNaming3.PNG] + +Based on the feedback of the infotaiment team, each process group is a different application (microservice) and it's visible in the kubernetes container/workload +within the metadata of each Process Group. + +#### How to create a Process Group Detection Rule +1. Open the *conditional-naming-processgroup.yaml* file and create a rule that looks like this: +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName} +- tag: Infotainment +- skipDeployment: false +``` +The result of the rule will be renaming the PG to this: +``` +bon-information-prod ipa +bon-information-prod rsl +``` + +Other possible placeholders that you can use are for example: +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName/[^\\-]*$} +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesFullPodName/buffet-(.*?)-} +{ProcessGroup:DetectedName} - {HostGroup:Name/[^\\_]*$} +{ProcessGroup:KubernetesNamespace} +{ProcessGroup:CommandLineArgs/.*?\\-f\\s\\/www\\/(.*?)\\/generated\\/httpd\\.conf.*?} + +You can combine different ones. Check the (documentation)[link] for more \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ml-ingestion-service/conditional-naming-processgroup/conditional-naming-processgroup.yaml b/BMW-Dynatrace-config/CD_ml-ingestion-service/conditional-naming-processgroup/conditional-naming-processgroup.yaml new file mode 100644 index 00000000..5de351db --- /dev/null +++ b/BMW-Dynatrace-config/CD_ml-ingestion-service/conditional-naming-processgroup/conditional-naming-processgroup.yaml @@ -0,0 +1,8 @@ +config: +- CDml-ingestion-service: template.json + +CDml-ingestion-service: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: ml-ingestion-service +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_ml-ingestion-service/conditional-naming-processgroup/template.json b/BMW-Dynatrace-config/CD_ml-ingestion-service/conditional-naming-processgroup/template.json new file mode 100644 index 00000000..7c039808 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ml-ingestion-service/conditional-naming-processgroup/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "type": "PROCESS_GROUP" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ml-ingestion-service/conditional-naming-service/README.md b/BMW-Dynatrace-config/CD_ml-ingestion-service/conditional-naming-service/README.md new file mode 100644 index 00000000..c34ef308 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ml-ingestion-service/conditional-naming-service/README.md @@ -0,0 +1,35 @@ +### Service Naming Rules + +A typical case could be that you access to *Transaction & Services* and you find two services that are exactly the same: +*DataDownloadV1* +*DataDownloadV1* + +If you drilldown into the service and you check in the process group, you may have a PROD and a E2E for each service. + +*Note: if you see that both process group are exactly the same, please contact a Dynatrace expert to create a Process* +*Group detection rule* + +In the case the PG are PROD and E2E, then we need to create a rule that looks like this: + +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {Service:DetectedName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +- tag: Infotainment +- skipDeployment: false +``` + +The rule will get the Service Detected Name (current name) and it will extract (with a regex) the part of the kubernetes namespace after the "-", so -prod or -e2e, resulting in: +*DataDownloadV1 - prod* +*DataDownloadV1 - e2e* + +Now, services will be easy to identify. + +You can create rules based on any property/metadata. Some other placeholder's eamples: +{Service:DatabaseName} - E2E +{Service:WebServiceName} - {ProcessGroup:Kubernetes:microservice} - {ProcessGroup:Kubernetes:environment} +{Service:DetectedName} - {ProcessGroup:KubernetesContainerName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +{Service:DetectedName} - {ProcessGroup:SpringBootProfileName/[^\\-]*$} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ml-ingestion-service/conditional-naming-service/conditional-naming-service.yaml b/BMW-Dynatrace-config/CD_ml-ingestion-service/conditional-naming-service/conditional-naming-service.yaml new file mode 100644 index 00000000..5de351db --- /dev/null +++ b/BMW-Dynatrace-config/CD_ml-ingestion-service/conditional-naming-service/conditional-naming-service.yaml @@ -0,0 +1,8 @@ +config: +- CDml-ingestion-service: template.json + +CDml-ingestion-service: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: ml-ingestion-service +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_ml-ingestion-service/conditional-naming-service/template.json b/BMW-Dynatrace-config/CD_ml-ingestion-service/conditional-naming-service/template.json new file mode 100644 index 00000000..5d4fac56 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ml-ingestion-service/conditional-naming-service/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "type": "SERVICE" +} \ 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 index d41c4c77..5f35e5c1 100644 --- 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 @@ -1,30 +1,4 @@ -## 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 configure custom services? -## 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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Custom+Services) page to configure your custom services. \ 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 index 92e734fa..1695924c 100644 --- a/BMW-Dynatrace-config/CD_ml-ingestion-service/synthetic-monitor/README.md +++ b/BMW-Dynatrace-config/CD_ml-ingestion-service/synthetic-monitor/README.md @@ -1,37 +1,4 @@ -# Synthetic Configuration -To calculate the Availability KPI, a synthetic must be configured. +### How to configure synthetics? -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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Synthetic+Monitors) page to configure your synthetics. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_mlc/conditional-naming-processgroup/README.md b/BMW-Dynatrace-config/CD_mlc/conditional-naming-processgroup/README.md new file mode 100644 index 00000000..f94196a5 --- /dev/null +++ b/BMW-Dynatrace-config/CD_mlc/conditional-naming-processgroup/README.md @@ -0,0 +1,67 @@ +### Process Group Detection Rules and Naming + +#### Detection Rule or Naming? + +For the explanation, we're using a real example of the Infotainment application: + +!(PGNaming1)[../../../../img/PGNaming1.PNG] + +Before working with your dashboards and alerting profiles, an important task to do when working with Dynatrace is checking +the structure of your applications (process groups). You can do that clicking under *technologies* and filter using your +application Management Zone. + +In the picture above, there are two Process Groups called bon-information-prod. **If you see duplicated process groups like in** +**this case, you MUST follow this guideline** + +Next step would be to open both process groups and compare the metadata. In that way, you can identify if all process instances are +part of the same application or not. An easy way to do that is asking yourself: how many instances of my application do i have? + +If you have 4 instances in total and you're able to see 2 in one PG and other 2 in other PG it means that **they are part of the ** +**same application** + +Another situation could be that checking on the metadata, then you see that are **two different application** and Dynatrace is just naming +the process group in the same way + +*Same application* +- Problem: Dynatrace is creating two different process groups, what transalates in two separated services for the same application. Instead of +seeing all the traffic in one service, you will have it splitted and it will complicate your monitoring +- Solution: create a process group detection rule. Contact Dynatrace Expert + +*Different application* +- Problem: Dynatrace is just naming in the same way applications that are different. +- Solution: This case is less severe, since it can be fixed with a process group naming rule. + + +What about our example? +!(PGNaming2)[../../../../img/PGNaming2.PNG] +!(PGNaming3)[../../../../img/PGNaming3.PNG] + +Based on the feedback of the infotaiment team, each process group is a different application (microservice) and it's visible in the kubernetes container/workload +within the metadata of each Process Group. + +#### How to create a Process Group Detection Rule +1. Open the *conditional-naming-processgroup.yaml* file and create a rule that looks like this: +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName} +- tag: Infotainment +- skipDeployment: false +``` +The result of the rule will be renaming the PG to this: +``` +bon-information-prod ipa +bon-information-prod rsl +``` + +Other possible placeholders that you can use are for example: +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName/[^\\-]*$} +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesFullPodName/buffet-(.*?)-} +{ProcessGroup:DetectedName} - {HostGroup:Name/[^\\_]*$} +{ProcessGroup:KubernetesNamespace} +{ProcessGroup:CommandLineArgs/.*?\\-f\\s\\/www\\/(.*?)\\/generated\\/httpd\\.conf.*?} + +You can combine different ones. Check the (documentation)[link] for more \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_mlc/conditional-naming-processgroup/conditional-naming-processgroup.yaml b/BMW-Dynatrace-config/CD_mlc/conditional-naming-processgroup/conditional-naming-processgroup.yaml new file mode 100644 index 00000000..9c1908e7 --- /dev/null +++ b/BMW-Dynatrace-config/CD_mlc/conditional-naming-processgroup/conditional-naming-processgroup.yaml @@ -0,0 +1,8 @@ +config: +- CDmlc: template.json + +CDmlc: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: mlc +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_mlc/conditional-naming-processgroup/template.json b/BMW-Dynatrace-config/CD_mlc/conditional-naming-processgroup/template.json new file mode 100644 index 00000000..7c039808 --- /dev/null +++ b/BMW-Dynatrace-config/CD_mlc/conditional-naming-processgroup/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "type": "PROCESS_GROUP" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_mlc/conditional-naming-service/README.md b/BMW-Dynatrace-config/CD_mlc/conditional-naming-service/README.md new file mode 100644 index 00000000..c34ef308 --- /dev/null +++ b/BMW-Dynatrace-config/CD_mlc/conditional-naming-service/README.md @@ -0,0 +1,35 @@ +### Service Naming Rules + +A typical case could be that you access to *Transaction & Services* and you find two services that are exactly the same: +*DataDownloadV1* +*DataDownloadV1* + +If you drilldown into the service and you check in the process group, you may have a PROD and a E2E for each service. + +*Note: if you see that both process group are exactly the same, please contact a Dynatrace expert to create a Process* +*Group detection rule* + +In the case the PG are PROD and E2E, then we need to create a rule that looks like this: + +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {Service:DetectedName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +- tag: Infotainment +- skipDeployment: false +``` + +The rule will get the Service Detected Name (current name) and it will extract (with a regex) the part of the kubernetes namespace after the "-", so -prod or -e2e, resulting in: +*DataDownloadV1 - prod* +*DataDownloadV1 - e2e* + +Now, services will be easy to identify. + +You can create rules based on any property/metadata. Some other placeholder's eamples: +{Service:DatabaseName} - E2E +{Service:WebServiceName} - {ProcessGroup:Kubernetes:microservice} - {ProcessGroup:Kubernetes:environment} +{Service:DetectedName} - {ProcessGroup:KubernetesContainerName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +{Service:DetectedName} - {ProcessGroup:SpringBootProfileName/[^\\-]*$} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_mlc/conditional-naming-service/conditional-naming-service.yaml b/BMW-Dynatrace-config/CD_mlc/conditional-naming-service/conditional-naming-service.yaml new file mode 100644 index 00000000..9c1908e7 --- /dev/null +++ b/BMW-Dynatrace-config/CD_mlc/conditional-naming-service/conditional-naming-service.yaml @@ -0,0 +1,8 @@ +config: +- CDmlc: template.json + +CDmlc: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: mlc +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_mlc/conditional-naming-service/template.json b/BMW-Dynatrace-config/CD_mlc/conditional-naming-service/template.json new file mode 100644 index 00000000..5d4fac56 --- /dev/null +++ b/BMW-Dynatrace-config/CD_mlc/conditional-naming-service/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "type": "SERVICE" +} \ 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 index d41c4c77..5f35e5c1 100644 --- a/BMW-Dynatrace-config/CD_mlc/custom-service-java/README.md +++ b/BMW-Dynatrace-config/CD_mlc/custom-service-java/README.md @@ -1,30 +1,4 @@ -## 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 configure custom services? -## 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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Custom+Services) page to configure your custom services. \ 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 index 92e734fa..1695924c 100644 --- a/BMW-Dynatrace-config/CD_mlc/synthetic-monitor/README.md +++ b/BMW-Dynatrace-config/CD_mlc/synthetic-monitor/README.md @@ -1,37 +1,4 @@ -# Synthetic Configuration -To calculate the Availability KPI, a synthetic must be configured. +### How to configure synthetics? -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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Synthetic+Monitors) page to configure your synthetics. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_mrp/conditional-naming-processgroup/README.md b/BMW-Dynatrace-config/CD_mrp/conditional-naming-processgroup/README.md new file mode 100644 index 00000000..f94196a5 --- /dev/null +++ b/BMW-Dynatrace-config/CD_mrp/conditional-naming-processgroup/README.md @@ -0,0 +1,67 @@ +### Process Group Detection Rules and Naming + +#### Detection Rule or Naming? + +For the explanation, we're using a real example of the Infotainment application: + +!(PGNaming1)[../../../../img/PGNaming1.PNG] + +Before working with your dashboards and alerting profiles, an important task to do when working with Dynatrace is checking +the structure of your applications (process groups). You can do that clicking under *technologies* and filter using your +application Management Zone. + +In the picture above, there are two Process Groups called bon-information-prod. **If you see duplicated process groups like in** +**this case, you MUST follow this guideline** + +Next step would be to open both process groups and compare the metadata. In that way, you can identify if all process instances are +part of the same application or not. An easy way to do that is asking yourself: how many instances of my application do i have? + +If you have 4 instances in total and you're able to see 2 in one PG and other 2 in other PG it means that **they are part of the ** +**same application** + +Another situation could be that checking on the metadata, then you see that are **two different application** and Dynatrace is just naming +the process group in the same way + +*Same application* +- Problem: Dynatrace is creating two different process groups, what transalates in two separated services for the same application. Instead of +seeing all the traffic in one service, you will have it splitted and it will complicate your monitoring +- Solution: create a process group detection rule. Contact Dynatrace Expert + +*Different application* +- Problem: Dynatrace is just naming in the same way applications that are different. +- Solution: This case is less severe, since it can be fixed with a process group naming rule. + + +What about our example? +!(PGNaming2)[../../../../img/PGNaming2.PNG] +!(PGNaming3)[../../../../img/PGNaming3.PNG] + +Based on the feedback of the infotaiment team, each process group is a different application (microservice) and it's visible in the kubernetes container/workload +within the metadata of each Process Group. + +#### How to create a Process Group Detection Rule +1. Open the *conditional-naming-processgroup.yaml* file and create a rule that looks like this: +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName} +- tag: Infotainment +- skipDeployment: false +``` +The result of the rule will be renaming the PG to this: +``` +bon-information-prod ipa +bon-information-prod rsl +``` + +Other possible placeholders that you can use are for example: +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName/[^\\-]*$} +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesFullPodName/buffet-(.*?)-} +{ProcessGroup:DetectedName} - {HostGroup:Name/[^\\_]*$} +{ProcessGroup:KubernetesNamespace} +{ProcessGroup:CommandLineArgs/.*?\\-f\\s\\/www\\/(.*?)\\/generated\\/httpd\\.conf.*?} + +You can combine different ones. Check the (documentation)[link] for more \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_mrp/conditional-naming-processgroup/conditional-naming-processgroup.yaml b/BMW-Dynatrace-config/CD_mrp/conditional-naming-processgroup/conditional-naming-processgroup.yaml new file mode 100644 index 00000000..0b3d9b1d --- /dev/null +++ b/BMW-Dynatrace-config/CD_mrp/conditional-naming-processgroup/conditional-naming-processgroup.yaml @@ -0,0 +1,8 @@ +config: +- CDmrp: template.json + +CDmrp: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: mrp +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_mrp/conditional-naming-processgroup/template.json b/BMW-Dynatrace-config/CD_mrp/conditional-naming-processgroup/template.json new file mode 100644 index 00000000..7c039808 --- /dev/null +++ b/BMW-Dynatrace-config/CD_mrp/conditional-naming-processgroup/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "type": "PROCESS_GROUP" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_mrp/conditional-naming-service/README.md b/BMW-Dynatrace-config/CD_mrp/conditional-naming-service/README.md new file mode 100644 index 00000000..c34ef308 --- /dev/null +++ b/BMW-Dynatrace-config/CD_mrp/conditional-naming-service/README.md @@ -0,0 +1,35 @@ +### Service Naming Rules + +A typical case could be that you access to *Transaction & Services* and you find two services that are exactly the same: +*DataDownloadV1* +*DataDownloadV1* + +If you drilldown into the service and you check in the process group, you may have a PROD and a E2E for each service. + +*Note: if you see that both process group are exactly the same, please contact a Dynatrace expert to create a Process* +*Group detection rule* + +In the case the PG are PROD and E2E, then we need to create a rule that looks like this: + +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {Service:DetectedName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +- tag: Infotainment +- skipDeployment: false +``` + +The rule will get the Service Detected Name (current name) and it will extract (with a regex) the part of the kubernetes namespace after the "-", so -prod or -e2e, resulting in: +*DataDownloadV1 - prod* +*DataDownloadV1 - e2e* + +Now, services will be easy to identify. + +You can create rules based on any property/metadata. Some other placeholder's eamples: +{Service:DatabaseName} - E2E +{Service:WebServiceName} - {ProcessGroup:Kubernetes:microservice} - {ProcessGroup:Kubernetes:environment} +{Service:DetectedName} - {ProcessGroup:KubernetesContainerName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +{Service:DetectedName} - {ProcessGroup:SpringBootProfileName/[^\\-]*$} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_mrp/conditional-naming-service/conditional-naming-service.yaml b/BMW-Dynatrace-config/CD_mrp/conditional-naming-service/conditional-naming-service.yaml new file mode 100644 index 00000000..0b3d9b1d --- /dev/null +++ b/BMW-Dynatrace-config/CD_mrp/conditional-naming-service/conditional-naming-service.yaml @@ -0,0 +1,8 @@ +config: +- CDmrp: template.json + +CDmrp: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: mrp +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_mrp/conditional-naming-service/template.json b/BMW-Dynatrace-config/CD_mrp/conditional-naming-service/template.json new file mode 100644 index 00000000..5d4fac56 --- /dev/null +++ b/BMW-Dynatrace-config/CD_mrp/conditional-naming-service/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "type": "SERVICE" +} \ 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 index d41c4c77..5f35e5c1 100644 --- a/BMW-Dynatrace-config/CD_mrp/custom-service-java/README.md +++ b/BMW-Dynatrace-config/CD_mrp/custom-service-java/README.md @@ -1,30 +1,4 @@ -## 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 configure custom services? -## 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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Custom+Services) page to configure your custom services. \ 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 index 92e734fa..1695924c 100644 --- a/BMW-Dynatrace-config/CD_mrp/synthetic-monitor/README.md +++ b/BMW-Dynatrace-config/CD_mrp/synthetic-monitor/README.md @@ -1,37 +1,4 @@ -# Synthetic Configuration -To calculate the Availability KPI, a synthetic must be configured. +### How to configure synthetics? -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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Synthetic+Monitors) page to configure your synthetics. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_mrpspringboot/conditional-naming-processgroup/README.md b/BMW-Dynatrace-config/CD_mrpspringboot/conditional-naming-processgroup/README.md new file mode 100644 index 00000000..f94196a5 --- /dev/null +++ b/BMW-Dynatrace-config/CD_mrpspringboot/conditional-naming-processgroup/README.md @@ -0,0 +1,67 @@ +### Process Group Detection Rules and Naming + +#### Detection Rule or Naming? + +For the explanation, we're using a real example of the Infotainment application: + +!(PGNaming1)[../../../../img/PGNaming1.PNG] + +Before working with your dashboards and alerting profiles, an important task to do when working with Dynatrace is checking +the structure of your applications (process groups). You can do that clicking under *technologies* and filter using your +application Management Zone. + +In the picture above, there are two Process Groups called bon-information-prod. **If you see duplicated process groups like in** +**this case, you MUST follow this guideline** + +Next step would be to open both process groups and compare the metadata. In that way, you can identify if all process instances are +part of the same application or not. An easy way to do that is asking yourself: how many instances of my application do i have? + +If you have 4 instances in total and you're able to see 2 in one PG and other 2 in other PG it means that **they are part of the ** +**same application** + +Another situation could be that checking on the metadata, then you see that are **two different application** and Dynatrace is just naming +the process group in the same way + +*Same application* +- Problem: Dynatrace is creating two different process groups, what transalates in two separated services for the same application. Instead of +seeing all the traffic in one service, you will have it splitted and it will complicate your monitoring +- Solution: create a process group detection rule. Contact Dynatrace Expert + +*Different application* +- Problem: Dynatrace is just naming in the same way applications that are different. +- Solution: This case is less severe, since it can be fixed with a process group naming rule. + + +What about our example? +!(PGNaming2)[../../../../img/PGNaming2.PNG] +!(PGNaming3)[../../../../img/PGNaming3.PNG] + +Based on the feedback of the infotaiment team, each process group is a different application (microservice) and it's visible in the kubernetes container/workload +within the metadata of each Process Group. + +#### How to create a Process Group Detection Rule +1. Open the *conditional-naming-processgroup.yaml* file and create a rule that looks like this: +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName} +- tag: Infotainment +- skipDeployment: false +``` +The result of the rule will be renaming the PG to this: +``` +bon-information-prod ipa +bon-information-prod rsl +``` + +Other possible placeholders that you can use are for example: +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName/[^\\-]*$} +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesFullPodName/buffet-(.*?)-} +{ProcessGroup:DetectedName} - {HostGroup:Name/[^\\_]*$} +{ProcessGroup:KubernetesNamespace} +{ProcessGroup:CommandLineArgs/.*?\\-f\\s\\/www\\/(.*?)\\/generated\\/httpd\\.conf.*?} + +You can combine different ones. Check the (documentation)[link] for more \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_mrpspringboot/conditional-naming-processgroup/conditional-naming-processgroup.yaml b/BMW-Dynatrace-config/CD_mrpspringboot/conditional-naming-processgroup/conditional-naming-processgroup.yaml new file mode 100644 index 00000000..1f16fe2c --- /dev/null +++ b/BMW-Dynatrace-config/CD_mrpspringboot/conditional-naming-processgroup/conditional-naming-processgroup.yaml @@ -0,0 +1,8 @@ +config: +- CDmrpspringboot: template.json + +CDmrpspringboot: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: mrpspringboot +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_mrpspringboot/conditional-naming-processgroup/template.json b/BMW-Dynatrace-config/CD_mrpspringboot/conditional-naming-processgroup/template.json new file mode 100644 index 00000000..7c039808 --- /dev/null +++ b/BMW-Dynatrace-config/CD_mrpspringboot/conditional-naming-processgroup/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "type": "PROCESS_GROUP" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_mrpspringboot/conditional-naming-service/README.md b/BMW-Dynatrace-config/CD_mrpspringboot/conditional-naming-service/README.md new file mode 100644 index 00000000..c34ef308 --- /dev/null +++ b/BMW-Dynatrace-config/CD_mrpspringboot/conditional-naming-service/README.md @@ -0,0 +1,35 @@ +### Service Naming Rules + +A typical case could be that you access to *Transaction & Services* and you find two services that are exactly the same: +*DataDownloadV1* +*DataDownloadV1* + +If you drilldown into the service and you check in the process group, you may have a PROD and a E2E for each service. + +*Note: if you see that both process group are exactly the same, please contact a Dynatrace expert to create a Process* +*Group detection rule* + +In the case the PG are PROD and E2E, then we need to create a rule that looks like this: + +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {Service:DetectedName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +- tag: Infotainment +- skipDeployment: false +``` + +The rule will get the Service Detected Name (current name) and it will extract (with a regex) the part of the kubernetes namespace after the "-", so -prod or -e2e, resulting in: +*DataDownloadV1 - prod* +*DataDownloadV1 - e2e* + +Now, services will be easy to identify. + +You can create rules based on any property/metadata. Some other placeholder's eamples: +{Service:DatabaseName} - E2E +{Service:WebServiceName} - {ProcessGroup:Kubernetes:microservice} - {ProcessGroup:Kubernetes:environment} +{Service:DetectedName} - {ProcessGroup:KubernetesContainerName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +{Service:DetectedName} - {ProcessGroup:SpringBootProfileName/[^\\-]*$} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_mrpspringboot/conditional-naming-service/conditional-naming-service.yaml b/BMW-Dynatrace-config/CD_mrpspringboot/conditional-naming-service/conditional-naming-service.yaml new file mode 100644 index 00000000..1f16fe2c --- /dev/null +++ b/BMW-Dynatrace-config/CD_mrpspringboot/conditional-naming-service/conditional-naming-service.yaml @@ -0,0 +1,8 @@ +config: +- CDmrpspringboot: template.json + +CDmrpspringboot: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: mrpspringboot +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_mrpspringboot/conditional-naming-service/template.json b/BMW-Dynatrace-config/CD_mrpspringboot/conditional-naming-service/template.json new file mode 100644 index 00000000..5d4fac56 --- /dev/null +++ b/BMW-Dynatrace-config/CD_mrpspringboot/conditional-naming-service/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "type": "SERVICE" +} \ 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 index d41c4c77..5f35e5c1 100644 --- a/BMW-Dynatrace-config/CD_mrpspringboot/custom-service-java/README.md +++ b/BMW-Dynatrace-config/CD_mrpspringboot/custom-service-java/README.md @@ -1,30 +1,4 @@ -## 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 configure custom services? -## 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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Custom+Services) page to configure your custom services. \ 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 index 92e734fa..1695924c 100644 --- a/BMW-Dynatrace-config/CD_mrpspringboot/synthetic-monitor/README.md +++ b/BMW-Dynatrace-config/CD_mrpspringboot/synthetic-monitor/README.md @@ -1,37 +1,4 @@ -# Synthetic Configuration -To calculate the Availability KPI, a synthetic must be configured. +### How to configure synthetics? -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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Synthetic+Monitors) page to configure your synthetics. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_nop-admin/conditional-naming-processgroup/README.md b/BMW-Dynatrace-config/CD_nop-admin/conditional-naming-processgroup/README.md new file mode 100644 index 00000000..f94196a5 --- /dev/null +++ b/BMW-Dynatrace-config/CD_nop-admin/conditional-naming-processgroup/README.md @@ -0,0 +1,67 @@ +### Process Group Detection Rules and Naming + +#### Detection Rule or Naming? + +For the explanation, we're using a real example of the Infotainment application: + +!(PGNaming1)[../../../../img/PGNaming1.PNG] + +Before working with your dashboards and alerting profiles, an important task to do when working with Dynatrace is checking +the structure of your applications (process groups). You can do that clicking under *technologies* and filter using your +application Management Zone. + +In the picture above, there are two Process Groups called bon-information-prod. **If you see duplicated process groups like in** +**this case, you MUST follow this guideline** + +Next step would be to open both process groups and compare the metadata. In that way, you can identify if all process instances are +part of the same application or not. An easy way to do that is asking yourself: how many instances of my application do i have? + +If you have 4 instances in total and you're able to see 2 in one PG and other 2 in other PG it means that **they are part of the ** +**same application** + +Another situation could be that checking on the metadata, then you see that are **two different application** and Dynatrace is just naming +the process group in the same way + +*Same application* +- Problem: Dynatrace is creating two different process groups, what transalates in two separated services for the same application. Instead of +seeing all the traffic in one service, you will have it splitted and it will complicate your monitoring +- Solution: create a process group detection rule. Contact Dynatrace Expert + +*Different application* +- Problem: Dynatrace is just naming in the same way applications that are different. +- Solution: This case is less severe, since it can be fixed with a process group naming rule. + + +What about our example? +!(PGNaming2)[../../../../img/PGNaming2.PNG] +!(PGNaming3)[../../../../img/PGNaming3.PNG] + +Based on the feedback of the infotaiment team, each process group is a different application (microservice) and it's visible in the kubernetes container/workload +within the metadata of each Process Group. + +#### How to create a Process Group Detection Rule +1. Open the *conditional-naming-processgroup.yaml* file and create a rule that looks like this: +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName} +- tag: Infotainment +- skipDeployment: false +``` +The result of the rule will be renaming the PG to this: +``` +bon-information-prod ipa +bon-information-prod rsl +``` + +Other possible placeholders that you can use are for example: +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName/[^\\-]*$} +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesFullPodName/buffet-(.*?)-} +{ProcessGroup:DetectedName} - {HostGroup:Name/[^\\_]*$} +{ProcessGroup:KubernetesNamespace} +{ProcessGroup:CommandLineArgs/.*?\\-f\\s\\/www\\/(.*?)\\/generated\\/httpd\\.conf.*?} + +You can combine different ones. Check the (documentation)[link] for more \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_nop-admin/conditional-naming-processgroup/conditional-naming-processgroup.yaml b/BMW-Dynatrace-config/CD_nop-admin/conditional-naming-processgroup/conditional-naming-processgroup.yaml new file mode 100644 index 00000000..ca38a5f0 --- /dev/null +++ b/BMW-Dynatrace-config/CD_nop-admin/conditional-naming-processgroup/conditional-naming-processgroup.yaml @@ -0,0 +1,8 @@ +config: +- CDnop-admin: template.json + +CDnop-admin: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: nop-admin +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_nop-admin/conditional-naming-processgroup/template.json b/BMW-Dynatrace-config/CD_nop-admin/conditional-naming-processgroup/template.json new file mode 100644 index 00000000..7c039808 --- /dev/null +++ b/BMW-Dynatrace-config/CD_nop-admin/conditional-naming-processgroup/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "type": "PROCESS_GROUP" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_nop-admin/conditional-naming-service/README.md b/BMW-Dynatrace-config/CD_nop-admin/conditional-naming-service/README.md new file mode 100644 index 00000000..c34ef308 --- /dev/null +++ b/BMW-Dynatrace-config/CD_nop-admin/conditional-naming-service/README.md @@ -0,0 +1,35 @@ +### Service Naming Rules + +A typical case could be that you access to *Transaction & Services* and you find two services that are exactly the same: +*DataDownloadV1* +*DataDownloadV1* + +If you drilldown into the service and you check in the process group, you may have a PROD and a E2E for each service. + +*Note: if you see that both process group are exactly the same, please contact a Dynatrace expert to create a Process* +*Group detection rule* + +In the case the PG are PROD and E2E, then we need to create a rule that looks like this: + +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {Service:DetectedName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +- tag: Infotainment +- skipDeployment: false +``` + +The rule will get the Service Detected Name (current name) and it will extract (with a regex) the part of the kubernetes namespace after the "-", so -prod or -e2e, resulting in: +*DataDownloadV1 - prod* +*DataDownloadV1 - e2e* + +Now, services will be easy to identify. + +You can create rules based on any property/metadata. Some other placeholder's eamples: +{Service:DatabaseName} - E2E +{Service:WebServiceName} - {ProcessGroup:Kubernetes:microservice} - {ProcessGroup:Kubernetes:environment} +{Service:DetectedName} - {ProcessGroup:KubernetesContainerName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +{Service:DetectedName} - {ProcessGroup:SpringBootProfileName/[^\\-]*$} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_nop-admin/conditional-naming-service/conditional-naming-service.yaml b/BMW-Dynatrace-config/CD_nop-admin/conditional-naming-service/conditional-naming-service.yaml new file mode 100644 index 00000000..ca38a5f0 --- /dev/null +++ b/BMW-Dynatrace-config/CD_nop-admin/conditional-naming-service/conditional-naming-service.yaml @@ -0,0 +1,8 @@ +config: +- CDnop-admin: template.json + +CDnop-admin: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: nop-admin +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_nop-admin/conditional-naming-service/template.json b/BMW-Dynatrace-config/CD_nop-admin/conditional-naming-service/template.json new file mode 100644 index 00000000..5d4fac56 --- /dev/null +++ b/BMW-Dynatrace-config/CD_nop-admin/conditional-naming-service/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "type": "SERVICE" +} \ 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 index d41c4c77..5f35e5c1 100644 --- a/BMW-Dynatrace-config/CD_nop-admin/custom-service-java/README.md +++ b/BMW-Dynatrace-config/CD_nop-admin/custom-service-java/README.md @@ -1,30 +1,4 @@ -## 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 configure custom services? -## 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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Custom+Services) page to configure your custom services. \ 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 index 92e734fa..1695924c 100644 --- a/BMW-Dynatrace-config/CD_nop-admin/synthetic-monitor/README.md +++ b/BMW-Dynatrace-config/CD_nop-admin/synthetic-monitor/README.md @@ -1,37 +1,4 @@ -# Synthetic Configuration -To calculate the Availability KPI, a synthetic must be configured. +### How to configure synthetics? -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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Synthetic+Monitors) page to configure your synthetics. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_nop-archive/conditional-naming-processgroup/README.md b/BMW-Dynatrace-config/CD_nop-archive/conditional-naming-processgroup/README.md new file mode 100644 index 00000000..f94196a5 --- /dev/null +++ b/BMW-Dynatrace-config/CD_nop-archive/conditional-naming-processgroup/README.md @@ -0,0 +1,67 @@ +### Process Group Detection Rules and Naming + +#### Detection Rule or Naming? + +For the explanation, we're using a real example of the Infotainment application: + +!(PGNaming1)[../../../../img/PGNaming1.PNG] + +Before working with your dashboards and alerting profiles, an important task to do when working with Dynatrace is checking +the structure of your applications (process groups). You can do that clicking under *technologies* and filter using your +application Management Zone. + +In the picture above, there are two Process Groups called bon-information-prod. **If you see duplicated process groups like in** +**this case, you MUST follow this guideline** + +Next step would be to open both process groups and compare the metadata. In that way, you can identify if all process instances are +part of the same application or not. An easy way to do that is asking yourself: how many instances of my application do i have? + +If you have 4 instances in total and you're able to see 2 in one PG and other 2 in other PG it means that **they are part of the ** +**same application** + +Another situation could be that checking on the metadata, then you see that are **two different application** and Dynatrace is just naming +the process group in the same way + +*Same application* +- Problem: Dynatrace is creating two different process groups, what transalates in two separated services for the same application. Instead of +seeing all the traffic in one service, you will have it splitted and it will complicate your monitoring +- Solution: create a process group detection rule. Contact Dynatrace Expert + +*Different application* +- Problem: Dynatrace is just naming in the same way applications that are different. +- Solution: This case is less severe, since it can be fixed with a process group naming rule. + + +What about our example? +!(PGNaming2)[../../../../img/PGNaming2.PNG] +!(PGNaming3)[../../../../img/PGNaming3.PNG] + +Based on the feedback of the infotaiment team, each process group is a different application (microservice) and it's visible in the kubernetes container/workload +within the metadata of each Process Group. + +#### How to create a Process Group Detection Rule +1. Open the *conditional-naming-processgroup.yaml* file and create a rule that looks like this: +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName} +- tag: Infotainment +- skipDeployment: false +``` +The result of the rule will be renaming the PG to this: +``` +bon-information-prod ipa +bon-information-prod rsl +``` + +Other possible placeholders that you can use are for example: +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName/[^\\-]*$} +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesFullPodName/buffet-(.*?)-} +{ProcessGroup:DetectedName} - {HostGroup:Name/[^\\_]*$} +{ProcessGroup:KubernetesNamespace} +{ProcessGroup:CommandLineArgs/.*?\\-f\\s\\/www\\/(.*?)\\/generated\\/httpd\\.conf.*?} + +You can combine different ones. Check the (documentation)[link] for more \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_nop-archive/conditional-naming-processgroup/conditional-naming-processgroup.yaml b/BMW-Dynatrace-config/CD_nop-archive/conditional-naming-processgroup/conditional-naming-processgroup.yaml new file mode 100644 index 00000000..bbd93782 --- /dev/null +++ b/BMW-Dynatrace-config/CD_nop-archive/conditional-naming-processgroup/conditional-naming-processgroup.yaml @@ -0,0 +1,8 @@ +config: +- CDnop-archive: template.json + +CDnop-archive: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: nop-archive +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_nop-archive/conditional-naming-processgroup/template.json b/BMW-Dynatrace-config/CD_nop-archive/conditional-naming-processgroup/template.json new file mode 100644 index 00000000..7c039808 --- /dev/null +++ b/BMW-Dynatrace-config/CD_nop-archive/conditional-naming-processgroup/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "type": "PROCESS_GROUP" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_nop-archive/conditional-naming-service/README.md b/BMW-Dynatrace-config/CD_nop-archive/conditional-naming-service/README.md new file mode 100644 index 00000000..c34ef308 --- /dev/null +++ b/BMW-Dynatrace-config/CD_nop-archive/conditional-naming-service/README.md @@ -0,0 +1,35 @@ +### Service Naming Rules + +A typical case could be that you access to *Transaction & Services* and you find two services that are exactly the same: +*DataDownloadV1* +*DataDownloadV1* + +If you drilldown into the service and you check in the process group, you may have a PROD and a E2E for each service. + +*Note: if you see that both process group are exactly the same, please contact a Dynatrace expert to create a Process* +*Group detection rule* + +In the case the PG are PROD and E2E, then we need to create a rule that looks like this: + +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {Service:DetectedName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +- tag: Infotainment +- skipDeployment: false +``` + +The rule will get the Service Detected Name (current name) and it will extract (with a regex) the part of the kubernetes namespace after the "-", so -prod or -e2e, resulting in: +*DataDownloadV1 - prod* +*DataDownloadV1 - e2e* + +Now, services will be easy to identify. + +You can create rules based on any property/metadata. Some other placeholder's eamples: +{Service:DatabaseName} - E2E +{Service:WebServiceName} - {ProcessGroup:Kubernetes:microservice} - {ProcessGroup:Kubernetes:environment} +{Service:DetectedName} - {ProcessGroup:KubernetesContainerName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +{Service:DetectedName} - {ProcessGroup:SpringBootProfileName/[^\\-]*$} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_nop-archive/conditional-naming-service/conditional-naming-service.yaml b/BMW-Dynatrace-config/CD_nop-archive/conditional-naming-service/conditional-naming-service.yaml new file mode 100644 index 00000000..bbd93782 --- /dev/null +++ b/BMW-Dynatrace-config/CD_nop-archive/conditional-naming-service/conditional-naming-service.yaml @@ -0,0 +1,8 @@ +config: +- CDnop-archive: template.json + +CDnop-archive: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: nop-archive +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_nop-archive/conditional-naming-service/template.json b/BMW-Dynatrace-config/CD_nop-archive/conditional-naming-service/template.json new file mode 100644 index 00000000..5d4fac56 --- /dev/null +++ b/BMW-Dynatrace-config/CD_nop-archive/conditional-naming-service/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "type": "SERVICE" +} \ 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 index d41c4c77..5f35e5c1 100644 --- a/BMW-Dynatrace-config/CD_nop-archive/custom-service-java/README.md +++ b/BMW-Dynatrace-config/CD_nop-archive/custom-service-java/README.md @@ -1,30 +1,4 @@ -## 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 configure custom services? -## 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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Custom+Services) page to configure your custom services. \ 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 index 92e734fa..1695924c 100644 --- a/BMW-Dynatrace-config/CD_nop-archive/synthetic-monitor/README.md +++ b/BMW-Dynatrace-config/CD_nop-archive/synthetic-monitor/README.md @@ -1,37 +1,4 @@ -# Synthetic Configuration -To calculate the Availability KPI, a synthetic must be configured. +### How to configure synthetics? -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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Synthetic+Monitors) page to configure your synthetics. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_nop-provisioning/conditional-naming-processgroup/README.md b/BMW-Dynatrace-config/CD_nop-provisioning/conditional-naming-processgroup/README.md new file mode 100644 index 00000000..f94196a5 --- /dev/null +++ b/BMW-Dynatrace-config/CD_nop-provisioning/conditional-naming-processgroup/README.md @@ -0,0 +1,67 @@ +### Process Group Detection Rules and Naming + +#### Detection Rule or Naming? + +For the explanation, we're using a real example of the Infotainment application: + +!(PGNaming1)[../../../../img/PGNaming1.PNG] + +Before working with your dashboards and alerting profiles, an important task to do when working with Dynatrace is checking +the structure of your applications (process groups). You can do that clicking under *technologies* and filter using your +application Management Zone. + +In the picture above, there are two Process Groups called bon-information-prod. **If you see duplicated process groups like in** +**this case, you MUST follow this guideline** + +Next step would be to open both process groups and compare the metadata. In that way, you can identify if all process instances are +part of the same application or not. An easy way to do that is asking yourself: how many instances of my application do i have? + +If you have 4 instances in total and you're able to see 2 in one PG and other 2 in other PG it means that **they are part of the ** +**same application** + +Another situation could be that checking on the metadata, then you see that are **two different application** and Dynatrace is just naming +the process group in the same way + +*Same application* +- Problem: Dynatrace is creating two different process groups, what transalates in two separated services for the same application. Instead of +seeing all the traffic in one service, you will have it splitted and it will complicate your monitoring +- Solution: create a process group detection rule. Contact Dynatrace Expert + +*Different application* +- Problem: Dynatrace is just naming in the same way applications that are different. +- Solution: This case is less severe, since it can be fixed with a process group naming rule. + + +What about our example? +!(PGNaming2)[../../../../img/PGNaming2.PNG] +!(PGNaming3)[../../../../img/PGNaming3.PNG] + +Based on the feedback of the infotaiment team, each process group is a different application (microservice) and it's visible in the kubernetes container/workload +within the metadata of each Process Group. + +#### How to create a Process Group Detection Rule +1. Open the *conditional-naming-processgroup.yaml* file and create a rule that looks like this: +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName} +- tag: Infotainment +- skipDeployment: false +``` +The result of the rule will be renaming the PG to this: +``` +bon-information-prod ipa +bon-information-prod rsl +``` + +Other possible placeholders that you can use are for example: +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName/[^\\-]*$} +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesFullPodName/buffet-(.*?)-} +{ProcessGroup:DetectedName} - {HostGroup:Name/[^\\_]*$} +{ProcessGroup:KubernetesNamespace} +{ProcessGroup:CommandLineArgs/.*?\\-f\\s\\/www\\/(.*?)\\/generated\\/httpd\\.conf.*?} + +You can combine different ones. Check the (documentation)[link] for more \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_nop-provisioning/conditional-naming-processgroup/conditional-naming-processgroup.yaml b/BMW-Dynatrace-config/CD_nop-provisioning/conditional-naming-processgroup/conditional-naming-processgroup.yaml new file mode 100644 index 00000000..dfa486d9 --- /dev/null +++ b/BMW-Dynatrace-config/CD_nop-provisioning/conditional-naming-processgroup/conditional-naming-processgroup.yaml @@ -0,0 +1,8 @@ +config: +- CDnop-provisioning: template.json + +CDnop-provisioning: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: nop-provisioning +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_nop-provisioning/conditional-naming-processgroup/template.json b/BMW-Dynatrace-config/CD_nop-provisioning/conditional-naming-processgroup/template.json new file mode 100644 index 00000000..7c039808 --- /dev/null +++ b/BMW-Dynatrace-config/CD_nop-provisioning/conditional-naming-processgroup/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "type": "PROCESS_GROUP" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_nop-provisioning/conditional-naming-service/README.md b/BMW-Dynatrace-config/CD_nop-provisioning/conditional-naming-service/README.md new file mode 100644 index 00000000..c34ef308 --- /dev/null +++ b/BMW-Dynatrace-config/CD_nop-provisioning/conditional-naming-service/README.md @@ -0,0 +1,35 @@ +### Service Naming Rules + +A typical case could be that you access to *Transaction & Services* and you find two services that are exactly the same: +*DataDownloadV1* +*DataDownloadV1* + +If you drilldown into the service and you check in the process group, you may have a PROD and a E2E for each service. + +*Note: if you see that both process group are exactly the same, please contact a Dynatrace expert to create a Process* +*Group detection rule* + +In the case the PG are PROD and E2E, then we need to create a rule that looks like this: + +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {Service:DetectedName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +- tag: Infotainment +- skipDeployment: false +``` + +The rule will get the Service Detected Name (current name) and it will extract (with a regex) the part of the kubernetes namespace after the "-", so -prod or -e2e, resulting in: +*DataDownloadV1 - prod* +*DataDownloadV1 - e2e* + +Now, services will be easy to identify. + +You can create rules based on any property/metadata. Some other placeholder's eamples: +{Service:DatabaseName} - E2E +{Service:WebServiceName} - {ProcessGroup:Kubernetes:microservice} - {ProcessGroup:Kubernetes:environment} +{Service:DetectedName} - {ProcessGroup:KubernetesContainerName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +{Service:DetectedName} - {ProcessGroup:SpringBootProfileName/[^\\-]*$} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_nop-provisioning/conditional-naming-service/conditional-naming-service.yaml b/BMW-Dynatrace-config/CD_nop-provisioning/conditional-naming-service/conditional-naming-service.yaml new file mode 100644 index 00000000..dfa486d9 --- /dev/null +++ b/BMW-Dynatrace-config/CD_nop-provisioning/conditional-naming-service/conditional-naming-service.yaml @@ -0,0 +1,8 @@ +config: +- CDnop-provisioning: template.json + +CDnop-provisioning: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: nop-provisioning +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_nop-provisioning/conditional-naming-service/template.json b/BMW-Dynatrace-config/CD_nop-provisioning/conditional-naming-service/template.json new file mode 100644 index 00000000..5d4fac56 --- /dev/null +++ b/BMW-Dynatrace-config/CD_nop-provisioning/conditional-naming-service/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "type": "SERVICE" +} \ 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 index d41c4c77..5f35e5c1 100644 --- a/BMW-Dynatrace-config/CD_nop-provisioning/custom-service-java/README.md +++ b/BMW-Dynatrace-config/CD_nop-provisioning/custom-service-java/README.md @@ -1,30 +1,4 @@ -## 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 configure custom services? -## 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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Custom+Services) page to configure your custom services. \ 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 index 92e734fa..1695924c 100644 --- a/BMW-Dynatrace-config/CD_nop-provisioning/synthetic-monitor/README.md +++ b/BMW-Dynatrace-config/CD_nop-provisioning/synthetic-monitor/README.md @@ -1,37 +1,4 @@ -# Synthetic Configuration -To calculate the Availability KPI, a synthetic must be configured. +### How to configure synthetics? -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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Synthetic+Monitors) page to configure your synthetics. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_nop-trigger/conditional-naming-processgroup/README.md b/BMW-Dynatrace-config/CD_nop-trigger/conditional-naming-processgroup/README.md new file mode 100644 index 00000000..f94196a5 --- /dev/null +++ b/BMW-Dynatrace-config/CD_nop-trigger/conditional-naming-processgroup/README.md @@ -0,0 +1,67 @@ +### Process Group Detection Rules and Naming + +#### Detection Rule or Naming? + +For the explanation, we're using a real example of the Infotainment application: + +!(PGNaming1)[../../../../img/PGNaming1.PNG] + +Before working with your dashboards and alerting profiles, an important task to do when working with Dynatrace is checking +the structure of your applications (process groups). You can do that clicking under *technologies* and filter using your +application Management Zone. + +In the picture above, there are two Process Groups called bon-information-prod. **If you see duplicated process groups like in** +**this case, you MUST follow this guideline** + +Next step would be to open both process groups and compare the metadata. In that way, you can identify if all process instances are +part of the same application or not. An easy way to do that is asking yourself: how many instances of my application do i have? + +If you have 4 instances in total and you're able to see 2 in one PG and other 2 in other PG it means that **they are part of the ** +**same application** + +Another situation could be that checking on the metadata, then you see that are **two different application** and Dynatrace is just naming +the process group in the same way + +*Same application* +- Problem: Dynatrace is creating two different process groups, what transalates in two separated services for the same application. Instead of +seeing all the traffic in one service, you will have it splitted and it will complicate your monitoring +- Solution: create a process group detection rule. Contact Dynatrace Expert + +*Different application* +- Problem: Dynatrace is just naming in the same way applications that are different. +- Solution: This case is less severe, since it can be fixed with a process group naming rule. + + +What about our example? +!(PGNaming2)[../../../../img/PGNaming2.PNG] +!(PGNaming3)[../../../../img/PGNaming3.PNG] + +Based on the feedback of the infotaiment team, each process group is a different application (microservice) and it's visible in the kubernetes container/workload +within the metadata of each Process Group. + +#### How to create a Process Group Detection Rule +1. Open the *conditional-naming-processgroup.yaml* file and create a rule that looks like this: +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName} +- tag: Infotainment +- skipDeployment: false +``` +The result of the rule will be renaming the PG to this: +``` +bon-information-prod ipa +bon-information-prod rsl +``` + +Other possible placeholders that you can use are for example: +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName/[^\\-]*$} +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesFullPodName/buffet-(.*?)-} +{ProcessGroup:DetectedName} - {HostGroup:Name/[^\\_]*$} +{ProcessGroup:KubernetesNamespace} +{ProcessGroup:CommandLineArgs/.*?\\-f\\s\\/www\\/(.*?)\\/generated\\/httpd\\.conf.*?} + +You can combine different ones. Check the (documentation)[link] for more \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_nop-trigger/conditional-naming-processgroup/conditional-naming-processgroup.yaml b/BMW-Dynatrace-config/CD_nop-trigger/conditional-naming-processgroup/conditional-naming-processgroup.yaml new file mode 100644 index 00000000..bc089870 --- /dev/null +++ b/BMW-Dynatrace-config/CD_nop-trigger/conditional-naming-processgroup/conditional-naming-processgroup.yaml @@ -0,0 +1,8 @@ +config: +- CDnop-trigger: template.json + +CDnop-trigger: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: nop-trigger +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_nop-trigger/conditional-naming-processgroup/template.json b/BMW-Dynatrace-config/CD_nop-trigger/conditional-naming-processgroup/template.json new file mode 100644 index 00000000..7c039808 --- /dev/null +++ b/BMW-Dynatrace-config/CD_nop-trigger/conditional-naming-processgroup/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "type": "PROCESS_GROUP" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_nop-trigger/conditional-naming-service/README.md b/BMW-Dynatrace-config/CD_nop-trigger/conditional-naming-service/README.md new file mode 100644 index 00000000..c34ef308 --- /dev/null +++ b/BMW-Dynatrace-config/CD_nop-trigger/conditional-naming-service/README.md @@ -0,0 +1,35 @@ +### Service Naming Rules + +A typical case could be that you access to *Transaction & Services* and you find two services that are exactly the same: +*DataDownloadV1* +*DataDownloadV1* + +If you drilldown into the service and you check in the process group, you may have a PROD and a E2E for each service. + +*Note: if you see that both process group are exactly the same, please contact a Dynatrace expert to create a Process* +*Group detection rule* + +In the case the PG are PROD and E2E, then we need to create a rule that looks like this: + +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {Service:DetectedName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +- tag: Infotainment +- skipDeployment: false +``` + +The rule will get the Service Detected Name (current name) and it will extract (with a regex) the part of the kubernetes namespace after the "-", so -prod or -e2e, resulting in: +*DataDownloadV1 - prod* +*DataDownloadV1 - e2e* + +Now, services will be easy to identify. + +You can create rules based on any property/metadata. Some other placeholder's eamples: +{Service:DatabaseName} - E2E +{Service:WebServiceName} - {ProcessGroup:Kubernetes:microservice} - {ProcessGroup:Kubernetes:environment} +{Service:DetectedName} - {ProcessGroup:KubernetesContainerName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +{Service:DetectedName} - {ProcessGroup:SpringBootProfileName/[^\\-]*$} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_nop-trigger/conditional-naming-service/conditional-naming-service.yaml b/BMW-Dynatrace-config/CD_nop-trigger/conditional-naming-service/conditional-naming-service.yaml new file mode 100644 index 00000000..bc089870 --- /dev/null +++ b/BMW-Dynatrace-config/CD_nop-trigger/conditional-naming-service/conditional-naming-service.yaml @@ -0,0 +1,8 @@ +config: +- CDnop-trigger: template.json + +CDnop-trigger: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: nop-trigger +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_nop-trigger/conditional-naming-service/template.json b/BMW-Dynatrace-config/CD_nop-trigger/conditional-naming-service/template.json new file mode 100644 index 00000000..5d4fac56 --- /dev/null +++ b/BMW-Dynatrace-config/CD_nop-trigger/conditional-naming-service/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "type": "SERVICE" +} \ 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 index d41c4c77..5f35e5c1 100644 --- a/BMW-Dynatrace-config/CD_nop-trigger/custom-service-java/README.md +++ b/BMW-Dynatrace-config/CD_nop-trigger/custom-service-java/README.md @@ -1,30 +1,4 @@ -## 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 configure custom services? -## 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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Custom+Services) page to configure your custom services. \ 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 index 92e734fa..1695924c 100644 --- a/BMW-Dynatrace-config/CD_nop-trigger/synthetic-monitor/README.md +++ b/BMW-Dynatrace-config/CD_nop-trigger/synthetic-monitor/README.md @@ -1,37 +1,4 @@ -# Synthetic Configuration -To calculate the Availability KPI, a synthetic must be configured. +### How to configure synthetics? -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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Synthetic+Monitors) page to configure your synthetics. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_notification-composite-service/conditional-naming-processgroup/README.md b/BMW-Dynatrace-config/CD_notification-composite-service/conditional-naming-processgroup/README.md new file mode 100644 index 00000000..f94196a5 --- /dev/null +++ b/BMW-Dynatrace-config/CD_notification-composite-service/conditional-naming-processgroup/README.md @@ -0,0 +1,67 @@ +### Process Group Detection Rules and Naming + +#### Detection Rule or Naming? + +For the explanation, we're using a real example of the Infotainment application: + +!(PGNaming1)[../../../../img/PGNaming1.PNG] + +Before working with your dashboards and alerting profiles, an important task to do when working with Dynatrace is checking +the structure of your applications (process groups). You can do that clicking under *technologies* and filter using your +application Management Zone. + +In the picture above, there are two Process Groups called bon-information-prod. **If you see duplicated process groups like in** +**this case, you MUST follow this guideline** + +Next step would be to open both process groups and compare the metadata. In that way, you can identify if all process instances are +part of the same application or not. An easy way to do that is asking yourself: how many instances of my application do i have? + +If you have 4 instances in total and you're able to see 2 in one PG and other 2 in other PG it means that **they are part of the ** +**same application** + +Another situation could be that checking on the metadata, then you see that are **two different application** and Dynatrace is just naming +the process group in the same way + +*Same application* +- Problem: Dynatrace is creating two different process groups, what transalates in two separated services for the same application. Instead of +seeing all the traffic in one service, you will have it splitted and it will complicate your monitoring +- Solution: create a process group detection rule. Contact Dynatrace Expert + +*Different application* +- Problem: Dynatrace is just naming in the same way applications that are different. +- Solution: This case is less severe, since it can be fixed with a process group naming rule. + + +What about our example? +!(PGNaming2)[../../../../img/PGNaming2.PNG] +!(PGNaming3)[../../../../img/PGNaming3.PNG] + +Based on the feedback of the infotaiment team, each process group is a different application (microservice) and it's visible in the kubernetes container/workload +within the metadata of each Process Group. + +#### How to create a Process Group Detection Rule +1. Open the *conditional-naming-processgroup.yaml* file and create a rule that looks like this: +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName} +- tag: Infotainment +- skipDeployment: false +``` +The result of the rule will be renaming the PG to this: +``` +bon-information-prod ipa +bon-information-prod rsl +``` + +Other possible placeholders that you can use are for example: +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName/[^\\-]*$} +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesFullPodName/buffet-(.*?)-} +{ProcessGroup:DetectedName} - {HostGroup:Name/[^\\_]*$} +{ProcessGroup:KubernetesNamespace} +{ProcessGroup:CommandLineArgs/.*?\\-f\\s\\/www\\/(.*?)\\/generated\\/httpd\\.conf.*?} + +You can combine different ones. Check the (documentation)[link] for more \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_notification-composite-service/conditional-naming-processgroup/conditional-naming-processgroup.yaml b/BMW-Dynatrace-config/CD_notification-composite-service/conditional-naming-processgroup/conditional-naming-processgroup.yaml new file mode 100644 index 00000000..0cd12c57 --- /dev/null +++ b/BMW-Dynatrace-config/CD_notification-composite-service/conditional-naming-processgroup/conditional-naming-processgroup.yaml @@ -0,0 +1,8 @@ +config: +- CDnotification-composite-service: template.json + +CDnotification-composite-service: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: notification-composite-service +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_notification-composite-service/conditional-naming-processgroup/template.json b/BMW-Dynatrace-config/CD_notification-composite-service/conditional-naming-processgroup/template.json new file mode 100644 index 00000000..7c039808 --- /dev/null +++ b/BMW-Dynatrace-config/CD_notification-composite-service/conditional-naming-processgroup/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "type": "PROCESS_GROUP" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_notification-composite-service/conditional-naming-service/README.md b/BMW-Dynatrace-config/CD_notification-composite-service/conditional-naming-service/README.md new file mode 100644 index 00000000..c34ef308 --- /dev/null +++ b/BMW-Dynatrace-config/CD_notification-composite-service/conditional-naming-service/README.md @@ -0,0 +1,35 @@ +### Service Naming Rules + +A typical case could be that you access to *Transaction & Services* and you find two services that are exactly the same: +*DataDownloadV1* +*DataDownloadV1* + +If you drilldown into the service and you check in the process group, you may have a PROD and a E2E for each service. + +*Note: if you see that both process group are exactly the same, please contact a Dynatrace expert to create a Process* +*Group detection rule* + +In the case the PG are PROD and E2E, then we need to create a rule that looks like this: + +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {Service:DetectedName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +- tag: Infotainment +- skipDeployment: false +``` + +The rule will get the Service Detected Name (current name) and it will extract (with a regex) the part of the kubernetes namespace after the "-", so -prod or -e2e, resulting in: +*DataDownloadV1 - prod* +*DataDownloadV1 - e2e* + +Now, services will be easy to identify. + +You can create rules based on any property/metadata. Some other placeholder's eamples: +{Service:DatabaseName} - E2E +{Service:WebServiceName} - {ProcessGroup:Kubernetes:microservice} - {ProcessGroup:Kubernetes:environment} +{Service:DetectedName} - {ProcessGroup:KubernetesContainerName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +{Service:DetectedName} - {ProcessGroup:SpringBootProfileName/[^\\-]*$} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_notification-composite-service/conditional-naming-service/conditional-naming-service.yaml b/BMW-Dynatrace-config/CD_notification-composite-service/conditional-naming-service/conditional-naming-service.yaml new file mode 100644 index 00000000..0cd12c57 --- /dev/null +++ b/BMW-Dynatrace-config/CD_notification-composite-service/conditional-naming-service/conditional-naming-service.yaml @@ -0,0 +1,8 @@ +config: +- CDnotification-composite-service: template.json + +CDnotification-composite-service: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: notification-composite-service +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_notification-composite-service/conditional-naming-service/template.json b/BMW-Dynatrace-config/CD_notification-composite-service/conditional-naming-service/template.json new file mode 100644 index 00000000..5d4fac56 --- /dev/null +++ b/BMW-Dynatrace-config/CD_notification-composite-service/conditional-naming-service/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "type": "SERVICE" +} \ 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 index d41c4c77..5f35e5c1 100644 --- 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 @@ -1,30 +1,4 @@ -## 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 configure custom services? -## 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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Custom+Services) page to configure your custom services. \ 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 index 92e734fa..1695924c 100644 --- a/BMW-Dynatrace-config/CD_notification-composite-service/synthetic-monitor/README.md +++ b/BMW-Dynatrace-config/CD_notification-composite-service/synthetic-monitor/README.md @@ -1,37 +1,4 @@ -# Synthetic Configuration -To calculate the Availability KPI, a synthetic must be configured. +### How to configure synthetics? -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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Synthetic+Monitors) page to configure your synthetics. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_notification-service/conditional-naming-processgroup/README.md b/BMW-Dynatrace-config/CD_notification-service/conditional-naming-processgroup/README.md new file mode 100644 index 00000000..f94196a5 --- /dev/null +++ b/BMW-Dynatrace-config/CD_notification-service/conditional-naming-processgroup/README.md @@ -0,0 +1,67 @@ +### Process Group Detection Rules and Naming + +#### Detection Rule or Naming? + +For the explanation, we're using a real example of the Infotainment application: + +!(PGNaming1)[../../../../img/PGNaming1.PNG] + +Before working with your dashboards and alerting profiles, an important task to do when working with Dynatrace is checking +the structure of your applications (process groups). You can do that clicking under *technologies* and filter using your +application Management Zone. + +In the picture above, there are two Process Groups called bon-information-prod. **If you see duplicated process groups like in** +**this case, you MUST follow this guideline** + +Next step would be to open both process groups and compare the metadata. In that way, you can identify if all process instances are +part of the same application or not. An easy way to do that is asking yourself: how many instances of my application do i have? + +If you have 4 instances in total and you're able to see 2 in one PG and other 2 in other PG it means that **they are part of the ** +**same application** + +Another situation could be that checking on the metadata, then you see that are **two different application** and Dynatrace is just naming +the process group in the same way + +*Same application* +- Problem: Dynatrace is creating two different process groups, what transalates in two separated services for the same application. Instead of +seeing all the traffic in one service, you will have it splitted and it will complicate your monitoring +- Solution: create a process group detection rule. Contact Dynatrace Expert + +*Different application* +- Problem: Dynatrace is just naming in the same way applications that are different. +- Solution: This case is less severe, since it can be fixed with a process group naming rule. + + +What about our example? +!(PGNaming2)[../../../../img/PGNaming2.PNG] +!(PGNaming3)[../../../../img/PGNaming3.PNG] + +Based on the feedback of the infotaiment team, each process group is a different application (microservice) and it's visible in the kubernetes container/workload +within the metadata of each Process Group. + +#### How to create a Process Group Detection Rule +1. Open the *conditional-naming-processgroup.yaml* file and create a rule that looks like this: +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName} +- tag: Infotainment +- skipDeployment: false +``` +The result of the rule will be renaming the PG to this: +``` +bon-information-prod ipa +bon-information-prod rsl +``` + +Other possible placeholders that you can use are for example: +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName/[^\\-]*$} +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesFullPodName/buffet-(.*?)-} +{ProcessGroup:DetectedName} - {HostGroup:Name/[^\\_]*$} +{ProcessGroup:KubernetesNamespace} +{ProcessGroup:CommandLineArgs/.*?\\-f\\s\\/www\\/(.*?)\\/generated\\/httpd\\.conf.*?} + +You can combine different ones. Check the (documentation)[link] for more \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_notification-service/conditional-naming-processgroup/conditional-naming-processgroup.yaml b/BMW-Dynatrace-config/CD_notification-service/conditional-naming-processgroup/conditional-naming-processgroup.yaml new file mode 100644 index 00000000..99005541 --- /dev/null +++ b/BMW-Dynatrace-config/CD_notification-service/conditional-naming-processgroup/conditional-naming-processgroup.yaml @@ -0,0 +1,8 @@ +config: +- CDnotification-service: template.json + +CDnotification-service: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: notification-service +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_notification-service/conditional-naming-processgroup/template.json b/BMW-Dynatrace-config/CD_notification-service/conditional-naming-processgroup/template.json new file mode 100644 index 00000000..7c039808 --- /dev/null +++ b/BMW-Dynatrace-config/CD_notification-service/conditional-naming-processgroup/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "type": "PROCESS_GROUP" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_notification-service/conditional-naming-service/README.md b/BMW-Dynatrace-config/CD_notification-service/conditional-naming-service/README.md new file mode 100644 index 00000000..c34ef308 --- /dev/null +++ b/BMW-Dynatrace-config/CD_notification-service/conditional-naming-service/README.md @@ -0,0 +1,35 @@ +### Service Naming Rules + +A typical case could be that you access to *Transaction & Services* and you find two services that are exactly the same: +*DataDownloadV1* +*DataDownloadV1* + +If you drilldown into the service and you check in the process group, you may have a PROD and a E2E for each service. + +*Note: if you see that both process group are exactly the same, please contact a Dynatrace expert to create a Process* +*Group detection rule* + +In the case the PG are PROD and E2E, then we need to create a rule that looks like this: + +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {Service:DetectedName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +- tag: Infotainment +- skipDeployment: false +``` + +The rule will get the Service Detected Name (current name) and it will extract (with a regex) the part of the kubernetes namespace after the "-", so -prod or -e2e, resulting in: +*DataDownloadV1 - prod* +*DataDownloadV1 - e2e* + +Now, services will be easy to identify. + +You can create rules based on any property/metadata. Some other placeholder's eamples: +{Service:DatabaseName} - E2E +{Service:WebServiceName} - {ProcessGroup:Kubernetes:microservice} - {ProcessGroup:Kubernetes:environment} +{Service:DetectedName} - {ProcessGroup:KubernetesContainerName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +{Service:DetectedName} - {ProcessGroup:SpringBootProfileName/[^\\-]*$} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_notification-service/conditional-naming-service/conditional-naming-service.yaml b/BMW-Dynatrace-config/CD_notification-service/conditional-naming-service/conditional-naming-service.yaml new file mode 100644 index 00000000..99005541 --- /dev/null +++ b/BMW-Dynatrace-config/CD_notification-service/conditional-naming-service/conditional-naming-service.yaml @@ -0,0 +1,8 @@ +config: +- CDnotification-service: template.json + +CDnotification-service: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: notification-service +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_notification-service/conditional-naming-service/template.json b/BMW-Dynatrace-config/CD_notification-service/conditional-naming-service/template.json new file mode 100644 index 00000000..5d4fac56 --- /dev/null +++ b/BMW-Dynatrace-config/CD_notification-service/conditional-naming-service/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "type": "SERVICE" +} \ 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 index d41c4c77..5f35e5c1 100644 --- a/BMW-Dynatrace-config/CD_notification-service/custom-service-java/README.md +++ b/BMW-Dynatrace-config/CD_notification-service/custom-service-java/README.md @@ -1,30 +1,4 @@ -## 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 configure custom services? -## 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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Custom+Services) page to configure your custom services. \ 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 index 92e734fa..1695924c 100644 --- a/BMW-Dynatrace-config/CD_notification-service/synthetic-monitor/README.md +++ b/BMW-Dynatrace-config/CD_notification-service/synthetic-monitor/README.md @@ -1,37 +1,4 @@ -# Synthetic Configuration -To calculate the Availability KPI, a synthetic must be configured. +### How to configure synthetics? -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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Synthetic+Monitors) page to configure your synthetics. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_oas-composite-service/conditional-naming-processgroup/README.md b/BMW-Dynatrace-config/CD_oas-composite-service/conditional-naming-processgroup/README.md new file mode 100644 index 00000000..f94196a5 --- /dev/null +++ b/BMW-Dynatrace-config/CD_oas-composite-service/conditional-naming-processgroup/README.md @@ -0,0 +1,67 @@ +### Process Group Detection Rules and Naming + +#### Detection Rule or Naming? + +For the explanation, we're using a real example of the Infotainment application: + +!(PGNaming1)[../../../../img/PGNaming1.PNG] + +Before working with your dashboards and alerting profiles, an important task to do when working with Dynatrace is checking +the structure of your applications (process groups). You can do that clicking under *technologies* and filter using your +application Management Zone. + +In the picture above, there are two Process Groups called bon-information-prod. **If you see duplicated process groups like in** +**this case, you MUST follow this guideline** + +Next step would be to open both process groups and compare the metadata. In that way, you can identify if all process instances are +part of the same application or not. An easy way to do that is asking yourself: how many instances of my application do i have? + +If you have 4 instances in total and you're able to see 2 in one PG and other 2 in other PG it means that **they are part of the ** +**same application** + +Another situation could be that checking on the metadata, then you see that are **two different application** and Dynatrace is just naming +the process group in the same way + +*Same application* +- Problem: Dynatrace is creating two different process groups, what transalates in two separated services for the same application. Instead of +seeing all the traffic in one service, you will have it splitted and it will complicate your monitoring +- Solution: create a process group detection rule. Contact Dynatrace Expert + +*Different application* +- Problem: Dynatrace is just naming in the same way applications that are different. +- Solution: This case is less severe, since it can be fixed with a process group naming rule. + + +What about our example? +!(PGNaming2)[../../../../img/PGNaming2.PNG] +!(PGNaming3)[../../../../img/PGNaming3.PNG] + +Based on the feedback of the infotaiment team, each process group is a different application (microservice) and it's visible in the kubernetes container/workload +within the metadata of each Process Group. + +#### How to create a Process Group Detection Rule +1. Open the *conditional-naming-processgroup.yaml* file and create a rule that looks like this: +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName} +- tag: Infotainment +- skipDeployment: false +``` +The result of the rule will be renaming the PG to this: +``` +bon-information-prod ipa +bon-information-prod rsl +``` + +Other possible placeholders that you can use are for example: +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName/[^\\-]*$} +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesFullPodName/buffet-(.*?)-} +{ProcessGroup:DetectedName} - {HostGroup:Name/[^\\_]*$} +{ProcessGroup:KubernetesNamespace} +{ProcessGroup:CommandLineArgs/.*?\\-f\\s\\/www\\/(.*?)\\/generated\\/httpd\\.conf.*?} + +You can combine different ones. Check the (documentation)[link] for more \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_oas-composite-service/conditional-naming-processgroup/conditional-naming-processgroup.yaml b/BMW-Dynatrace-config/CD_oas-composite-service/conditional-naming-processgroup/conditional-naming-processgroup.yaml new file mode 100644 index 00000000..ee76d40c --- /dev/null +++ b/BMW-Dynatrace-config/CD_oas-composite-service/conditional-naming-processgroup/conditional-naming-processgroup.yaml @@ -0,0 +1,8 @@ +config: +- CDoas-composite-service: template.json + +CDoas-composite-service: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: oas-composite-service +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_oas-composite-service/conditional-naming-processgroup/template.json b/BMW-Dynatrace-config/CD_oas-composite-service/conditional-naming-processgroup/template.json new file mode 100644 index 00000000..7c039808 --- /dev/null +++ b/BMW-Dynatrace-config/CD_oas-composite-service/conditional-naming-processgroup/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "type": "PROCESS_GROUP" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_oas-composite-service/conditional-naming-service/README.md b/BMW-Dynatrace-config/CD_oas-composite-service/conditional-naming-service/README.md new file mode 100644 index 00000000..c34ef308 --- /dev/null +++ b/BMW-Dynatrace-config/CD_oas-composite-service/conditional-naming-service/README.md @@ -0,0 +1,35 @@ +### Service Naming Rules + +A typical case could be that you access to *Transaction & Services* and you find two services that are exactly the same: +*DataDownloadV1* +*DataDownloadV1* + +If you drilldown into the service and you check in the process group, you may have a PROD and a E2E for each service. + +*Note: if you see that both process group are exactly the same, please contact a Dynatrace expert to create a Process* +*Group detection rule* + +In the case the PG are PROD and E2E, then we need to create a rule that looks like this: + +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {Service:DetectedName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +- tag: Infotainment +- skipDeployment: false +``` + +The rule will get the Service Detected Name (current name) and it will extract (with a regex) the part of the kubernetes namespace after the "-", so -prod or -e2e, resulting in: +*DataDownloadV1 - prod* +*DataDownloadV1 - e2e* + +Now, services will be easy to identify. + +You can create rules based on any property/metadata. Some other placeholder's eamples: +{Service:DatabaseName} - E2E +{Service:WebServiceName} - {ProcessGroup:Kubernetes:microservice} - {ProcessGroup:Kubernetes:environment} +{Service:DetectedName} - {ProcessGroup:KubernetesContainerName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +{Service:DetectedName} - {ProcessGroup:SpringBootProfileName/[^\\-]*$} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_oas-composite-service/conditional-naming-service/conditional-naming-service.yaml b/BMW-Dynatrace-config/CD_oas-composite-service/conditional-naming-service/conditional-naming-service.yaml new file mode 100644 index 00000000..ee76d40c --- /dev/null +++ b/BMW-Dynatrace-config/CD_oas-composite-service/conditional-naming-service/conditional-naming-service.yaml @@ -0,0 +1,8 @@ +config: +- CDoas-composite-service: template.json + +CDoas-composite-service: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: oas-composite-service +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_oas-composite-service/conditional-naming-service/template.json b/BMW-Dynatrace-config/CD_oas-composite-service/conditional-naming-service/template.json new file mode 100644 index 00000000..5d4fac56 --- /dev/null +++ b/BMW-Dynatrace-config/CD_oas-composite-service/conditional-naming-service/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "type": "SERVICE" +} \ 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 index d41c4c77..5f35e5c1 100644 --- 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 @@ -1,30 +1,4 @@ -## 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 configure custom services? -## 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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Custom+Services) page to configure your custom services. \ 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 index 92e734fa..1695924c 100644 --- a/BMW-Dynatrace-config/CD_oas-composite-service/synthetic-monitor/README.md +++ b/BMW-Dynatrace-config/CD_oas-composite-service/synthetic-monitor/README.md @@ -1,37 +1,4 @@ -# Synthetic Configuration -To calculate the Availability KPI, a synthetic must be configured. +### How to configure synthetics? -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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Synthetic+Monitors) page to configure your synthetics. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_oclisc2v/conditional-naming-processgroup/README.md b/BMW-Dynatrace-config/CD_oclisc2v/conditional-naming-processgroup/README.md new file mode 100644 index 00000000..f94196a5 --- /dev/null +++ b/BMW-Dynatrace-config/CD_oclisc2v/conditional-naming-processgroup/README.md @@ -0,0 +1,67 @@ +### Process Group Detection Rules and Naming + +#### Detection Rule or Naming? + +For the explanation, we're using a real example of the Infotainment application: + +!(PGNaming1)[../../../../img/PGNaming1.PNG] + +Before working with your dashboards and alerting profiles, an important task to do when working with Dynatrace is checking +the structure of your applications (process groups). You can do that clicking under *technologies* and filter using your +application Management Zone. + +In the picture above, there are two Process Groups called bon-information-prod. **If you see duplicated process groups like in** +**this case, you MUST follow this guideline** + +Next step would be to open both process groups and compare the metadata. In that way, you can identify if all process instances are +part of the same application or not. An easy way to do that is asking yourself: how many instances of my application do i have? + +If you have 4 instances in total and you're able to see 2 in one PG and other 2 in other PG it means that **they are part of the ** +**same application** + +Another situation could be that checking on the metadata, then you see that are **two different application** and Dynatrace is just naming +the process group in the same way + +*Same application* +- Problem: Dynatrace is creating two different process groups, what transalates in two separated services for the same application. Instead of +seeing all the traffic in one service, you will have it splitted and it will complicate your monitoring +- Solution: create a process group detection rule. Contact Dynatrace Expert + +*Different application* +- Problem: Dynatrace is just naming in the same way applications that are different. +- Solution: This case is less severe, since it can be fixed with a process group naming rule. + + +What about our example? +!(PGNaming2)[../../../../img/PGNaming2.PNG] +!(PGNaming3)[../../../../img/PGNaming3.PNG] + +Based on the feedback of the infotaiment team, each process group is a different application (microservice) and it's visible in the kubernetes container/workload +within the metadata of each Process Group. + +#### How to create a Process Group Detection Rule +1. Open the *conditional-naming-processgroup.yaml* file and create a rule that looks like this: +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName} +- tag: Infotainment +- skipDeployment: false +``` +The result of the rule will be renaming the PG to this: +``` +bon-information-prod ipa +bon-information-prod rsl +``` + +Other possible placeholders that you can use are for example: +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName/[^\\-]*$} +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesFullPodName/buffet-(.*?)-} +{ProcessGroup:DetectedName} - {HostGroup:Name/[^\\_]*$} +{ProcessGroup:KubernetesNamespace} +{ProcessGroup:CommandLineArgs/.*?\\-f\\s\\/www\\/(.*?)\\/generated\\/httpd\\.conf.*?} + +You can combine different ones. Check the (documentation)[link] for more \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_oclisc2v/conditional-naming-processgroup/conditional-naming-processgroup.yaml b/BMW-Dynatrace-config/CD_oclisc2v/conditional-naming-processgroup/conditional-naming-processgroup.yaml new file mode 100644 index 00000000..feddd114 --- /dev/null +++ b/BMW-Dynatrace-config/CD_oclisc2v/conditional-naming-processgroup/conditional-naming-processgroup.yaml @@ -0,0 +1,8 @@ +config: +- CDoclisc2v: template.json + +CDoclisc2v: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: oclisc2v +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_oclisc2v/conditional-naming-processgroup/template.json b/BMW-Dynatrace-config/CD_oclisc2v/conditional-naming-processgroup/template.json new file mode 100644 index 00000000..7c039808 --- /dev/null +++ b/BMW-Dynatrace-config/CD_oclisc2v/conditional-naming-processgroup/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "type": "PROCESS_GROUP" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_oclisc2v/conditional-naming-service/README.md b/BMW-Dynatrace-config/CD_oclisc2v/conditional-naming-service/README.md new file mode 100644 index 00000000..c34ef308 --- /dev/null +++ b/BMW-Dynatrace-config/CD_oclisc2v/conditional-naming-service/README.md @@ -0,0 +1,35 @@ +### Service Naming Rules + +A typical case could be that you access to *Transaction & Services* and you find two services that are exactly the same: +*DataDownloadV1* +*DataDownloadV1* + +If you drilldown into the service and you check in the process group, you may have a PROD and a E2E for each service. + +*Note: if you see that both process group are exactly the same, please contact a Dynatrace expert to create a Process* +*Group detection rule* + +In the case the PG are PROD and E2E, then we need to create a rule that looks like this: + +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {Service:DetectedName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +- tag: Infotainment +- skipDeployment: false +``` + +The rule will get the Service Detected Name (current name) and it will extract (with a regex) the part of the kubernetes namespace after the "-", so -prod or -e2e, resulting in: +*DataDownloadV1 - prod* +*DataDownloadV1 - e2e* + +Now, services will be easy to identify. + +You can create rules based on any property/metadata. Some other placeholder's eamples: +{Service:DatabaseName} - E2E +{Service:WebServiceName} - {ProcessGroup:Kubernetes:microservice} - {ProcessGroup:Kubernetes:environment} +{Service:DetectedName} - {ProcessGroup:KubernetesContainerName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +{Service:DetectedName} - {ProcessGroup:SpringBootProfileName/[^\\-]*$} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_oclisc2v/conditional-naming-service/conditional-naming-service.yaml b/BMW-Dynatrace-config/CD_oclisc2v/conditional-naming-service/conditional-naming-service.yaml new file mode 100644 index 00000000..feddd114 --- /dev/null +++ b/BMW-Dynatrace-config/CD_oclisc2v/conditional-naming-service/conditional-naming-service.yaml @@ -0,0 +1,8 @@ +config: +- CDoclisc2v: template.json + +CDoclisc2v: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: oclisc2v +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_oclisc2v/conditional-naming-service/template.json b/BMW-Dynatrace-config/CD_oclisc2v/conditional-naming-service/template.json new file mode 100644 index 00000000..5d4fac56 --- /dev/null +++ b/BMW-Dynatrace-config/CD_oclisc2v/conditional-naming-service/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "type": "SERVICE" +} \ 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 index d41c4c77..5f35e5c1 100644 --- a/BMW-Dynatrace-config/CD_oclisc2v/custom-service-java/README.md +++ b/BMW-Dynatrace-config/CD_oclisc2v/custom-service-java/README.md @@ -1,30 +1,4 @@ -## 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 configure custom services? -## 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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Custom+Services) page to configure your custom services. \ 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 index 92e734fa..1695924c 100644 --- a/BMW-Dynatrace-config/CD_oclisc2v/synthetic-monitor/README.md +++ b/BMW-Dynatrace-config/CD_oclisc2v/synthetic-monitor/README.md @@ -1,37 +1,4 @@ -# Synthetic Configuration -To calculate the Availability KPI, a synthetic must be configured. +### How to configure synthetics? -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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Synthetic+Monitors) page to configure your synthetics. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_oclisocsp/conditional-naming-processgroup/README.md b/BMW-Dynatrace-config/CD_oclisocsp/conditional-naming-processgroup/README.md new file mode 100644 index 00000000..f94196a5 --- /dev/null +++ b/BMW-Dynatrace-config/CD_oclisocsp/conditional-naming-processgroup/README.md @@ -0,0 +1,67 @@ +### Process Group Detection Rules and Naming + +#### Detection Rule or Naming? + +For the explanation, we're using a real example of the Infotainment application: + +!(PGNaming1)[../../../../img/PGNaming1.PNG] + +Before working with your dashboards and alerting profiles, an important task to do when working with Dynatrace is checking +the structure of your applications (process groups). You can do that clicking under *technologies* and filter using your +application Management Zone. + +In the picture above, there are two Process Groups called bon-information-prod. **If you see duplicated process groups like in** +**this case, you MUST follow this guideline** + +Next step would be to open both process groups and compare the metadata. In that way, you can identify if all process instances are +part of the same application or not. An easy way to do that is asking yourself: how many instances of my application do i have? + +If you have 4 instances in total and you're able to see 2 in one PG and other 2 in other PG it means that **they are part of the ** +**same application** + +Another situation could be that checking on the metadata, then you see that are **two different application** and Dynatrace is just naming +the process group in the same way + +*Same application* +- Problem: Dynatrace is creating two different process groups, what transalates in two separated services for the same application. Instead of +seeing all the traffic in one service, you will have it splitted and it will complicate your monitoring +- Solution: create a process group detection rule. Contact Dynatrace Expert + +*Different application* +- Problem: Dynatrace is just naming in the same way applications that are different. +- Solution: This case is less severe, since it can be fixed with a process group naming rule. + + +What about our example? +!(PGNaming2)[../../../../img/PGNaming2.PNG] +!(PGNaming3)[../../../../img/PGNaming3.PNG] + +Based on the feedback of the infotaiment team, each process group is a different application (microservice) and it's visible in the kubernetes container/workload +within the metadata of each Process Group. + +#### How to create a Process Group Detection Rule +1. Open the *conditional-naming-processgroup.yaml* file and create a rule that looks like this: +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName} +- tag: Infotainment +- skipDeployment: false +``` +The result of the rule will be renaming the PG to this: +``` +bon-information-prod ipa +bon-information-prod rsl +``` + +Other possible placeholders that you can use are for example: +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName/[^\\-]*$} +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesFullPodName/buffet-(.*?)-} +{ProcessGroup:DetectedName} - {HostGroup:Name/[^\\_]*$} +{ProcessGroup:KubernetesNamespace} +{ProcessGroup:CommandLineArgs/.*?\\-f\\s\\/www\\/(.*?)\\/generated\\/httpd\\.conf.*?} + +You can combine different ones. Check the (documentation)[link] for more \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_oclisocsp/conditional-naming-processgroup/conditional-naming-processgroup.yaml b/BMW-Dynatrace-config/CD_oclisocsp/conditional-naming-processgroup/conditional-naming-processgroup.yaml new file mode 100644 index 00000000..38a5b8e9 --- /dev/null +++ b/BMW-Dynatrace-config/CD_oclisocsp/conditional-naming-processgroup/conditional-naming-processgroup.yaml @@ -0,0 +1,8 @@ +config: +- CDoclisocsp: template.json + +CDoclisocsp: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: oclisocsp +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_oclisocsp/conditional-naming-processgroup/template.json b/BMW-Dynatrace-config/CD_oclisocsp/conditional-naming-processgroup/template.json new file mode 100644 index 00000000..7c039808 --- /dev/null +++ b/BMW-Dynatrace-config/CD_oclisocsp/conditional-naming-processgroup/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "type": "PROCESS_GROUP" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_oclisocsp/conditional-naming-service/README.md b/BMW-Dynatrace-config/CD_oclisocsp/conditional-naming-service/README.md new file mode 100644 index 00000000..c34ef308 --- /dev/null +++ b/BMW-Dynatrace-config/CD_oclisocsp/conditional-naming-service/README.md @@ -0,0 +1,35 @@ +### Service Naming Rules + +A typical case could be that you access to *Transaction & Services* and you find two services that are exactly the same: +*DataDownloadV1* +*DataDownloadV1* + +If you drilldown into the service and you check in the process group, you may have a PROD and a E2E for each service. + +*Note: if you see that both process group are exactly the same, please contact a Dynatrace expert to create a Process* +*Group detection rule* + +In the case the PG are PROD and E2E, then we need to create a rule that looks like this: + +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {Service:DetectedName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +- tag: Infotainment +- skipDeployment: false +``` + +The rule will get the Service Detected Name (current name) and it will extract (with a regex) the part of the kubernetes namespace after the "-", so -prod or -e2e, resulting in: +*DataDownloadV1 - prod* +*DataDownloadV1 - e2e* + +Now, services will be easy to identify. + +You can create rules based on any property/metadata. Some other placeholder's eamples: +{Service:DatabaseName} - E2E +{Service:WebServiceName} - {ProcessGroup:Kubernetes:microservice} - {ProcessGroup:Kubernetes:environment} +{Service:DetectedName} - {ProcessGroup:KubernetesContainerName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +{Service:DetectedName} - {ProcessGroup:SpringBootProfileName/[^\\-]*$} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_oclisocsp/conditional-naming-service/conditional-naming-service.yaml b/BMW-Dynatrace-config/CD_oclisocsp/conditional-naming-service/conditional-naming-service.yaml new file mode 100644 index 00000000..38a5b8e9 --- /dev/null +++ b/BMW-Dynatrace-config/CD_oclisocsp/conditional-naming-service/conditional-naming-service.yaml @@ -0,0 +1,8 @@ +config: +- CDoclisocsp: template.json + +CDoclisocsp: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: oclisocsp +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_oclisocsp/conditional-naming-service/template.json b/BMW-Dynatrace-config/CD_oclisocsp/conditional-naming-service/template.json new file mode 100644 index 00000000..5d4fac56 --- /dev/null +++ b/BMW-Dynatrace-config/CD_oclisocsp/conditional-naming-service/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "type": "SERVICE" +} \ 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 index d41c4c77..5f35e5c1 100644 --- a/BMW-Dynatrace-config/CD_oclisocsp/custom-service-java/README.md +++ b/BMW-Dynatrace-config/CD_oclisocsp/custom-service-java/README.md @@ -1,30 +1,4 @@ -## 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 configure custom services? -## 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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Custom+Services) page to configure your custom services. \ 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 index 92e734fa..1695924c 100644 --- a/BMW-Dynatrace-config/CD_oclisocsp/synthetic-monitor/README.md +++ b/BMW-Dynatrace-config/CD_oclisocsp/synthetic-monitor/README.md @@ -1,37 +1,4 @@ -# Synthetic Configuration -To calculate the Availability KPI, a synthetic must be configured. +### How to configure synthetics? -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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Synthetic+Monitors) page to configure your synthetics. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_omc-cd-services/conditional-naming-processgroup/README.md b/BMW-Dynatrace-config/CD_omc-cd-services/conditional-naming-processgroup/README.md new file mode 100644 index 00000000..f94196a5 --- /dev/null +++ b/BMW-Dynatrace-config/CD_omc-cd-services/conditional-naming-processgroup/README.md @@ -0,0 +1,67 @@ +### Process Group Detection Rules and Naming + +#### Detection Rule or Naming? + +For the explanation, we're using a real example of the Infotainment application: + +!(PGNaming1)[../../../../img/PGNaming1.PNG] + +Before working with your dashboards and alerting profiles, an important task to do when working with Dynatrace is checking +the structure of your applications (process groups). You can do that clicking under *technologies* and filter using your +application Management Zone. + +In the picture above, there are two Process Groups called bon-information-prod. **If you see duplicated process groups like in** +**this case, you MUST follow this guideline** + +Next step would be to open both process groups and compare the metadata. In that way, you can identify if all process instances are +part of the same application or not. An easy way to do that is asking yourself: how many instances of my application do i have? + +If you have 4 instances in total and you're able to see 2 in one PG and other 2 in other PG it means that **they are part of the ** +**same application** + +Another situation could be that checking on the metadata, then you see that are **two different application** and Dynatrace is just naming +the process group in the same way + +*Same application* +- Problem: Dynatrace is creating two different process groups, what transalates in two separated services for the same application. Instead of +seeing all the traffic in one service, you will have it splitted and it will complicate your monitoring +- Solution: create a process group detection rule. Contact Dynatrace Expert + +*Different application* +- Problem: Dynatrace is just naming in the same way applications that are different. +- Solution: This case is less severe, since it can be fixed with a process group naming rule. + + +What about our example? +!(PGNaming2)[../../../../img/PGNaming2.PNG] +!(PGNaming3)[../../../../img/PGNaming3.PNG] + +Based on the feedback of the infotaiment team, each process group is a different application (microservice) and it's visible in the kubernetes container/workload +within the metadata of each Process Group. + +#### How to create a Process Group Detection Rule +1. Open the *conditional-naming-processgroup.yaml* file and create a rule that looks like this: +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName} +- tag: Infotainment +- skipDeployment: false +``` +The result of the rule will be renaming the PG to this: +``` +bon-information-prod ipa +bon-information-prod rsl +``` + +Other possible placeholders that you can use are for example: +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName/[^\\-]*$} +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesFullPodName/buffet-(.*?)-} +{ProcessGroup:DetectedName} - {HostGroup:Name/[^\\_]*$} +{ProcessGroup:KubernetesNamespace} +{ProcessGroup:CommandLineArgs/.*?\\-f\\s\\/www\\/(.*?)\\/generated\\/httpd\\.conf.*?} + +You can combine different ones. Check the (documentation)[link] for more \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_omc-cd-services/conditional-naming-processgroup/conditional-naming-processgroup.yaml b/BMW-Dynatrace-config/CD_omc-cd-services/conditional-naming-processgroup/conditional-naming-processgroup.yaml new file mode 100644 index 00000000..2d855928 --- /dev/null +++ b/BMW-Dynatrace-config/CD_omc-cd-services/conditional-naming-processgroup/conditional-naming-processgroup.yaml @@ -0,0 +1,8 @@ +config: +- CDomc-cd-services: template.json + +CDomc-cd-services: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: omc-cd-services +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_omc-cd-services/conditional-naming-processgroup/template.json b/BMW-Dynatrace-config/CD_omc-cd-services/conditional-naming-processgroup/template.json new file mode 100644 index 00000000..7c039808 --- /dev/null +++ b/BMW-Dynatrace-config/CD_omc-cd-services/conditional-naming-processgroup/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "type": "PROCESS_GROUP" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_omc-cd-services/conditional-naming-service/README.md b/BMW-Dynatrace-config/CD_omc-cd-services/conditional-naming-service/README.md new file mode 100644 index 00000000..c34ef308 --- /dev/null +++ b/BMW-Dynatrace-config/CD_omc-cd-services/conditional-naming-service/README.md @@ -0,0 +1,35 @@ +### Service Naming Rules + +A typical case could be that you access to *Transaction & Services* and you find two services that are exactly the same: +*DataDownloadV1* +*DataDownloadV1* + +If you drilldown into the service and you check in the process group, you may have a PROD and a E2E for each service. + +*Note: if you see that both process group are exactly the same, please contact a Dynatrace expert to create a Process* +*Group detection rule* + +In the case the PG are PROD and E2E, then we need to create a rule that looks like this: + +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {Service:DetectedName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +- tag: Infotainment +- skipDeployment: false +``` + +The rule will get the Service Detected Name (current name) and it will extract (with a regex) the part of the kubernetes namespace after the "-", so -prod or -e2e, resulting in: +*DataDownloadV1 - prod* +*DataDownloadV1 - e2e* + +Now, services will be easy to identify. + +You can create rules based on any property/metadata. Some other placeholder's eamples: +{Service:DatabaseName} - E2E +{Service:WebServiceName} - {ProcessGroup:Kubernetes:microservice} - {ProcessGroup:Kubernetes:environment} +{Service:DetectedName} - {ProcessGroup:KubernetesContainerName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +{Service:DetectedName} - {ProcessGroup:SpringBootProfileName/[^\\-]*$} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_omc-cd-services/conditional-naming-service/conditional-naming-service.yaml b/BMW-Dynatrace-config/CD_omc-cd-services/conditional-naming-service/conditional-naming-service.yaml new file mode 100644 index 00000000..2d855928 --- /dev/null +++ b/BMW-Dynatrace-config/CD_omc-cd-services/conditional-naming-service/conditional-naming-service.yaml @@ -0,0 +1,8 @@ +config: +- CDomc-cd-services: template.json + +CDomc-cd-services: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: omc-cd-services +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_omc-cd-services/conditional-naming-service/template.json b/BMW-Dynatrace-config/CD_omc-cd-services/conditional-naming-service/template.json new file mode 100644 index 00000000..5d4fac56 --- /dev/null +++ b/BMW-Dynatrace-config/CD_omc-cd-services/conditional-naming-service/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "type": "SERVICE" +} \ 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 index d41c4c77..5f35e5c1 100644 --- 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 @@ -1,30 +1,4 @@ -## 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 configure custom services? -## 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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Custom+Services) page to configure your custom services. \ 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 index 92e734fa..1695924c 100644 --- a/BMW-Dynatrace-config/CD_omc-cd-services/synthetic-monitor/README.md +++ b/BMW-Dynatrace-config/CD_omc-cd-services/synthetic-monitor/README.md @@ -1,37 +1,4 @@ -# Synthetic Configuration -To calculate the Availability KPI, a synthetic must be configured. +### How to configure synthetics? -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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Synthetic+Monitors) page to configure your synthetics. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_omg/conditional-naming-processgroup/README.md b/BMW-Dynatrace-config/CD_omg/conditional-naming-processgroup/README.md new file mode 100644 index 00000000..f94196a5 --- /dev/null +++ b/BMW-Dynatrace-config/CD_omg/conditional-naming-processgroup/README.md @@ -0,0 +1,67 @@ +### Process Group Detection Rules and Naming + +#### Detection Rule or Naming? + +For the explanation, we're using a real example of the Infotainment application: + +!(PGNaming1)[../../../../img/PGNaming1.PNG] + +Before working with your dashboards and alerting profiles, an important task to do when working with Dynatrace is checking +the structure of your applications (process groups). You can do that clicking under *technologies* and filter using your +application Management Zone. + +In the picture above, there are two Process Groups called bon-information-prod. **If you see duplicated process groups like in** +**this case, you MUST follow this guideline** + +Next step would be to open both process groups and compare the metadata. In that way, you can identify if all process instances are +part of the same application or not. An easy way to do that is asking yourself: how many instances of my application do i have? + +If you have 4 instances in total and you're able to see 2 in one PG and other 2 in other PG it means that **they are part of the ** +**same application** + +Another situation could be that checking on the metadata, then you see that are **two different application** and Dynatrace is just naming +the process group in the same way + +*Same application* +- Problem: Dynatrace is creating two different process groups, what transalates in two separated services for the same application. Instead of +seeing all the traffic in one service, you will have it splitted and it will complicate your monitoring +- Solution: create a process group detection rule. Contact Dynatrace Expert + +*Different application* +- Problem: Dynatrace is just naming in the same way applications that are different. +- Solution: This case is less severe, since it can be fixed with a process group naming rule. + + +What about our example? +!(PGNaming2)[../../../../img/PGNaming2.PNG] +!(PGNaming3)[../../../../img/PGNaming3.PNG] + +Based on the feedback of the infotaiment team, each process group is a different application (microservice) and it's visible in the kubernetes container/workload +within the metadata of each Process Group. + +#### How to create a Process Group Detection Rule +1. Open the *conditional-naming-processgroup.yaml* file and create a rule that looks like this: +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName} +- tag: Infotainment +- skipDeployment: false +``` +The result of the rule will be renaming the PG to this: +``` +bon-information-prod ipa +bon-information-prod rsl +``` + +Other possible placeholders that you can use are for example: +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName/[^\\-]*$} +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesFullPodName/buffet-(.*?)-} +{ProcessGroup:DetectedName} - {HostGroup:Name/[^\\_]*$} +{ProcessGroup:KubernetesNamespace} +{ProcessGroup:CommandLineArgs/.*?\\-f\\s\\/www\\/(.*?)\\/generated\\/httpd\\.conf.*?} + +You can combine different ones. Check the (documentation)[link] for more \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_omg/conditional-naming-processgroup/conditional-naming-processgroup.yaml b/BMW-Dynatrace-config/CD_omg/conditional-naming-processgroup/conditional-naming-processgroup.yaml new file mode 100644 index 00000000..62435cd8 --- /dev/null +++ b/BMW-Dynatrace-config/CD_omg/conditional-naming-processgroup/conditional-naming-processgroup.yaml @@ -0,0 +1,8 @@ +config: +- CDomg: template.json + +CDomg: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: omg +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_omg/conditional-naming-processgroup/template.json b/BMW-Dynatrace-config/CD_omg/conditional-naming-processgroup/template.json new file mode 100644 index 00000000..7c039808 --- /dev/null +++ b/BMW-Dynatrace-config/CD_omg/conditional-naming-processgroup/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "type": "PROCESS_GROUP" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_omg/conditional-naming-service/README.md b/BMW-Dynatrace-config/CD_omg/conditional-naming-service/README.md new file mode 100644 index 00000000..c34ef308 --- /dev/null +++ b/BMW-Dynatrace-config/CD_omg/conditional-naming-service/README.md @@ -0,0 +1,35 @@ +### Service Naming Rules + +A typical case could be that you access to *Transaction & Services* and you find two services that are exactly the same: +*DataDownloadV1* +*DataDownloadV1* + +If you drilldown into the service and you check in the process group, you may have a PROD and a E2E for each service. + +*Note: if you see that both process group are exactly the same, please contact a Dynatrace expert to create a Process* +*Group detection rule* + +In the case the PG are PROD and E2E, then we need to create a rule that looks like this: + +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {Service:DetectedName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +- tag: Infotainment +- skipDeployment: false +``` + +The rule will get the Service Detected Name (current name) and it will extract (with a regex) the part of the kubernetes namespace after the "-", so -prod or -e2e, resulting in: +*DataDownloadV1 - prod* +*DataDownloadV1 - e2e* + +Now, services will be easy to identify. + +You can create rules based on any property/metadata. Some other placeholder's eamples: +{Service:DatabaseName} - E2E +{Service:WebServiceName} - {ProcessGroup:Kubernetes:microservice} - {ProcessGroup:Kubernetes:environment} +{Service:DetectedName} - {ProcessGroup:KubernetesContainerName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +{Service:DetectedName} - {ProcessGroup:SpringBootProfileName/[^\\-]*$} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_omg/conditional-naming-service/conditional-naming-service.yaml b/BMW-Dynatrace-config/CD_omg/conditional-naming-service/conditional-naming-service.yaml new file mode 100644 index 00000000..62435cd8 --- /dev/null +++ b/BMW-Dynatrace-config/CD_omg/conditional-naming-service/conditional-naming-service.yaml @@ -0,0 +1,8 @@ +config: +- CDomg: template.json + +CDomg: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: omg +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_omg/conditional-naming-service/template.json b/BMW-Dynatrace-config/CD_omg/conditional-naming-service/template.json new file mode 100644 index 00000000..5d4fac56 --- /dev/null +++ b/BMW-Dynatrace-config/CD_omg/conditional-naming-service/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "type": "SERVICE" +} \ 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 index d41c4c77..5f35e5c1 100644 --- a/BMW-Dynatrace-config/CD_omg/custom-service-java/README.md +++ b/BMW-Dynatrace-config/CD_omg/custom-service-java/README.md @@ -1,30 +1,4 @@ -## 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 configure custom services? -## 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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Custom+Services) page to configure your custom services. \ 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 index 92e734fa..1695924c 100644 --- a/BMW-Dynatrace-config/CD_omg/synthetic-monitor/README.md +++ b/BMW-Dynatrace-config/CD_omg/synthetic-monitor/README.md @@ -1,37 +1,4 @@ -# Synthetic Configuration -To calculate the Availability KPI, a synthetic must be configured. +### How to configure synthetics? -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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Synthetic+Monitors) page to configure your synthetics. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_onboard-navigation-sync-service/conditional-naming-processgroup/README.md b/BMW-Dynatrace-config/CD_onboard-navigation-sync-service/conditional-naming-processgroup/README.md new file mode 100644 index 00000000..f94196a5 --- /dev/null +++ b/BMW-Dynatrace-config/CD_onboard-navigation-sync-service/conditional-naming-processgroup/README.md @@ -0,0 +1,67 @@ +### Process Group Detection Rules and Naming + +#### Detection Rule or Naming? + +For the explanation, we're using a real example of the Infotainment application: + +!(PGNaming1)[../../../../img/PGNaming1.PNG] + +Before working with your dashboards and alerting profiles, an important task to do when working with Dynatrace is checking +the structure of your applications (process groups). You can do that clicking under *technologies* and filter using your +application Management Zone. + +In the picture above, there are two Process Groups called bon-information-prod. **If you see duplicated process groups like in** +**this case, you MUST follow this guideline** + +Next step would be to open both process groups and compare the metadata. In that way, you can identify if all process instances are +part of the same application or not. An easy way to do that is asking yourself: how many instances of my application do i have? + +If you have 4 instances in total and you're able to see 2 in one PG and other 2 in other PG it means that **they are part of the ** +**same application** + +Another situation could be that checking on the metadata, then you see that are **two different application** and Dynatrace is just naming +the process group in the same way + +*Same application* +- Problem: Dynatrace is creating two different process groups, what transalates in two separated services for the same application. Instead of +seeing all the traffic in one service, you will have it splitted and it will complicate your monitoring +- Solution: create a process group detection rule. Contact Dynatrace Expert + +*Different application* +- Problem: Dynatrace is just naming in the same way applications that are different. +- Solution: This case is less severe, since it can be fixed with a process group naming rule. + + +What about our example? +!(PGNaming2)[../../../../img/PGNaming2.PNG] +!(PGNaming3)[../../../../img/PGNaming3.PNG] + +Based on the feedback of the infotaiment team, each process group is a different application (microservice) and it's visible in the kubernetes container/workload +within the metadata of each Process Group. + +#### How to create a Process Group Detection Rule +1. Open the *conditional-naming-processgroup.yaml* file and create a rule that looks like this: +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName} +- tag: Infotainment +- skipDeployment: false +``` +The result of the rule will be renaming the PG to this: +``` +bon-information-prod ipa +bon-information-prod rsl +``` + +Other possible placeholders that you can use are for example: +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName/[^\\-]*$} +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesFullPodName/buffet-(.*?)-} +{ProcessGroup:DetectedName} - {HostGroup:Name/[^\\_]*$} +{ProcessGroup:KubernetesNamespace} +{ProcessGroup:CommandLineArgs/.*?\\-f\\s\\/www\\/(.*?)\\/generated\\/httpd\\.conf.*?} + +You can combine different ones. Check the (documentation)[link] for more \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_onboard-navigation-sync-service/conditional-naming-processgroup/conditional-naming-processgroup.yaml b/BMW-Dynatrace-config/CD_onboard-navigation-sync-service/conditional-naming-processgroup/conditional-naming-processgroup.yaml new file mode 100644 index 00000000..bbfc210c --- /dev/null +++ b/BMW-Dynatrace-config/CD_onboard-navigation-sync-service/conditional-naming-processgroup/conditional-naming-processgroup.yaml @@ -0,0 +1,8 @@ +config: +- CDonboard-navigation-sync-service: template.json + +CDonboard-navigation-sync-service: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: onboard-navigation-sync-service +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_onboard-navigation-sync-service/conditional-naming-processgroup/template.json b/BMW-Dynatrace-config/CD_onboard-navigation-sync-service/conditional-naming-processgroup/template.json new file mode 100644 index 00000000..7c039808 --- /dev/null +++ b/BMW-Dynatrace-config/CD_onboard-navigation-sync-service/conditional-naming-processgroup/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "type": "PROCESS_GROUP" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_onboard-navigation-sync-service/conditional-naming-service/README.md b/BMW-Dynatrace-config/CD_onboard-navigation-sync-service/conditional-naming-service/README.md new file mode 100644 index 00000000..c34ef308 --- /dev/null +++ b/BMW-Dynatrace-config/CD_onboard-navigation-sync-service/conditional-naming-service/README.md @@ -0,0 +1,35 @@ +### Service Naming Rules + +A typical case could be that you access to *Transaction & Services* and you find two services that are exactly the same: +*DataDownloadV1* +*DataDownloadV1* + +If you drilldown into the service and you check in the process group, you may have a PROD and a E2E for each service. + +*Note: if you see that both process group are exactly the same, please contact a Dynatrace expert to create a Process* +*Group detection rule* + +In the case the PG are PROD and E2E, then we need to create a rule that looks like this: + +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {Service:DetectedName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +- tag: Infotainment +- skipDeployment: false +``` + +The rule will get the Service Detected Name (current name) and it will extract (with a regex) the part of the kubernetes namespace after the "-", so -prod or -e2e, resulting in: +*DataDownloadV1 - prod* +*DataDownloadV1 - e2e* + +Now, services will be easy to identify. + +You can create rules based on any property/metadata. Some other placeholder's eamples: +{Service:DatabaseName} - E2E +{Service:WebServiceName} - {ProcessGroup:Kubernetes:microservice} - {ProcessGroup:Kubernetes:environment} +{Service:DetectedName} - {ProcessGroup:KubernetesContainerName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +{Service:DetectedName} - {ProcessGroup:SpringBootProfileName/[^\\-]*$} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_onboard-navigation-sync-service/conditional-naming-service/conditional-naming-service.yaml b/BMW-Dynatrace-config/CD_onboard-navigation-sync-service/conditional-naming-service/conditional-naming-service.yaml new file mode 100644 index 00000000..bbfc210c --- /dev/null +++ b/BMW-Dynatrace-config/CD_onboard-navigation-sync-service/conditional-naming-service/conditional-naming-service.yaml @@ -0,0 +1,8 @@ +config: +- CDonboard-navigation-sync-service: template.json + +CDonboard-navigation-sync-service: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: onboard-navigation-sync-service +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_onboard-navigation-sync-service/conditional-naming-service/template.json b/BMW-Dynatrace-config/CD_onboard-navigation-sync-service/conditional-naming-service/template.json new file mode 100644 index 00000000..5d4fac56 --- /dev/null +++ b/BMW-Dynatrace-config/CD_onboard-navigation-sync-service/conditional-naming-service/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "type": "SERVICE" +} \ 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 index d41c4c77..5f35e5c1 100644 --- 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 @@ -1,30 +1,4 @@ -## 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 configure custom services? -## 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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Custom+Services) page to configure your custom services. \ 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 index 92e734fa..1695924c 100644 --- 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 @@ -1,37 +1,4 @@ -# Synthetic Configuration -To calculate the Availability KPI, a synthetic must be configured. +### How to configure synthetics? -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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Synthetic+Monitors) page to configure your synthetics. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_online-appointment-service/conditional-naming-processgroup/README.md b/BMW-Dynatrace-config/CD_online-appointment-service/conditional-naming-processgroup/README.md new file mode 100644 index 00000000..f94196a5 --- /dev/null +++ b/BMW-Dynatrace-config/CD_online-appointment-service/conditional-naming-processgroup/README.md @@ -0,0 +1,67 @@ +### Process Group Detection Rules and Naming + +#### Detection Rule or Naming? + +For the explanation, we're using a real example of the Infotainment application: + +!(PGNaming1)[../../../../img/PGNaming1.PNG] + +Before working with your dashboards and alerting profiles, an important task to do when working with Dynatrace is checking +the structure of your applications (process groups). You can do that clicking under *technologies* and filter using your +application Management Zone. + +In the picture above, there are two Process Groups called bon-information-prod. **If you see duplicated process groups like in** +**this case, you MUST follow this guideline** + +Next step would be to open both process groups and compare the metadata. In that way, you can identify if all process instances are +part of the same application or not. An easy way to do that is asking yourself: how many instances of my application do i have? + +If you have 4 instances in total and you're able to see 2 in one PG and other 2 in other PG it means that **they are part of the ** +**same application** + +Another situation could be that checking on the metadata, then you see that are **two different application** and Dynatrace is just naming +the process group in the same way + +*Same application* +- Problem: Dynatrace is creating two different process groups, what transalates in two separated services for the same application. Instead of +seeing all the traffic in one service, you will have it splitted and it will complicate your monitoring +- Solution: create a process group detection rule. Contact Dynatrace Expert + +*Different application* +- Problem: Dynatrace is just naming in the same way applications that are different. +- Solution: This case is less severe, since it can be fixed with a process group naming rule. + + +What about our example? +!(PGNaming2)[../../../../img/PGNaming2.PNG] +!(PGNaming3)[../../../../img/PGNaming3.PNG] + +Based on the feedback of the infotaiment team, each process group is a different application (microservice) and it's visible in the kubernetes container/workload +within the metadata of each Process Group. + +#### How to create a Process Group Detection Rule +1. Open the *conditional-naming-processgroup.yaml* file and create a rule that looks like this: +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName} +- tag: Infotainment +- skipDeployment: false +``` +The result of the rule will be renaming the PG to this: +``` +bon-information-prod ipa +bon-information-prod rsl +``` + +Other possible placeholders that you can use are for example: +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName/[^\\-]*$} +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesFullPodName/buffet-(.*?)-} +{ProcessGroup:DetectedName} - {HostGroup:Name/[^\\_]*$} +{ProcessGroup:KubernetesNamespace} +{ProcessGroup:CommandLineArgs/.*?\\-f\\s\\/www\\/(.*?)\\/generated\\/httpd\\.conf.*?} + +You can combine different ones. Check the (documentation)[link] for more \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_online-appointment-service/conditional-naming-processgroup/conditional-naming-processgroup.yaml b/BMW-Dynatrace-config/CD_online-appointment-service/conditional-naming-processgroup/conditional-naming-processgroup.yaml new file mode 100644 index 00000000..2d4648e6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_online-appointment-service/conditional-naming-processgroup/conditional-naming-processgroup.yaml @@ -0,0 +1,8 @@ +config: +- CDonline-appointment-service: template.json + +CDonline-appointment-service: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: online-appointment-service +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_online-appointment-service/conditional-naming-processgroup/template.json b/BMW-Dynatrace-config/CD_online-appointment-service/conditional-naming-processgroup/template.json new file mode 100644 index 00000000..7c039808 --- /dev/null +++ b/BMW-Dynatrace-config/CD_online-appointment-service/conditional-naming-processgroup/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "type": "PROCESS_GROUP" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_online-appointment-service/conditional-naming-service/README.md b/BMW-Dynatrace-config/CD_online-appointment-service/conditional-naming-service/README.md new file mode 100644 index 00000000..c34ef308 --- /dev/null +++ b/BMW-Dynatrace-config/CD_online-appointment-service/conditional-naming-service/README.md @@ -0,0 +1,35 @@ +### Service Naming Rules + +A typical case could be that you access to *Transaction & Services* and you find two services that are exactly the same: +*DataDownloadV1* +*DataDownloadV1* + +If you drilldown into the service and you check in the process group, you may have a PROD and a E2E for each service. + +*Note: if you see that both process group are exactly the same, please contact a Dynatrace expert to create a Process* +*Group detection rule* + +In the case the PG are PROD and E2E, then we need to create a rule that looks like this: + +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {Service:DetectedName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +- tag: Infotainment +- skipDeployment: false +``` + +The rule will get the Service Detected Name (current name) and it will extract (with a regex) the part of the kubernetes namespace after the "-", so -prod or -e2e, resulting in: +*DataDownloadV1 - prod* +*DataDownloadV1 - e2e* + +Now, services will be easy to identify. + +You can create rules based on any property/metadata. Some other placeholder's eamples: +{Service:DatabaseName} - E2E +{Service:WebServiceName} - {ProcessGroup:Kubernetes:microservice} - {ProcessGroup:Kubernetes:environment} +{Service:DetectedName} - {ProcessGroup:KubernetesContainerName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +{Service:DetectedName} - {ProcessGroup:SpringBootProfileName/[^\\-]*$} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_online-appointment-service/conditional-naming-service/conditional-naming-service.yaml b/BMW-Dynatrace-config/CD_online-appointment-service/conditional-naming-service/conditional-naming-service.yaml new file mode 100644 index 00000000..2d4648e6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_online-appointment-service/conditional-naming-service/conditional-naming-service.yaml @@ -0,0 +1,8 @@ +config: +- CDonline-appointment-service: template.json + +CDonline-appointment-service: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: online-appointment-service +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_online-appointment-service/conditional-naming-service/template.json b/BMW-Dynatrace-config/CD_online-appointment-service/conditional-naming-service/template.json new file mode 100644 index 00000000..5d4fac56 --- /dev/null +++ b/BMW-Dynatrace-config/CD_online-appointment-service/conditional-naming-service/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "type": "SERVICE" +} \ 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 index d41c4c77..5f35e5c1 100644 --- 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 @@ -1,30 +1,4 @@ -## 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 configure custom services? -## 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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Custom+Services) page to configure your custom services. \ 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 index 92e734fa..1695924c 100644 --- a/BMW-Dynatrace-config/CD_online-appointment-service/synthetic-monitor/README.md +++ b/BMW-Dynatrace-config/CD_online-appointment-service/synthetic-monitor/README.md @@ -1,37 +1,4 @@ -# Synthetic Configuration -To calculate the Availability KPI, a synthetic must be configured. +### How to configure synthetics? -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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Synthetic+Monitors) page to configure your synthetics. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_online-entertainment/conditional-naming-processgroup/README.md b/BMW-Dynatrace-config/CD_online-entertainment/conditional-naming-processgroup/README.md new file mode 100644 index 00000000..f94196a5 --- /dev/null +++ b/BMW-Dynatrace-config/CD_online-entertainment/conditional-naming-processgroup/README.md @@ -0,0 +1,67 @@ +### Process Group Detection Rules and Naming + +#### Detection Rule or Naming? + +For the explanation, we're using a real example of the Infotainment application: + +!(PGNaming1)[../../../../img/PGNaming1.PNG] + +Before working with your dashboards and alerting profiles, an important task to do when working with Dynatrace is checking +the structure of your applications (process groups). You can do that clicking under *technologies* and filter using your +application Management Zone. + +In the picture above, there are two Process Groups called bon-information-prod. **If you see duplicated process groups like in** +**this case, you MUST follow this guideline** + +Next step would be to open both process groups and compare the metadata. In that way, you can identify if all process instances are +part of the same application or not. An easy way to do that is asking yourself: how many instances of my application do i have? + +If you have 4 instances in total and you're able to see 2 in one PG and other 2 in other PG it means that **they are part of the ** +**same application** + +Another situation could be that checking on the metadata, then you see that are **two different application** and Dynatrace is just naming +the process group in the same way + +*Same application* +- Problem: Dynatrace is creating two different process groups, what transalates in two separated services for the same application. Instead of +seeing all the traffic in one service, you will have it splitted and it will complicate your monitoring +- Solution: create a process group detection rule. Contact Dynatrace Expert + +*Different application* +- Problem: Dynatrace is just naming in the same way applications that are different. +- Solution: This case is less severe, since it can be fixed with a process group naming rule. + + +What about our example? +!(PGNaming2)[../../../../img/PGNaming2.PNG] +!(PGNaming3)[../../../../img/PGNaming3.PNG] + +Based on the feedback of the infotaiment team, each process group is a different application (microservice) and it's visible in the kubernetes container/workload +within the metadata of each Process Group. + +#### How to create a Process Group Detection Rule +1. Open the *conditional-naming-processgroup.yaml* file and create a rule that looks like this: +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName} +- tag: Infotainment +- skipDeployment: false +``` +The result of the rule will be renaming the PG to this: +``` +bon-information-prod ipa +bon-information-prod rsl +``` + +Other possible placeholders that you can use are for example: +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName/[^\\-]*$} +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesFullPodName/buffet-(.*?)-} +{ProcessGroup:DetectedName} - {HostGroup:Name/[^\\_]*$} +{ProcessGroup:KubernetesNamespace} +{ProcessGroup:CommandLineArgs/.*?\\-f\\s\\/www\\/(.*?)\\/generated\\/httpd\\.conf.*?} + +You can combine different ones. Check the (documentation)[link] for more \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_online-entertainment/conditional-naming-processgroup/conditional-naming-processgroup.yaml b/BMW-Dynatrace-config/CD_online-entertainment/conditional-naming-processgroup/conditional-naming-processgroup.yaml new file mode 100644 index 00000000..a679308c --- /dev/null +++ b/BMW-Dynatrace-config/CD_online-entertainment/conditional-naming-processgroup/conditional-naming-processgroup.yaml @@ -0,0 +1,8 @@ +config: +- CDonline-entertainment: template.json + +CDonline-entertainment: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: online-entertainment +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_online-entertainment/conditional-naming-processgroup/template.json b/BMW-Dynatrace-config/CD_online-entertainment/conditional-naming-processgroup/template.json new file mode 100644 index 00000000..7c039808 --- /dev/null +++ b/BMW-Dynatrace-config/CD_online-entertainment/conditional-naming-processgroup/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "type": "PROCESS_GROUP" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_online-entertainment/conditional-naming-service/README.md b/BMW-Dynatrace-config/CD_online-entertainment/conditional-naming-service/README.md new file mode 100644 index 00000000..c34ef308 --- /dev/null +++ b/BMW-Dynatrace-config/CD_online-entertainment/conditional-naming-service/README.md @@ -0,0 +1,35 @@ +### Service Naming Rules + +A typical case could be that you access to *Transaction & Services* and you find two services that are exactly the same: +*DataDownloadV1* +*DataDownloadV1* + +If you drilldown into the service and you check in the process group, you may have a PROD and a E2E for each service. + +*Note: if you see that both process group are exactly the same, please contact a Dynatrace expert to create a Process* +*Group detection rule* + +In the case the PG are PROD and E2E, then we need to create a rule that looks like this: + +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {Service:DetectedName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +- tag: Infotainment +- skipDeployment: false +``` + +The rule will get the Service Detected Name (current name) and it will extract (with a regex) the part of the kubernetes namespace after the "-", so -prod or -e2e, resulting in: +*DataDownloadV1 - prod* +*DataDownloadV1 - e2e* + +Now, services will be easy to identify. + +You can create rules based on any property/metadata. Some other placeholder's eamples: +{Service:DatabaseName} - E2E +{Service:WebServiceName} - {ProcessGroup:Kubernetes:microservice} - {ProcessGroup:Kubernetes:environment} +{Service:DetectedName} - {ProcessGroup:KubernetesContainerName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +{Service:DetectedName} - {ProcessGroup:SpringBootProfileName/[^\\-]*$} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_online-entertainment/conditional-naming-service/conditional-naming-service.yaml b/BMW-Dynatrace-config/CD_online-entertainment/conditional-naming-service/conditional-naming-service.yaml new file mode 100644 index 00000000..a679308c --- /dev/null +++ b/BMW-Dynatrace-config/CD_online-entertainment/conditional-naming-service/conditional-naming-service.yaml @@ -0,0 +1,8 @@ +config: +- CDonline-entertainment: template.json + +CDonline-entertainment: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: online-entertainment +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_online-entertainment/conditional-naming-service/template.json b/BMW-Dynatrace-config/CD_online-entertainment/conditional-naming-service/template.json new file mode 100644 index 00000000..5d4fac56 --- /dev/null +++ b/BMW-Dynatrace-config/CD_online-entertainment/conditional-naming-service/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "type": "SERVICE" +} \ 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 index d41c4c77..5f35e5c1 100644 --- a/BMW-Dynatrace-config/CD_online-entertainment/custom-service-java/README.md +++ b/BMW-Dynatrace-config/CD_online-entertainment/custom-service-java/README.md @@ -1,30 +1,4 @@ -## 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 configure custom services? -## 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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Custom+Services) page to configure your custom services. \ 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 index 92e734fa..1695924c 100644 --- a/BMW-Dynatrace-config/CD_online-entertainment/synthetic-monitor/README.md +++ b/BMW-Dynatrace-config/CD_online-entertainment/synthetic-monitor/README.md @@ -1,37 +1,4 @@ -# Synthetic Configuration -To calculate the Availability KPI, a synthetic must be configured. +### How to configure synthetics? -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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Synthetic+Monitors) page to configure your synthetics. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_pdmmanager/conditional-naming-processgroup/README.md b/BMW-Dynatrace-config/CD_pdmmanager/conditional-naming-processgroup/README.md new file mode 100644 index 00000000..f94196a5 --- /dev/null +++ b/BMW-Dynatrace-config/CD_pdmmanager/conditional-naming-processgroup/README.md @@ -0,0 +1,67 @@ +### Process Group Detection Rules and Naming + +#### Detection Rule or Naming? + +For the explanation, we're using a real example of the Infotainment application: + +!(PGNaming1)[../../../../img/PGNaming1.PNG] + +Before working with your dashboards and alerting profiles, an important task to do when working with Dynatrace is checking +the structure of your applications (process groups). You can do that clicking under *technologies* and filter using your +application Management Zone. + +In the picture above, there are two Process Groups called bon-information-prod. **If you see duplicated process groups like in** +**this case, you MUST follow this guideline** + +Next step would be to open both process groups and compare the metadata. In that way, you can identify if all process instances are +part of the same application or not. An easy way to do that is asking yourself: how many instances of my application do i have? + +If you have 4 instances in total and you're able to see 2 in one PG and other 2 in other PG it means that **they are part of the ** +**same application** + +Another situation could be that checking on the metadata, then you see that are **two different application** and Dynatrace is just naming +the process group in the same way + +*Same application* +- Problem: Dynatrace is creating two different process groups, what transalates in two separated services for the same application. Instead of +seeing all the traffic in one service, you will have it splitted and it will complicate your monitoring +- Solution: create a process group detection rule. Contact Dynatrace Expert + +*Different application* +- Problem: Dynatrace is just naming in the same way applications that are different. +- Solution: This case is less severe, since it can be fixed with a process group naming rule. + + +What about our example? +!(PGNaming2)[../../../../img/PGNaming2.PNG] +!(PGNaming3)[../../../../img/PGNaming3.PNG] + +Based on the feedback of the infotaiment team, each process group is a different application (microservice) and it's visible in the kubernetes container/workload +within the metadata of each Process Group. + +#### How to create a Process Group Detection Rule +1. Open the *conditional-naming-processgroup.yaml* file and create a rule that looks like this: +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName} +- tag: Infotainment +- skipDeployment: false +``` +The result of the rule will be renaming the PG to this: +``` +bon-information-prod ipa +bon-information-prod rsl +``` + +Other possible placeholders that you can use are for example: +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName/[^\\-]*$} +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesFullPodName/buffet-(.*?)-} +{ProcessGroup:DetectedName} - {HostGroup:Name/[^\\_]*$} +{ProcessGroup:KubernetesNamespace} +{ProcessGroup:CommandLineArgs/.*?\\-f\\s\\/www\\/(.*?)\\/generated\\/httpd\\.conf.*?} + +You can combine different ones. Check the (documentation)[link] for more \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_pdmmanager/conditional-naming-processgroup/conditional-naming-processgroup.yaml b/BMW-Dynatrace-config/CD_pdmmanager/conditional-naming-processgroup/conditional-naming-processgroup.yaml new file mode 100644 index 00000000..7d33c1d4 --- /dev/null +++ b/BMW-Dynatrace-config/CD_pdmmanager/conditional-naming-processgroup/conditional-naming-processgroup.yaml @@ -0,0 +1,8 @@ +config: +- CDpdmmanager: template.json + +CDpdmmanager: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: pdmmanager +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_pdmmanager/conditional-naming-processgroup/template.json b/BMW-Dynatrace-config/CD_pdmmanager/conditional-naming-processgroup/template.json new file mode 100644 index 00000000..7c039808 --- /dev/null +++ b/BMW-Dynatrace-config/CD_pdmmanager/conditional-naming-processgroup/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "type": "PROCESS_GROUP" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_pdmmanager/conditional-naming-service/README.md b/BMW-Dynatrace-config/CD_pdmmanager/conditional-naming-service/README.md new file mode 100644 index 00000000..c34ef308 --- /dev/null +++ b/BMW-Dynatrace-config/CD_pdmmanager/conditional-naming-service/README.md @@ -0,0 +1,35 @@ +### Service Naming Rules + +A typical case could be that you access to *Transaction & Services* and you find two services that are exactly the same: +*DataDownloadV1* +*DataDownloadV1* + +If you drilldown into the service and you check in the process group, you may have a PROD and a E2E for each service. + +*Note: if you see that both process group are exactly the same, please contact a Dynatrace expert to create a Process* +*Group detection rule* + +In the case the PG are PROD and E2E, then we need to create a rule that looks like this: + +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {Service:DetectedName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +- tag: Infotainment +- skipDeployment: false +``` + +The rule will get the Service Detected Name (current name) and it will extract (with a regex) the part of the kubernetes namespace after the "-", so -prod or -e2e, resulting in: +*DataDownloadV1 - prod* +*DataDownloadV1 - e2e* + +Now, services will be easy to identify. + +You can create rules based on any property/metadata. Some other placeholder's eamples: +{Service:DatabaseName} - E2E +{Service:WebServiceName} - {ProcessGroup:Kubernetes:microservice} - {ProcessGroup:Kubernetes:environment} +{Service:DetectedName} - {ProcessGroup:KubernetesContainerName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +{Service:DetectedName} - {ProcessGroup:SpringBootProfileName/[^\\-]*$} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_pdmmanager/conditional-naming-service/conditional-naming-service.yaml b/BMW-Dynatrace-config/CD_pdmmanager/conditional-naming-service/conditional-naming-service.yaml new file mode 100644 index 00000000..7d33c1d4 --- /dev/null +++ b/BMW-Dynatrace-config/CD_pdmmanager/conditional-naming-service/conditional-naming-service.yaml @@ -0,0 +1,8 @@ +config: +- CDpdmmanager: template.json + +CDpdmmanager: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: pdmmanager +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_pdmmanager/conditional-naming-service/template.json b/BMW-Dynatrace-config/CD_pdmmanager/conditional-naming-service/template.json new file mode 100644 index 00000000..5d4fac56 --- /dev/null +++ b/BMW-Dynatrace-config/CD_pdmmanager/conditional-naming-service/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "type": "SERVICE" +} \ 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 index d41c4c77..5f35e5c1 100644 --- a/BMW-Dynatrace-config/CD_pdmmanager/custom-service-java/README.md +++ b/BMW-Dynatrace-config/CD_pdmmanager/custom-service-java/README.md @@ -1,30 +1,4 @@ -## 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 configure custom services? -## 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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Custom+Services) page to configure your custom services. \ 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 index 92e734fa..1695924c 100644 --- a/BMW-Dynatrace-config/CD_pdmmanager/synthetic-monitor/README.md +++ b/BMW-Dynatrace-config/CD_pdmmanager/synthetic-monitor/README.md @@ -1,37 +1,4 @@ -# Synthetic Configuration -To calculate the Availability KPI, a synthetic must be configured. +### How to configure synthetics? -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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Synthetic+Monitors) page to configure your synthetics. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_personal-data-service/conditional-naming-processgroup/README.md b/BMW-Dynatrace-config/CD_personal-data-service/conditional-naming-processgroup/README.md new file mode 100644 index 00000000..f94196a5 --- /dev/null +++ b/BMW-Dynatrace-config/CD_personal-data-service/conditional-naming-processgroup/README.md @@ -0,0 +1,67 @@ +### Process Group Detection Rules and Naming + +#### Detection Rule or Naming? + +For the explanation, we're using a real example of the Infotainment application: + +!(PGNaming1)[../../../../img/PGNaming1.PNG] + +Before working with your dashboards and alerting profiles, an important task to do when working with Dynatrace is checking +the structure of your applications (process groups). You can do that clicking under *technologies* and filter using your +application Management Zone. + +In the picture above, there are two Process Groups called bon-information-prod. **If you see duplicated process groups like in** +**this case, you MUST follow this guideline** + +Next step would be to open both process groups and compare the metadata. In that way, you can identify if all process instances are +part of the same application or not. An easy way to do that is asking yourself: how many instances of my application do i have? + +If you have 4 instances in total and you're able to see 2 in one PG and other 2 in other PG it means that **they are part of the ** +**same application** + +Another situation could be that checking on the metadata, then you see that are **two different application** and Dynatrace is just naming +the process group in the same way + +*Same application* +- Problem: Dynatrace is creating two different process groups, what transalates in two separated services for the same application. Instead of +seeing all the traffic in one service, you will have it splitted and it will complicate your monitoring +- Solution: create a process group detection rule. Contact Dynatrace Expert + +*Different application* +- Problem: Dynatrace is just naming in the same way applications that are different. +- Solution: This case is less severe, since it can be fixed with a process group naming rule. + + +What about our example? +!(PGNaming2)[../../../../img/PGNaming2.PNG] +!(PGNaming3)[../../../../img/PGNaming3.PNG] + +Based on the feedback of the infotaiment team, each process group is a different application (microservice) and it's visible in the kubernetes container/workload +within the metadata of each Process Group. + +#### How to create a Process Group Detection Rule +1. Open the *conditional-naming-processgroup.yaml* file and create a rule that looks like this: +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName} +- tag: Infotainment +- skipDeployment: false +``` +The result of the rule will be renaming the PG to this: +``` +bon-information-prod ipa +bon-information-prod rsl +``` + +Other possible placeholders that you can use are for example: +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName/[^\\-]*$} +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesFullPodName/buffet-(.*?)-} +{ProcessGroup:DetectedName} - {HostGroup:Name/[^\\_]*$} +{ProcessGroup:KubernetesNamespace} +{ProcessGroup:CommandLineArgs/.*?\\-f\\s\\/www\\/(.*?)\\/generated\\/httpd\\.conf.*?} + +You can combine different ones. Check the (documentation)[link] for more \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_personal-data-service/conditional-naming-processgroup/conditional-naming-processgroup.yaml b/BMW-Dynatrace-config/CD_personal-data-service/conditional-naming-processgroup/conditional-naming-processgroup.yaml new file mode 100644 index 00000000..78619a2b --- /dev/null +++ b/BMW-Dynatrace-config/CD_personal-data-service/conditional-naming-processgroup/conditional-naming-processgroup.yaml @@ -0,0 +1,8 @@ +config: +- CDpersonal-data-service: template.json + +CDpersonal-data-service: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: personal-data-service +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_personal-data-service/conditional-naming-processgroup/template.json b/BMW-Dynatrace-config/CD_personal-data-service/conditional-naming-processgroup/template.json new file mode 100644 index 00000000..7c039808 --- /dev/null +++ b/BMW-Dynatrace-config/CD_personal-data-service/conditional-naming-processgroup/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "type": "PROCESS_GROUP" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_personal-data-service/conditional-naming-service/README.md b/BMW-Dynatrace-config/CD_personal-data-service/conditional-naming-service/README.md new file mode 100644 index 00000000..c34ef308 --- /dev/null +++ b/BMW-Dynatrace-config/CD_personal-data-service/conditional-naming-service/README.md @@ -0,0 +1,35 @@ +### Service Naming Rules + +A typical case could be that you access to *Transaction & Services* and you find two services that are exactly the same: +*DataDownloadV1* +*DataDownloadV1* + +If you drilldown into the service and you check in the process group, you may have a PROD and a E2E for each service. + +*Note: if you see that both process group are exactly the same, please contact a Dynatrace expert to create a Process* +*Group detection rule* + +In the case the PG are PROD and E2E, then we need to create a rule that looks like this: + +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {Service:DetectedName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +- tag: Infotainment +- skipDeployment: false +``` + +The rule will get the Service Detected Name (current name) and it will extract (with a regex) the part of the kubernetes namespace after the "-", so -prod or -e2e, resulting in: +*DataDownloadV1 - prod* +*DataDownloadV1 - e2e* + +Now, services will be easy to identify. + +You can create rules based on any property/metadata. Some other placeholder's eamples: +{Service:DatabaseName} - E2E +{Service:WebServiceName} - {ProcessGroup:Kubernetes:microservice} - {ProcessGroup:Kubernetes:environment} +{Service:DetectedName} - {ProcessGroup:KubernetesContainerName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +{Service:DetectedName} - {ProcessGroup:SpringBootProfileName/[^\\-]*$} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_personal-data-service/conditional-naming-service/conditional-naming-service.yaml b/BMW-Dynatrace-config/CD_personal-data-service/conditional-naming-service/conditional-naming-service.yaml new file mode 100644 index 00000000..78619a2b --- /dev/null +++ b/BMW-Dynatrace-config/CD_personal-data-service/conditional-naming-service/conditional-naming-service.yaml @@ -0,0 +1,8 @@ +config: +- CDpersonal-data-service: template.json + +CDpersonal-data-service: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: personal-data-service +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_personal-data-service/conditional-naming-service/template.json b/BMW-Dynatrace-config/CD_personal-data-service/conditional-naming-service/template.json new file mode 100644 index 00000000..5d4fac56 --- /dev/null +++ b/BMW-Dynatrace-config/CD_personal-data-service/conditional-naming-service/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "type": "SERVICE" +} \ 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 index d41c4c77..5f35e5c1 100644 --- 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 @@ -1,30 +1,4 @@ -## 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 configure custom services? -## 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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Custom+Services) page to configure your custom services. \ 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 index 92e734fa..1695924c 100644 --- a/BMW-Dynatrace-config/CD_personal-data-service/synthetic-monitor/README.md +++ b/BMW-Dynatrace-config/CD_personal-data-service/synthetic-monitor/README.md @@ -1,37 +1,4 @@ -# Synthetic Configuration -To calculate the Availability KPI, a synthetic must be configured. +### How to configure synthetics? -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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Synthetic+Monitors) page to configure your synthetics. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_pmuimapper-service/conditional-naming-processgroup/README.md b/BMW-Dynatrace-config/CD_pmuimapper-service/conditional-naming-processgroup/README.md new file mode 100644 index 00000000..f94196a5 --- /dev/null +++ b/BMW-Dynatrace-config/CD_pmuimapper-service/conditional-naming-processgroup/README.md @@ -0,0 +1,67 @@ +### Process Group Detection Rules and Naming + +#### Detection Rule or Naming? + +For the explanation, we're using a real example of the Infotainment application: + +!(PGNaming1)[../../../../img/PGNaming1.PNG] + +Before working with your dashboards and alerting profiles, an important task to do when working with Dynatrace is checking +the structure of your applications (process groups). You can do that clicking under *technologies* and filter using your +application Management Zone. + +In the picture above, there are two Process Groups called bon-information-prod. **If you see duplicated process groups like in** +**this case, you MUST follow this guideline** + +Next step would be to open both process groups and compare the metadata. In that way, you can identify if all process instances are +part of the same application or not. An easy way to do that is asking yourself: how many instances of my application do i have? + +If you have 4 instances in total and you're able to see 2 in one PG and other 2 in other PG it means that **they are part of the ** +**same application** + +Another situation could be that checking on the metadata, then you see that are **two different application** and Dynatrace is just naming +the process group in the same way + +*Same application* +- Problem: Dynatrace is creating two different process groups, what transalates in two separated services for the same application. Instead of +seeing all the traffic in one service, you will have it splitted and it will complicate your monitoring +- Solution: create a process group detection rule. Contact Dynatrace Expert + +*Different application* +- Problem: Dynatrace is just naming in the same way applications that are different. +- Solution: This case is less severe, since it can be fixed with a process group naming rule. + + +What about our example? +!(PGNaming2)[../../../../img/PGNaming2.PNG] +!(PGNaming3)[../../../../img/PGNaming3.PNG] + +Based on the feedback of the infotaiment team, each process group is a different application (microservice) and it's visible in the kubernetes container/workload +within the metadata of each Process Group. + +#### How to create a Process Group Detection Rule +1. Open the *conditional-naming-processgroup.yaml* file and create a rule that looks like this: +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName} +- tag: Infotainment +- skipDeployment: false +``` +The result of the rule will be renaming the PG to this: +``` +bon-information-prod ipa +bon-information-prod rsl +``` + +Other possible placeholders that you can use are for example: +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName/[^\\-]*$} +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesFullPodName/buffet-(.*?)-} +{ProcessGroup:DetectedName} - {HostGroup:Name/[^\\_]*$} +{ProcessGroup:KubernetesNamespace} +{ProcessGroup:CommandLineArgs/.*?\\-f\\s\\/www\\/(.*?)\\/generated\\/httpd\\.conf.*?} + +You can combine different ones. Check the (documentation)[link] for more \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_pmuimapper-service/conditional-naming-processgroup/conditional-naming-processgroup.yaml b/BMW-Dynatrace-config/CD_pmuimapper-service/conditional-naming-processgroup/conditional-naming-processgroup.yaml new file mode 100644 index 00000000..c6cdb61e --- /dev/null +++ b/BMW-Dynatrace-config/CD_pmuimapper-service/conditional-naming-processgroup/conditional-naming-processgroup.yaml @@ -0,0 +1,8 @@ +config: +- CDpmuimapper-service: template.json + +CDpmuimapper-service: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: pmuimapper-service +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_pmuimapper-service/conditional-naming-processgroup/template.json b/BMW-Dynatrace-config/CD_pmuimapper-service/conditional-naming-processgroup/template.json new file mode 100644 index 00000000..7c039808 --- /dev/null +++ b/BMW-Dynatrace-config/CD_pmuimapper-service/conditional-naming-processgroup/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "type": "PROCESS_GROUP" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_pmuimapper-service/conditional-naming-service/README.md b/BMW-Dynatrace-config/CD_pmuimapper-service/conditional-naming-service/README.md new file mode 100644 index 00000000..c34ef308 --- /dev/null +++ b/BMW-Dynatrace-config/CD_pmuimapper-service/conditional-naming-service/README.md @@ -0,0 +1,35 @@ +### Service Naming Rules + +A typical case could be that you access to *Transaction & Services* and you find two services that are exactly the same: +*DataDownloadV1* +*DataDownloadV1* + +If you drilldown into the service and you check in the process group, you may have a PROD and a E2E for each service. + +*Note: if you see that both process group are exactly the same, please contact a Dynatrace expert to create a Process* +*Group detection rule* + +In the case the PG are PROD and E2E, then we need to create a rule that looks like this: + +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {Service:DetectedName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +- tag: Infotainment +- skipDeployment: false +``` + +The rule will get the Service Detected Name (current name) and it will extract (with a regex) the part of the kubernetes namespace after the "-", so -prod or -e2e, resulting in: +*DataDownloadV1 - prod* +*DataDownloadV1 - e2e* + +Now, services will be easy to identify. + +You can create rules based on any property/metadata. Some other placeholder's eamples: +{Service:DatabaseName} - E2E +{Service:WebServiceName} - {ProcessGroup:Kubernetes:microservice} - {ProcessGroup:Kubernetes:environment} +{Service:DetectedName} - {ProcessGroup:KubernetesContainerName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +{Service:DetectedName} - {ProcessGroup:SpringBootProfileName/[^\\-]*$} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_pmuimapper-service/conditional-naming-service/conditional-naming-service.yaml b/BMW-Dynatrace-config/CD_pmuimapper-service/conditional-naming-service/conditional-naming-service.yaml new file mode 100644 index 00000000..c6cdb61e --- /dev/null +++ b/BMW-Dynatrace-config/CD_pmuimapper-service/conditional-naming-service/conditional-naming-service.yaml @@ -0,0 +1,8 @@ +config: +- CDpmuimapper-service: template.json + +CDpmuimapper-service: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: pmuimapper-service +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_pmuimapper-service/conditional-naming-service/template.json b/BMW-Dynatrace-config/CD_pmuimapper-service/conditional-naming-service/template.json new file mode 100644 index 00000000..5d4fac56 --- /dev/null +++ b/BMW-Dynatrace-config/CD_pmuimapper-service/conditional-naming-service/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "type": "SERVICE" +} \ 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 index d41c4c77..5f35e5c1 100644 --- a/BMW-Dynatrace-config/CD_pmuimapper-service/custom-service-java/README.md +++ b/BMW-Dynatrace-config/CD_pmuimapper-service/custom-service-java/README.md @@ -1,30 +1,4 @@ -## 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 configure custom services? -## 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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Custom+Services) page to configure your custom services. \ 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 index 92e734fa..1695924c 100644 --- a/BMW-Dynatrace-config/CD_pmuimapper-service/synthetic-monitor/README.md +++ b/BMW-Dynatrace-config/CD_pmuimapper-service/synthetic-monitor/README.md @@ -1,37 +1,4 @@ -# Synthetic Configuration -To calculate the Availability KPI, a synthetic must be configured. +### How to configure synthetics? -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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Synthetic+Monitors) page to configure your synthetics. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_private-charging-tariffs-composite-service/conditional-naming-processgroup/README.md b/BMW-Dynatrace-config/CD_private-charging-tariffs-composite-service/conditional-naming-processgroup/README.md new file mode 100644 index 00000000..f94196a5 --- /dev/null +++ b/BMW-Dynatrace-config/CD_private-charging-tariffs-composite-service/conditional-naming-processgroup/README.md @@ -0,0 +1,67 @@ +### Process Group Detection Rules and Naming + +#### Detection Rule or Naming? + +For the explanation, we're using a real example of the Infotainment application: + +!(PGNaming1)[../../../../img/PGNaming1.PNG] + +Before working with your dashboards and alerting profiles, an important task to do when working with Dynatrace is checking +the structure of your applications (process groups). You can do that clicking under *technologies* and filter using your +application Management Zone. + +In the picture above, there are two Process Groups called bon-information-prod. **If you see duplicated process groups like in** +**this case, you MUST follow this guideline** + +Next step would be to open both process groups and compare the metadata. In that way, you can identify if all process instances are +part of the same application or not. An easy way to do that is asking yourself: how many instances of my application do i have? + +If you have 4 instances in total and you're able to see 2 in one PG and other 2 in other PG it means that **they are part of the ** +**same application** + +Another situation could be that checking on the metadata, then you see that are **two different application** and Dynatrace is just naming +the process group in the same way + +*Same application* +- Problem: Dynatrace is creating two different process groups, what transalates in two separated services for the same application. Instead of +seeing all the traffic in one service, you will have it splitted and it will complicate your monitoring +- Solution: create a process group detection rule. Contact Dynatrace Expert + +*Different application* +- Problem: Dynatrace is just naming in the same way applications that are different. +- Solution: This case is less severe, since it can be fixed with a process group naming rule. + + +What about our example? +!(PGNaming2)[../../../../img/PGNaming2.PNG] +!(PGNaming3)[../../../../img/PGNaming3.PNG] + +Based on the feedback of the infotaiment team, each process group is a different application (microservice) and it's visible in the kubernetes container/workload +within the metadata of each Process Group. + +#### How to create a Process Group Detection Rule +1. Open the *conditional-naming-processgroup.yaml* file and create a rule that looks like this: +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName} +- tag: Infotainment +- skipDeployment: false +``` +The result of the rule will be renaming the PG to this: +``` +bon-information-prod ipa +bon-information-prod rsl +``` + +Other possible placeholders that you can use are for example: +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName/[^\\-]*$} +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesFullPodName/buffet-(.*?)-} +{ProcessGroup:DetectedName} - {HostGroup:Name/[^\\_]*$} +{ProcessGroup:KubernetesNamespace} +{ProcessGroup:CommandLineArgs/.*?\\-f\\s\\/www\\/(.*?)\\/generated\\/httpd\\.conf.*?} + +You can combine different ones. Check the (documentation)[link] for more \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_private-charging-tariffs-composite-service/conditional-naming-processgroup/conditional-naming-processgroup.yaml b/BMW-Dynatrace-config/CD_private-charging-tariffs-composite-service/conditional-naming-processgroup/conditional-naming-processgroup.yaml new file mode 100644 index 00000000..967a3f5c --- /dev/null +++ b/BMW-Dynatrace-config/CD_private-charging-tariffs-composite-service/conditional-naming-processgroup/conditional-naming-processgroup.yaml @@ -0,0 +1,8 @@ +config: +- CDprivate-charging-tariffs-composite-service: template.json + +CDprivate-charging-tariffs-composite-service: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: private-charging-tariffs-composite-service +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_private-charging-tariffs-composite-service/conditional-naming-processgroup/template.json b/BMW-Dynatrace-config/CD_private-charging-tariffs-composite-service/conditional-naming-processgroup/template.json new file mode 100644 index 00000000..7c039808 --- /dev/null +++ b/BMW-Dynatrace-config/CD_private-charging-tariffs-composite-service/conditional-naming-processgroup/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "type": "PROCESS_GROUP" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_private-charging-tariffs-composite-service/conditional-naming-service/README.md b/BMW-Dynatrace-config/CD_private-charging-tariffs-composite-service/conditional-naming-service/README.md new file mode 100644 index 00000000..c34ef308 --- /dev/null +++ b/BMW-Dynatrace-config/CD_private-charging-tariffs-composite-service/conditional-naming-service/README.md @@ -0,0 +1,35 @@ +### Service Naming Rules + +A typical case could be that you access to *Transaction & Services* and you find two services that are exactly the same: +*DataDownloadV1* +*DataDownloadV1* + +If you drilldown into the service and you check in the process group, you may have a PROD and a E2E for each service. + +*Note: if you see that both process group are exactly the same, please contact a Dynatrace expert to create a Process* +*Group detection rule* + +In the case the PG are PROD and E2E, then we need to create a rule that looks like this: + +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {Service:DetectedName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +- tag: Infotainment +- skipDeployment: false +``` + +The rule will get the Service Detected Name (current name) and it will extract (with a regex) the part of the kubernetes namespace after the "-", so -prod or -e2e, resulting in: +*DataDownloadV1 - prod* +*DataDownloadV1 - e2e* + +Now, services will be easy to identify. + +You can create rules based on any property/metadata. Some other placeholder's eamples: +{Service:DatabaseName} - E2E +{Service:WebServiceName} - {ProcessGroup:Kubernetes:microservice} - {ProcessGroup:Kubernetes:environment} +{Service:DetectedName} - {ProcessGroup:KubernetesContainerName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +{Service:DetectedName} - {ProcessGroup:SpringBootProfileName/[^\\-]*$} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_private-charging-tariffs-composite-service/conditional-naming-service/conditional-naming-service.yaml b/BMW-Dynatrace-config/CD_private-charging-tariffs-composite-service/conditional-naming-service/conditional-naming-service.yaml new file mode 100644 index 00000000..967a3f5c --- /dev/null +++ b/BMW-Dynatrace-config/CD_private-charging-tariffs-composite-service/conditional-naming-service/conditional-naming-service.yaml @@ -0,0 +1,8 @@ +config: +- CDprivate-charging-tariffs-composite-service: template.json + +CDprivate-charging-tariffs-composite-service: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: private-charging-tariffs-composite-service +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_private-charging-tariffs-composite-service/conditional-naming-service/template.json b/BMW-Dynatrace-config/CD_private-charging-tariffs-composite-service/conditional-naming-service/template.json new file mode 100644 index 00000000..5d4fac56 --- /dev/null +++ b/BMW-Dynatrace-config/CD_private-charging-tariffs-composite-service/conditional-naming-service/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "type": "SERVICE" +} \ 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 index d41c4c77..5f35e5c1 100644 --- 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 @@ -1,30 +1,4 @@ -## 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 configure custom services? -## 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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Custom+Services) page to configure your custom services. \ 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 index 92e734fa..1695924c 100644 --- 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 @@ -1,37 +1,4 @@ -# Synthetic Configuration -To calculate the Availability KPI, a synthetic must be configured. +### How to configure synthetics? -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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Synthetic+Monitors) page to configure your synthetics. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_private-charging-tariffs-service/conditional-naming-processgroup/README.md b/BMW-Dynatrace-config/CD_private-charging-tariffs-service/conditional-naming-processgroup/README.md new file mode 100644 index 00000000..f94196a5 --- /dev/null +++ b/BMW-Dynatrace-config/CD_private-charging-tariffs-service/conditional-naming-processgroup/README.md @@ -0,0 +1,67 @@ +### Process Group Detection Rules and Naming + +#### Detection Rule or Naming? + +For the explanation, we're using a real example of the Infotainment application: + +!(PGNaming1)[../../../../img/PGNaming1.PNG] + +Before working with your dashboards and alerting profiles, an important task to do when working with Dynatrace is checking +the structure of your applications (process groups). You can do that clicking under *technologies* and filter using your +application Management Zone. + +In the picture above, there are two Process Groups called bon-information-prod. **If you see duplicated process groups like in** +**this case, you MUST follow this guideline** + +Next step would be to open both process groups and compare the metadata. In that way, you can identify if all process instances are +part of the same application or not. An easy way to do that is asking yourself: how many instances of my application do i have? + +If you have 4 instances in total and you're able to see 2 in one PG and other 2 in other PG it means that **they are part of the ** +**same application** + +Another situation could be that checking on the metadata, then you see that are **two different application** and Dynatrace is just naming +the process group in the same way + +*Same application* +- Problem: Dynatrace is creating two different process groups, what transalates in two separated services for the same application. Instead of +seeing all the traffic in one service, you will have it splitted and it will complicate your monitoring +- Solution: create a process group detection rule. Contact Dynatrace Expert + +*Different application* +- Problem: Dynatrace is just naming in the same way applications that are different. +- Solution: This case is less severe, since it can be fixed with a process group naming rule. + + +What about our example? +!(PGNaming2)[../../../../img/PGNaming2.PNG] +!(PGNaming3)[../../../../img/PGNaming3.PNG] + +Based on the feedback of the infotaiment team, each process group is a different application (microservice) and it's visible in the kubernetes container/workload +within the metadata of each Process Group. + +#### How to create a Process Group Detection Rule +1. Open the *conditional-naming-processgroup.yaml* file and create a rule that looks like this: +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName} +- tag: Infotainment +- skipDeployment: false +``` +The result of the rule will be renaming the PG to this: +``` +bon-information-prod ipa +bon-information-prod rsl +``` + +Other possible placeholders that you can use are for example: +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName/[^\\-]*$} +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesFullPodName/buffet-(.*?)-} +{ProcessGroup:DetectedName} - {HostGroup:Name/[^\\_]*$} +{ProcessGroup:KubernetesNamespace} +{ProcessGroup:CommandLineArgs/.*?\\-f\\s\\/www\\/(.*?)\\/generated\\/httpd\\.conf.*?} + +You can combine different ones. Check the (documentation)[link] for more \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_private-charging-tariffs-service/conditional-naming-processgroup/conditional-naming-processgroup.yaml b/BMW-Dynatrace-config/CD_private-charging-tariffs-service/conditional-naming-processgroup/conditional-naming-processgroup.yaml new file mode 100644 index 00000000..25079c11 --- /dev/null +++ b/BMW-Dynatrace-config/CD_private-charging-tariffs-service/conditional-naming-processgroup/conditional-naming-processgroup.yaml @@ -0,0 +1,8 @@ +config: +- CDprivate-charging-tariffs-service: template.json + +CDprivate-charging-tariffs-service: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: private-charging-tariffs-service +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_private-charging-tariffs-service/conditional-naming-processgroup/template.json b/BMW-Dynatrace-config/CD_private-charging-tariffs-service/conditional-naming-processgroup/template.json new file mode 100644 index 00000000..7c039808 --- /dev/null +++ b/BMW-Dynatrace-config/CD_private-charging-tariffs-service/conditional-naming-processgroup/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "type": "PROCESS_GROUP" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_private-charging-tariffs-service/conditional-naming-service/README.md b/BMW-Dynatrace-config/CD_private-charging-tariffs-service/conditional-naming-service/README.md new file mode 100644 index 00000000..c34ef308 --- /dev/null +++ b/BMW-Dynatrace-config/CD_private-charging-tariffs-service/conditional-naming-service/README.md @@ -0,0 +1,35 @@ +### Service Naming Rules + +A typical case could be that you access to *Transaction & Services* and you find two services that are exactly the same: +*DataDownloadV1* +*DataDownloadV1* + +If you drilldown into the service and you check in the process group, you may have a PROD and a E2E for each service. + +*Note: if you see that both process group are exactly the same, please contact a Dynatrace expert to create a Process* +*Group detection rule* + +In the case the PG are PROD and E2E, then we need to create a rule that looks like this: + +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {Service:DetectedName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +- tag: Infotainment +- skipDeployment: false +``` + +The rule will get the Service Detected Name (current name) and it will extract (with a regex) the part of the kubernetes namespace after the "-", so -prod or -e2e, resulting in: +*DataDownloadV1 - prod* +*DataDownloadV1 - e2e* + +Now, services will be easy to identify. + +You can create rules based on any property/metadata. Some other placeholder's eamples: +{Service:DatabaseName} - E2E +{Service:WebServiceName} - {ProcessGroup:Kubernetes:microservice} - {ProcessGroup:Kubernetes:environment} +{Service:DetectedName} - {ProcessGroup:KubernetesContainerName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +{Service:DetectedName} - {ProcessGroup:SpringBootProfileName/[^\\-]*$} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_private-charging-tariffs-service/conditional-naming-service/conditional-naming-service.yaml b/BMW-Dynatrace-config/CD_private-charging-tariffs-service/conditional-naming-service/conditional-naming-service.yaml new file mode 100644 index 00000000..25079c11 --- /dev/null +++ b/BMW-Dynatrace-config/CD_private-charging-tariffs-service/conditional-naming-service/conditional-naming-service.yaml @@ -0,0 +1,8 @@ +config: +- CDprivate-charging-tariffs-service: template.json + +CDprivate-charging-tariffs-service: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: private-charging-tariffs-service +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_private-charging-tariffs-service/conditional-naming-service/template.json b/BMW-Dynatrace-config/CD_private-charging-tariffs-service/conditional-naming-service/template.json new file mode 100644 index 00000000..5d4fac56 --- /dev/null +++ b/BMW-Dynatrace-config/CD_private-charging-tariffs-service/conditional-naming-service/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "type": "SERVICE" +} \ 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 index d41c4c77..5f35e5c1 100644 --- 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 @@ -1,30 +1,4 @@ -## 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 configure custom services? -## 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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Custom+Services) page to configure your custom services. \ 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 index 92e734fa..1695924c 100644 --- 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 @@ -1,37 +1,4 @@ -# Synthetic Configuration -To calculate the Availability KPI, a synthetic must be configured. +### How to configure synthetics? -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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Synthetic+Monitors) page to configure your synthetics. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_push-notification-service/conditional-naming-processgroup/README.md b/BMW-Dynatrace-config/CD_push-notification-service/conditional-naming-processgroup/README.md new file mode 100644 index 00000000..f94196a5 --- /dev/null +++ b/BMW-Dynatrace-config/CD_push-notification-service/conditional-naming-processgroup/README.md @@ -0,0 +1,67 @@ +### Process Group Detection Rules and Naming + +#### Detection Rule or Naming? + +For the explanation, we're using a real example of the Infotainment application: + +!(PGNaming1)[../../../../img/PGNaming1.PNG] + +Before working with your dashboards and alerting profiles, an important task to do when working with Dynatrace is checking +the structure of your applications (process groups). You can do that clicking under *technologies* and filter using your +application Management Zone. + +In the picture above, there are two Process Groups called bon-information-prod. **If you see duplicated process groups like in** +**this case, you MUST follow this guideline** + +Next step would be to open both process groups and compare the metadata. In that way, you can identify if all process instances are +part of the same application or not. An easy way to do that is asking yourself: how many instances of my application do i have? + +If you have 4 instances in total and you're able to see 2 in one PG and other 2 in other PG it means that **they are part of the ** +**same application** + +Another situation could be that checking on the metadata, then you see that are **two different application** and Dynatrace is just naming +the process group in the same way + +*Same application* +- Problem: Dynatrace is creating two different process groups, what transalates in two separated services for the same application. Instead of +seeing all the traffic in one service, you will have it splitted and it will complicate your monitoring +- Solution: create a process group detection rule. Contact Dynatrace Expert + +*Different application* +- Problem: Dynatrace is just naming in the same way applications that are different. +- Solution: This case is less severe, since it can be fixed with a process group naming rule. + + +What about our example? +!(PGNaming2)[../../../../img/PGNaming2.PNG] +!(PGNaming3)[../../../../img/PGNaming3.PNG] + +Based on the feedback of the infotaiment team, each process group is a different application (microservice) and it's visible in the kubernetes container/workload +within the metadata of each Process Group. + +#### How to create a Process Group Detection Rule +1. Open the *conditional-naming-processgroup.yaml* file and create a rule that looks like this: +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName} +- tag: Infotainment +- skipDeployment: false +``` +The result of the rule will be renaming the PG to this: +``` +bon-information-prod ipa +bon-information-prod rsl +``` + +Other possible placeholders that you can use are for example: +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName/[^\\-]*$} +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesFullPodName/buffet-(.*?)-} +{ProcessGroup:DetectedName} - {HostGroup:Name/[^\\_]*$} +{ProcessGroup:KubernetesNamespace} +{ProcessGroup:CommandLineArgs/.*?\\-f\\s\\/www\\/(.*?)\\/generated\\/httpd\\.conf.*?} + +You can combine different ones. Check the (documentation)[link] for more \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_push-notification-service/conditional-naming-processgroup/conditional-naming-processgroup.yaml b/BMW-Dynatrace-config/CD_push-notification-service/conditional-naming-processgroup/conditional-naming-processgroup.yaml new file mode 100644 index 00000000..e6faf023 --- /dev/null +++ b/BMW-Dynatrace-config/CD_push-notification-service/conditional-naming-processgroup/conditional-naming-processgroup.yaml @@ -0,0 +1,8 @@ +config: +- CDpush-notification-service: template.json + +CDpush-notification-service: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: push-notification-service +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_push-notification-service/conditional-naming-processgroup/template.json b/BMW-Dynatrace-config/CD_push-notification-service/conditional-naming-processgroup/template.json new file mode 100644 index 00000000..7c039808 --- /dev/null +++ b/BMW-Dynatrace-config/CD_push-notification-service/conditional-naming-processgroup/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "type": "PROCESS_GROUP" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_push-notification-service/conditional-naming-service/README.md b/BMW-Dynatrace-config/CD_push-notification-service/conditional-naming-service/README.md new file mode 100644 index 00000000..c34ef308 --- /dev/null +++ b/BMW-Dynatrace-config/CD_push-notification-service/conditional-naming-service/README.md @@ -0,0 +1,35 @@ +### Service Naming Rules + +A typical case could be that you access to *Transaction & Services* and you find two services that are exactly the same: +*DataDownloadV1* +*DataDownloadV1* + +If you drilldown into the service and you check in the process group, you may have a PROD and a E2E for each service. + +*Note: if you see that both process group are exactly the same, please contact a Dynatrace expert to create a Process* +*Group detection rule* + +In the case the PG are PROD and E2E, then we need to create a rule that looks like this: + +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {Service:DetectedName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +- tag: Infotainment +- skipDeployment: false +``` + +The rule will get the Service Detected Name (current name) and it will extract (with a regex) the part of the kubernetes namespace after the "-", so -prod or -e2e, resulting in: +*DataDownloadV1 - prod* +*DataDownloadV1 - e2e* + +Now, services will be easy to identify. + +You can create rules based on any property/metadata. Some other placeholder's eamples: +{Service:DatabaseName} - E2E +{Service:WebServiceName} - {ProcessGroup:Kubernetes:microservice} - {ProcessGroup:Kubernetes:environment} +{Service:DetectedName} - {ProcessGroup:KubernetesContainerName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +{Service:DetectedName} - {ProcessGroup:SpringBootProfileName/[^\\-]*$} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_push-notification-service/conditional-naming-service/conditional-naming-service.yaml b/BMW-Dynatrace-config/CD_push-notification-service/conditional-naming-service/conditional-naming-service.yaml new file mode 100644 index 00000000..e6faf023 --- /dev/null +++ b/BMW-Dynatrace-config/CD_push-notification-service/conditional-naming-service/conditional-naming-service.yaml @@ -0,0 +1,8 @@ +config: +- CDpush-notification-service: template.json + +CDpush-notification-service: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: push-notification-service +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_push-notification-service/conditional-naming-service/template.json b/BMW-Dynatrace-config/CD_push-notification-service/conditional-naming-service/template.json new file mode 100644 index 00000000..5d4fac56 --- /dev/null +++ b/BMW-Dynatrace-config/CD_push-notification-service/conditional-naming-service/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "type": "SERVICE" +} \ 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 index d41c4c77..5f35e5c1 100644 --- 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 @@ -1,30 +1,4 @@ -## 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 configure custom services? -## 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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Custom+Services) page to configure your custom services. \ 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 index 92e734fa..1695924c 100644 --- a/BMW-Dynatrace-config/CD_push-notification-service/synthetic-monitor/README.md +++ b/BMW-Dynatrace-config/CD_push-notification-service/synthetic-monitor/README.md @@ -1,37 +1,4 @@ -# Synthetic Configuration -To calculate the Availability KPI, a synthetic must be configured. +### How to configure synthetics? -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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Synthetic+Monitors) page to configure your synthetics. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_push-notification-settings-composite-service/conditional-naming-processgroup/README.md b/BMW-Dynatrace-config/CD_push-notification-settings-composite-service/conditional-naming-processgroup/README.md new file mode 100644 index 00000000..f94196a5 --- /dev/null +++ b/BMW-Dynatrace-config/CD_push-notification-settings-composite-service/conditional-naming-processgroup/README.md @@ -0,0 +1,67 @@ +### Process Group Detection Rules and Naming + +#### Detection Rule or Naming? + +For the explanation, we're using a real example of the Infotainment application: + +!(PGNaming1)[../../../../img/PGNaming1.PNG] + +Before working with your dashboards and alerting profiles, an important task to do when working with Dynatrace is checking +the structure of your applications (process groups). You can do that clicking under *technologies* and filter using your +application Management Zone. + +In the picture above, there are two Process Groups called bon-information-prod. **If you see duplicated process groups like in** +**this case, you MUST follow this guideline** + +Next step would be to open both process groups and compare the metadata. In that way, you can identify if all process instances are +part of the same application or not. An easy way to do that is asking yourself: how many instances of my application do i have? + +If you have 4 instances in total and you're able to see 2 in one PG and other 2 in other PG it means that **they are part of the ** +**same application** + +Another situation could be that checking on the metadata, then you see that are **two different application** and Dynatrace is just naming +the process group in the same way + +*Same application* +- Problem: Dynatrace is creating two different process groups, what transalates in two separated services for the same application. Instead of +seeing all the traffic in one service, you will have it splitted and it will complicate your monitoring +- Solution: create a process group detection rule. Contact Dynatrace Expert + +*Different application* +- Problem: Dynatrace is just naming in the same way applications that are different. +- Solution: This case is less severe, since it can be fixed with a process group naming rule. + + +What about our example? +!(PGNaming2)[../../../../img/PGNaming2.PNG] +!(PGNaming3)[../../../../img/PGNaming3.PNG] + +Based on the feedback of the infotaiment team, each process group is a different application (microservice) and it's visible in the kubernetes container/workload +within the metadata of each Process Group. + +#### How to create a Process Group Detection Rule +1. Open the *conditional-naming-processgroup.yaml* file and create a rule that looks like this: +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName} +- tag: Infotainment +- skipDeployment: false +``` +The result of the rule will be renaming the PG to this: +``` +bon-information-prod ipa +bon-information-prod rsl +``` + +Other possible placeholders that you can use are for example: +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName/[^\\-]*$} +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesFullPodName/buffet-(.*?)-} +{ProcessGroup:DetectedName} - {HostGroup:Name/[^\\_]*$} +{ProcessGroup:KubernetesNamespace} +{ProcessGroup:CommandLineArgs/.*?\\-f\\s\\/www\\/(.*?)\\/generated\\/httpd\\.conf.*?} + +You can combine different ones. Check the (documentation)[link] for more \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_push-notification-settings-composite-service/conditional-naming-processgroup/conditional-naming-processgroup.yaml b/BMW-Dynatrace-config/CD_push-notification-settings-composite-service/conditional-naming-processgroup/conditional-naming-processgroup.yaml new file mode 100644 index 00000000..4f1de0ff --- /dev/null +++ b/BMW-Dynatrace-config/CD_push-notification-settings-composite-service/conditional-naming-processgroup/conditional-naming-processgroup.yaml @@ -0,0 +1,8 @@ +config: +- CDpush-notification-settings-composite-service: template.json + +CDpush-notification-settings-composite-service: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: push-notification-settings-composite-service +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_push-notification-settings-composite-service/conditional-naming-processgroup/template.json b/BMW-Dynatrace-config/CD_push-notification-settings-composite-service/conditional-naming-processgroup/template.json new file mode 100644 index 00000000..7c039808 --- /dev/null +++ b/BMW-Dynatrace-config/CD_push-notification-settings-composite-service/conditional-naming-processgroup/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "type": "PROCESS_GROUP" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_push-notification-settings-composite-service/conditional-naming-service/README.md b/BMW-Dynatrace-config/CD_push-notification-settings-composite-service/conditional-naming-service/README.md new file mode 100644 index 00000000..c34ef308 --- /dev/null +++ b/BMW-Dynatrace-config/CD_push-notification-settings-composite-service/conditional-naming-service/README.md @@ -0,0 +1,35 @@ +### Service Naming Rules + +A typical case could be that you access to *Transaction & Services* and you find two services that are exactly the same: +*DataDownloadV1* +*DataDownloadV1* + +If you drilldown into the service and you check in the process group, you may have a PROD and a E2E for each service. + +*Note: if you see that both process group are exactly the same, please contact a Dynatrace expert to create a Process* +*Group detection rule* + +In the case the PG are PROD and E2E, then we need to create a rule that looks like this: + +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {Service:DetectedName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +- tag: Infotainment +- skipDeployment: false +``` + +The rule will get the Service Detected Name (current name) and it will extract (with a regex) the part of the kubernetes namespace after the "-", so -prod or -e2e, resulting in: +*DataDownloadV1 - prod* +*DataDownloadV1 - e2e* + +Now, services will be easy to identify. + +You can create rules based on any property/metadata. Some other placeholder's eamples: +{Service:DatabaseName} - E2E +{Service:WebServiceName} - {ProcessGroup:Kubernetes:microservice} - {ProcessGroup:Kubernetes:environment} +{Service:DetectedName} - {ProcessGroup:KubernetesContainerName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +{Service:DetectedName} - {ProcessGroup:SpringBootProfileName/[^\\-]*$} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_push-notification-settings-composite-service/conditional-naming-service/conditional-naming-service.yaml b/BMW-Dynatrace-config/CD_push-notification-settings-composite-service/conditional-naming-service/conditional-naming-service.yaml new file mode 100644 index 00000000..4f1de0ff --- /dev/null +++ b/BMW-Dynatrace-config/CD_push-notification-settings-composite-service/conditional-naming-service/conditional-naming-service.yaml @@ -0,0 +1,8 @@ +config: +- CDpush-notification-settings-composite-service: template.json + +CDpush-notification-settings-composite-service: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: push-notification-settings-composite-service +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_push-notification-settings-composite-service/conditional-naming-service/template.json b/BMW-Dynatrace-config/CD_push-notification-settings-composite-service/conditional-naming-service/template.json new file mode 100644 index 00000000..5d4fac56 --- /dev/null +++ b/BMW-Dynatrace-config/CD_push-notification-settings-composite-service/conditional-naming-service/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "type": "SERVICE" +} \ 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 index d41c4c77..5f35e5c1 100644 --- 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 @@ -1,30 +1,4 @@ -## 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 configure custom services? -## 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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Custom+Services) page to configure your custom services. \ 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 index 92e734fa..1695924c 100644 --- 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 @@ -1,37 +1,4 @@ -# Synthetic Configuration -To calculate the Availability KPI, a synthetic must be configured. +### How to configure synthetics? -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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Synthetic+Monitors) page to configure your synthetics. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_recall-analytics-service/conditional-naming-processgroup/README.md b/BMW-Dynatrace-config/CD_recall-analytics-service/conditional-naming-processgroup/README.md new file mode 100644 index 00000000..f94196a5 --- /dev/null +++ b/BMW-Dynatrace-config/CD_recall-analytics-service/conditional-naming-processgroup/README.md @@ -0,0 +1,67 @@ +### Process Group Detection Rules and Naming + +#### Detection Rule or Naming? + +For the explanation, we're using a real example of the Infotainment application: + +!(PGNaming1)[../../../../img/PGNaming1.PNG] + +Before working with your dashboards and alerting profiles, an important task to do when working with Dynatrace is checking +the structure of your applications (process groups). You can do that clicking under *technologies* and filter using your +application Management Zone. + +In the picture above, there are two Process Groups called bon-information-prod. **If you see duplicated process groups like in** +**this case, you MUST follow this guideline** + +Next step would be to open both process groups and compare the metadata. In that way, you can identify if all process instances are +part of the same application or not. An easy way to do that is asking yourself: how many instances of my application do i have? + +If you have 4 instances in total and you're able to see 2 in one PG and other 2 in other PG it means that **they are part of the ** +**same application** + +Another situation could be that checking on the metadata, then you see that are **two different application** and Dynatrace is just naming +the process group in the same way + +*Same application* +- Problem: Dynatrace is creating two different process groups, what transalates in two separated services for the same application. Instead of +seeing all the traffic in one service, you will have it splitted and it will complicate your monitoring +- Solution: create a process group detection rule. Contact Dynatrace Expert + +*Different application* +- Problem: Dynatrace is just naming in the same way applications that are different. +- Solution: This case is less severe, since it can be fixed with a process group naming rule. + + +What about our example? +!(PGNaming2)[../../../../img/PGNaming2.PNG] +!(PGNaming3)[../../../../img/PGNaming3.PNG] + +Based on the feedback of the infotaiment team, each process group is a different application (microservice) and it's visible in the kubernetes container/workload +within the metadata of each Process Group. + +#### How to create a Process Group Detection Rule +1. Open the *conditional-naming-processgroup.yaml* file and create a rule that looks like this: +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName} +- tag: Infotainment +- skipDeployment: false +``` +The result of the rule will be renaming the PG to this: +``` +bon-information-prod ipa +bon-information-prod rsl +``` + +Other possible placeholders that you can use are for example: +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName/[^\\-]*$} +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesFullPodName/buffet-(.*?)-} +{ProcessGroup:DetectedName} - {HostGroup:Name/[^\\_]*$} +{ProcessGroup:KubernetesNamespace} +{ProcessGroup:CommandLineArgs/.*?\\-f\\s\\/www\\/(.*?)\\/generated\\/httpd\\.conf.*?} + +You can combine different ones. Check the (documentation)[link] for more \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_recall-analytics-service/conditional-naming-processgroup/conditional-naming-processgroup.yaml b/BMW-Dynatrace-config/CD_recall-analytics-service/conditional-naming-processgroup/conditional-naming-processgroup.yaml new file mode 100644 index 00000000..18dfed3a --- /dev/null +++ b/BMW-Dynatrace-config/CD_recall-analytics-service/conditional-naming-processgroup/conditional-naming-processgroup.yaml @@ -0,0 +1,8 @@ +config: +- CDrecall-analytics-service: template.json + +CDrecall-analytics-service: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: recall-analytics-service +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_recall-analytics-service/conditional-naming-processgroup/template.json b/BMW-Dynatrace-config/CD_recall-analytics-service/conditional-naming-processgroup/template.json new file mode 100644 index 00000000..7c039808 --- /dev/null +++ b/BMW-Dynatrace-config/CD_recall-analytics-service/conditional-naming-processgroup/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "type": "PROCESS_GROUP" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_recall-analytics-service/conditional-naming-service/README.md b/BMW-Dynatrace-config/CD_recall-analytics-service/conditional-naming-service/README.md new file mode 100644 index 00000000..c34ef308 --- /dev/null +++ b/BMW-Dynatrace-config/CD_recall-analytics-service/conditional-naming-service/README.md @@ -0,0 +1,35 @@ +### Service Naming Rules + +A typical case could be that you access to *Transaction & Services* and you find two services that are exactly the same: +*DataDownloadV1* +*DataDownloadV1* + +If you drilldown into the service and you check in the process group, you may have a PROD and a E2E for each service. + +*Note: if you see that both process group are exactly the same, please contact a Dynatrace expert to create a Process* +*Group detection rule* + +In the case the PG are PROD and E2E, then we need to create a rule that looks like this: + +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {Service:DetectedName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +- tag: Infotainment +- skipDeployment: false +``` + +The rule will get the Service Detected Name (current name) and it will extract (with a regex) the part of the kubernetes namespace after the "-", so -prod or -e2e, resulting in: +*DataDownloadV1 - prod* +*DataDownloadV1 - e2e* + +Now, services will be easy to identify. + +You can create rules based on any property/metadata. Some other placeholder's eamples: +{Service:DatabaseName} - E2E +{Service:WebServiceName} - {ProcessGroup:Kubernetes:microservice} - {ProcessGroup:Kubernetes:environment} +{Service:DetectedName} - {ProcessGroup:KubernetesContainerName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +{Service:DetectedName} - {ProcessGroup:SpringBootProfileName/[^\\-]*$} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_recall-analytics-service/conditional-naming-service/conditional-naming-service.yaml b/BMW-Dynatrace-config/CD_recall-analytics-service/conditional-naming-service/conditional-naming-service.yaml new file mode 100644 index 00000000..18dfed3a --- /dev/null +++ b/BMW-Dynatrace-config/CD_recall-analytics-service/conditional-naming-service/conditional-naming-service.yaml @@ -0,0 +1,8 @@ +config: +- CDrecall-analytics-service: template.json + +CDrecall-analytics-service: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: recall-analytics-service +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_recall-analytics-service/conditional-naming-service/template.json b/BMW-Dynatrace-config/CD_recall-analytics-service/conditional-naming-service/template.json new file mode 100644 index 00000000..5d4fac56 --- /dev/null +++ b/BMW-Dynatrace-config/CD_recall-analytics-service/conditional-naming-service/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "type": "SERVICE" +} \ 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 index d41c4c77..5f35e5c1 100644 --- 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 @@ -1,30 +1,4 @@ -## 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 configure custom services? -## 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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Custom+Services) page to configure your custom services. \ 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 index 92e734fa..1695924c 100644 --- a/BMW-Dynatrace-config/CD_recall-analytics-service/synthetic-monitor/README.md +++ b/BMW-Dynatrace-config/CD_recall-analytics-service/synthetic-monitor/README.md @@ -1,37 +1,4 @@ -# Synthetic Configuration -To calculate the Availability KPI, a synthetic must be configured. +### How to configure synthetics? -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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Synthetic+Monitors) page to configure your synthetics. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_recall-client-service/conditional-naming-processgroup/README.md b/BMW-Dynatrace-config/CD_recall-client-service/conditional-naming-processgroup/README.md new file mode 100644 index 00000000..f94196a5 --- /dev/null +++ b/BMW-Dynatrace-config/CD_recall-client-service/conditional-naming-processgroup/README.md @@ -0,0 +1,67 @@ +### Process Group Detection Rules and Naming + +#### Detection Rule or Naming? + +For the explanation, we're using a real example of the Infotainment application: + +!(PGNaming1)[../../../../img/PGNaming1.PNG] + +Before working with your dashboards and alerting profiles, an important task to do when working with Dynatrace is checking +the structure of your applications (process groups). You can do that clicking under *technologies* and filter using your +application Management Zone. + +In the picture above, there are two Process Groups called bon-information-prod. **If you see duplicated process groups like in** +**this case, you MUST follow this guideline** + +Next step would be to open both process groups and compare the metadata. In that way, you can identify if all process instances are +part of the same application or not. An easy way to do that is asking yourself: how many instances of my application do i have? + +If you have 4 instances in total and you're able to see 2 in one PG and other 2 in other PG it means that **they are part of the ** +**same application** + +Another situation could be that checking on the metadata, then you see that are **two different application** and Dynatrace is just naming +the process group in the same way + +*Same application* +- Problem: Dynatrace is creating two different process groups, what transalates in two separated services for the same application. Instead of +seeing all the traffic in one service, you will have it splitted and it will complicate your monitoring +- Solution: create a process group detection rule. Contact Dynatrace Expert + +*Different application* +- Problem: Dynatrace is just naming in the same way applications that are different. +- Solution: This case is less severe, since it can be fixed with a process group naming rule. + + +What about our example? +!(PGNaming2)[../../../../img/PGNaming2.PNG] +!(PGNaming3)[../../../../img/PGNaming3.PNG] + +Based on the feedback of the infotaiment team, each process group is a different application (microservice) and it's visible in the kubernetes container/workload +within the metadata of each Process Group. + +#### How to create a Process Group Detection Rule +1. Open the *conditional-naming-processgroup.yaml* file and create a rule that looks like this: +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName} +- tag: Infotainment +- skipDeployment: false +``` +The result of the rule will be renaming the PG to this: +``` +bon-information-prod ipa +bon-information-prod rsl +``` + +Other possible placeholders that you can use are for example: +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName/[^\\-]*$} +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesFullPodName/buffet-(.*?)-} +{ProcessGroup:DetectedName} - {HostGroup:Name/[^\\_]*$} +{ProcessGroup:KubernetesNamespace} +{ProcessGroup:CommandLineArgs/.*?\\-f\\s\\/www\\/(.*?)\\/generated\\/httpd\\.conf.*?} + +You can combine different ones. Check the (documentation)[link] for more \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_recall-client-service/conditional-naming-processgroup/conditional-naming-processgroup.yaml b/BMW-Dynatrace-config/CD_recall-client-service/conditional-naming-processgroup/conditional-naming-processgroup.yaml new file mode 100644 index 00000000..07021bbb --- /dev/null +++ b/BMW-Dynatrace-config/CD_recall-client-service/conditional-naming-processgroup/conditional-naming-processgroup.yaml @@ -0,0 +1,8 @@ +config: +- CDrecall-client-service: template.json + +CDrecall-client-service: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: recall-client-service +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_recall-client-service/conditional-naming-processgroup/template.json b/BMW-Dynatrace-config/CD_recall-client-service/conditional-naming-processgroup/template.json new file mode 100644 index 00000000..7c039808 --- /dev/null +++ b/BMW-Dynatrace-config/CD_recall-client-service/conditional-naming-processgroup/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "type": "PROCESS_GROUP" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_recall-client-service/conditional-naming-service/README.md b/BMW-Dynatrace-config/CD_recall-client-service/conditional-naming-service/README.md new file mode 100644 index 00000000..c34ef308 --- /dev/null +++ b/BMW-Dynatrace-config/CD_recall-client-service/conditional-naming-service/README.md @@ -0,0 +1,35 @@ +### Service Naming Rules + +A typical case could be that you access to *Transaction & Services* and you find two services that are exactly the same: +*DataDownloadV1* +*DataDownloadV1* + +If you drilldown into the service and you check in the process group, you may have a PROD and a E2E for each service. + +*Note: if you see that both process group are exactly the same, please contact a Dynatrace expert to create a Process* +*Group detection rule* + +In the case the PG are PROD and E2E, then we need to create a rule that looks like this: + +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {Service:DetectedName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +- tag: Infotainment +- skipDeployment: false +``` + +The rule will get the Service Detected Name (current name) and it will extract (with a regex) the part of the kubernetes namespace after the "-", so -prod or -e2e, resulting in: +*DataDownloadV1 - prod* +*DataDownloadV1 - e2e* + +Now, services will be easy to identify. + +You can create rules based on any property/metadata. Some other placeholder's eamples: +{Service:DatabaseName} - E2E +{Service:WebServiceName} - {ProcessGroup:Kubernetes:microservice} - {ProcessGroup:Kubernetes:environment} +{Service:DetectedName} - {ProcessGroup:KubernetesContainerName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +{Service:DetectedName} - {ProcessGroup:SpringBootProfileName/[^\\-]*$} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_recall-client-service/conditional-naming-service/conditional-naming-service.yaml b/BMW-Dynatrace-config/CD_recall-client-service/conditional-naming-service/conditional-naming-service.yaml new file mode 100644 index 00000000..07021bbb --- /dev/null +++ b/BMW-Dynatrace-config/CD_recall-client-service/conditional-naming-service/conditional-naming-service.yaml @@ -0,0 +1,8 @@ +config: +- CDrecall-client-service: template.json + +CDrecall-client-service: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: recall-client-service +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_recall-client-service/conditional-naming-service/template.json b/BMW-Dynatrace-config/CD_recall-client-service/conditional-naming-service/template.json new file mode 100644 index 00000000..5d4fac56 --- /dev/null +++ b/BMW-Dynatrace-config/CD_recall-client-service/conditional-naming-service/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "type": "SERVICE" +} \ 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 index d41c4c77..5f35e5c1 100644 --- 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 @@ -1,30 +1,4 @@ -## 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 configure custom services? -## 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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Custom+Services) page to configure your custom services. \ 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 index 92e734fa..1695924c 100644 --- a/BMW-Dynatrace-config/CD_recall-client-service/synthetic-monitor/README.md +++ b/BMW-Dynatrace-config/CD_recall-client-service/synthetic-monitor/README.md @@ -1,37 +1,4 @@ -# Synthetic Configuration -To calculate the Availability KPI, a synthetic must be configured. +### How to configure synthetics? -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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Synthetic+Monitors) page to configure your synthetics. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_recall-handler-service/conditional-naming-processgroup/README.md b/BMW-Dynatrace-config/CD_recall-handler-service/conditional-naming-processgroup/README.md new file mode 100644 index 00000000..f94196a5 --- /dev/null +++ b/BMW-Dynatrace-config/CD_recall-handler-service/conditional-naming-processgroup/README.md @@ -0,0 +1,67 @@ +### Process Group Detection Rules and Naming + +#### Detection Rule or Naming? + +For the explanation, we're using a real example of the Infotainment application: + +!(PGNaming1)[../../../../img/PGNaming1.PNG] + +Before working with your dashboards and alerting profiles, an important task to do when working with Dynatrace is checking +the structure of your applications (process groups). You can do that clicking under *technologies* and filter using your +application Management Zone. + +In the picture above, there are two Process Groups called bon-information-prod. **If you see duplicated process groups like in** +**this case, you MUST follow this guideline** + +Next step would be to open both process groups and compare the metadata. In that way, you can identify if all process instances are +part of the same application or not. An easy way to do that is asking yourself: how many instances of my application do i have? + +If you have 4 instances in total and you're able to see 2 in one PG and other 2 in other PG it means that **they are part of the ** +**same application** + +Another situation could be that checking on the metadata, then you see that are **two different application** and Dynatrace is just naming +the process group in the same way + +*Same application* +- Problem: Dynatrace is creating two different process groups, what transalates in two separated services for the same application. Instead of +seeing all the traffic in one service, you will have it splitted and it will complicate your monitoring +- Solution: create a process group detection rule. Contact Dynatrace Expert + +*Different application* +- Problem: Dynatrace is just naming in the same way applications that are different. +- Solution: This case is less severe, since it can be fixed with a process group naming rule. + + +What about our example? +!(PGNaming2)[../../../../img/PGNaming2.PNG] +!(PGNaming3)[../../../../img/PGNaming3.PNG] + +Based on the feedback of the infotaiment team, each process group is a different application (microservice) and it's visible in the kubernetes container/workload +within the metadata of each Process Group. + +#### How to create a Process Group Detection Rule +1. Open the *conditional-naming-processgroup.yaml* file and create a rule that looks like this: +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName} +- tag: Infotainment +- skipDeployment: false +``` +The result of the rule will be renaming the PG to this: +``` +bon-information-prod ipa +bon-information-prod rsl +``` + +Other possible placeholders that you can use are for example: +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName/[^\\-]*$} +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesFullPodName/buffet-(.*?)-} +{ProcessGroup:DetectedName} - {HostGroup:Name/[^\\_]*$} +{ProcessGroup:KubernetesNamespace} +{ProcessGroup:CommandLineArgs/.*?\\-f\\s\\/www\\/(.*?)\\/generated\\/httpd\\.conf.*?} + +You can combine different ones. Check the (documentation)[link] for more \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_recall-handler-service/conditional-naming-processgroup/conditional-naming-processgroup.yaml b/BMW-Dynatrace-config/CD_recall-handler-service/conditional-naming-processgroup/conditional-naming-processgroup.yaml new file mode 100644 index 00000000..7f804e81 --- /dev/null +++ b/BMW-Dynatrace-config/CD_recall-handler-service/conditional-naming-processgroup/conditional-naming-processgroup.yaml @@ -0,0 +1,8 @@ +config: +- CDrecall-handler-service: template.json + +CDrecall-handler-service: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: recall-handler-service +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_recall-handler-service/conditional-naming-processgroup/template.json b/BMW-Dynatrace-config/CD_recall-handler-service/conditional-naming-processgroup/template.json new file mode 100644 index 00000000..7c039808 --- /dev/null +++ b/BMW-Dynatrace-config/CD_recall-handler-service/conditional-naming-processgroup/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "type": "PROCESS_GROUP" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_recall-handler-service/conditional-naming-service/README.md b/BMW-Dynatrace-config/CD_recall-handler-service/conditional-naming-service/README.md new file mode 100644 index 00000000..c34ef308 --- /dev/null +++ b/BMW-Dynatrace-config/CD_recall-handler-service/conditional-naming-service/README.md @@ -0,0 +1,35 @@ +### Service Naming Rules + +A typical case could be that you access to *Transaction & Services* and you find two services that are exactly the same: +*DataDownloadV1* +*DataDownloadV1* + +If you drilldown into the service and you check in the process group, you may have a PROD and a E2E for each service. + +*Note: if you see that both process group are exactly the same, please contact a Dynatrace expert to create a Process* +*Group detection rule* + +In the case the PG are PROD and E2E, then we need to create a rule that looks like this: + +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {Service:DetectedName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +- tag: Infotainment +- skipDeployment: false +``` + +The rule will get the Service Detected Name (current name) and it will extract (with a regex) the part of the kubernetes namespace after the "-", so -prod or -e2e, resulting in: +*DataDownloadV1 - prod* +*DataDownloadV1 - e2e* + +Now, services will be easy to identify. + +You can create rules based on any property/metadata. Some other placeholder's eamples: +{Service:DatabaseName} - E2E +{Service:WebServiceName} - {ProcessGroup:Kubernetes:microservice} - {ProcessGroup:Kubernetes:environment} +{Service:DetectedName} - {ProcessGroup:KubernetesContainerName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +{Service:DetectedName} - {ProcessGroup:SpringBootProfileName/[^\\-]*$} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_recall-handler-service/conditional-naming-service/conditional-naming-service.yaml b/BMW-Dynatrace-config/CD_recall-handler-service/conditional-naming-service/conditional-naming-service.yaml new file mode 100644 index 00000000..7f804e81 --- /dev/null +++ b/BMW-Dynatrace-config/CD_recall-handler-service/conditional-naming-service/conditional-naming-service.yaml @@ -0,0 +1,8 @@ +config: +- CDrecall-handler-service: template.json + +CDrecall-handler-service: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: recall-handler-service +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_recall-handler-service/conditional-naming-service/template.json b/BMW-Dynatrace-config/CD_recall-handler-service/conditional-naming-service/template.json new file mode 100644 index 00000000..5d4fac56 --- /dev/null +++ b/BMW-Dynatrace-config/CD_recall-handler-service/conditional-naming-service/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "type": "SERVICE" +} \ 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 index d41c4c77..5f35e5c1 100644 --- 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 @@ -1,30 +1,4 @@ -## 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 configure custom services? -## 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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Custom+Services) page to configure your custom services. \ 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 index 92e734fa..1695924c 100644 --- a/BMW-Dynatrace-config/CD_recall-handler-service/synthetic-monitor/README.md +++ b/BMW-Dynatrace-config/CD_recall-handler-service/synthetic-monitor/README.md @@ -1,37 +1,4 @@ -# Synthetic Configuration -To calculate the Availability KPI, a synthetic must be configured. +### How to configure synthetics? -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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Synthetic+Monitors) page to configure your synthetics. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_recall-notification-service/conditional-naming-processgroup/README.md b/BMW-Dynatrace-config/CD_recall-notification-service/conditional-naming-processgroup/README.md new file mode 100644 index 00000000..f94196a5 --- /dev/null +++ b/BMW-Dynatrace-config/CD_recall-notification-service/conditional-naming-processgroup/README.md @@ -0,0 +1,67 @@ +### Process Group Detection Rules and Naming + +#### Detection Rule or Naming? + +For the explanation, we're using a real example of the Infotainment application: + +!(PGNaming1)[../../../../img/PGNaming1.PNG] + +Before working with your dashboards and alerting profiles, an important task to do when working with Dynatrace is checking +the structure of your applications (process groups). You can do that clicking under *technologies* and filter using your +application Management Zone. + +In the picture above, there are two Process Groups called bon-information-prod. **If you see duplicated process groups like in** +**this case, you MUST follow this guideline** + +Next step would be to open both process groups and compare the metadata. In that way, you can identify if all process instances are +part of the same application or not. An easy way to do that is asking yourself: how many instances of my application do i have? + +If you have 4 instances in total and you're able to see 2 in one PG and other 2 in other PG it means that **they are part of the ** +**same application** + +Another situation could be that checking on the metadata, then you see that are **two different application** and Dynatrace is just naming +the process group in the same way + +*Same application* +- Problem: Dynatrace is creating two different process groups, what transalates in two separated services for the same application. Instead of +seeing all the traffic in one service, you will have it splitted and it will complicate your monitoring +- Solution: create a process group detection rule. Contact Dynatrace Expert + +*Different application* +- Problem: Dynatrace is just naming in the same way applications that are different. +- Solution: This case is less severe, since it can be fixed with a process group naming rule. + + +What about our example? +!(PGNaming2)[../../../../img/PGNaming2.PNG] +!(PGNaming3)[../../../../img/PGNaming3.PNG] + +Based on the feedback of the infotaiment team, each process group is a different application (microservice) and it's visible in the kubernetes container/workload +within the metadata of each Process Group. + +#### How to create a Process Group Detection Rule +1. Open the *conditional-naming-processgroup.yaml* file and create a rule that looks like this: +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName} +- tag: Infotainment +- skipDeployment: false +``` +The result of the rule will be renaming the PG to this: +``` +bon-information-prod ipa +bon-information-prod rsl +``` + +Other possible placeholders that you can use are for example: +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName/[^\\-]*$} +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesFullPodName/buffet-(.*?)-} +{ProcessGroup:DetectedName} - {HostGroup:Name/[^\\_]*$} +{ProcessGroup:KubernetesNamespace} +{ProcessGroup:CommandLineArgs/.*?\\-f\\s\\/www\\/(.*?)\\/generated\\/httpd\\.conf.*?} + +You can combine different ones. Check the (documentation)[link] for more \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_recall-notification-service/conditional-naming-processgroup/conditional-naming-processgroup.yaml b/BMW-Dynatrace-config/CD_recall-notification-service/conditional-naming-processgroup/conditional-naming-processgroup.yaml new file mode 100644 index 00000000..5a52d1bf --- /dev/null +++ b/BMW-Dynatrace-config/CD_recall-notification-service/conditional-naming-processgroup/conditional-naming-processgroup.yaml @@ -0,0 +1,8 @@ +config: +- CDrecall-notification-service: template.json + +CDrecall-notification-service: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: recall-notification-service +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_recall-notification-service/conditional-naming-processgroup/template.json b/BMW-Dynatrace-config/CD_recall-notification-service/conditional-naming-processgroup/template.json new file mode 100644 index 00000000..7c039808 --- /dev/null +++ b/BMW-Dynatrace-config/CD_recall-notification-service/conditional-naming-processgroup/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "type": "PROCESS_GROUP" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_recall-notification-service/conditional-naming-service/README.md b/BMW-Dynatrace-config/CD_recall-notification-service/conditional-naming-service/README.md new file mode 100644 index 00000000..c34ef308 --- /dev/null +++ b/BMW-Dynatrace-config/CD_recall-notification-service/conditional-naming-service/README.md @@ -0,0 +1,35 @@ +### Service Naming Rules + +A typical case could be that you access to *Transaction & Services* and you find two services that are exactly the same: +*DataDownloadV1* +*DataDownloadV1* + +If you drilldown into the service and you check in the process group, you may have a PROD and a E2E for each service. + +*Note: if you see that both process group are exactly the same, please contact a Dynatrace expert to create a Process* +*Group detection rule* + +In the case the PG are PROD and E2E, then we need to create a rule that looks like this: + +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {Service:DetectedName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +- tag: Infotainment +- skipDeployment: false +``` + +The rule will get the Service Detected Name (current name) and it will extract (with a regex) the part of the kubernetes namespace after the "-", so -prod or -e2e, resulting in: +*DataDownloadV1 - prod* +*DataDownloadV1 - e2e* + +Now, services will be easy to identify. + +You can create rules based on any property/metadata. Some other placeholder's eamples: +{Service:DatabaseName} - E2E +{Service:WebServiceName} - {ProcessGroup:Kubernetes:microservice} - {ProcessGroup:Kubernetes:environment} +{Service:DetectedName} - {ProcessGroup:KubernetesContainerName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +{Service:DetectedName} - {ProcessGroup:SpringBootProfileName/[^\\-]*$} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_recall-notification-service/conditional-naming-service/conditional-naming-service.yaml b/BMW-Dynatrace-config/CD_recall-notification-service/conditional-naming-service/conditional-naming-service.yaml new file mode 100644 index 00000000..5a52d1bf --- /dev/null +++ b/BMW-Dynatrace-config/CD_recall-notification-service/conditional-naming-service/conditional-naming-service.yaml @@ -0,0 +1,8 @@ +config: +- CDrecall-notification-service: template.json + +CDrecall-notification-service: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: recall-notification-service +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_recall-notification-service/conditional-naming-service/template.json b/BMW-Dynatrace-config/CD_recall-notification-service/conditional-naming-service/template.json new file mode 100644 index 00000000..5d4fac56 --- /dev/null +++ b/BMW-Dynatrace-config/CD_recall-notification-service/conditional-naming-service/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "type": "SERVICE" +} \ 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 index d41c4c77..5f35e5c1 100644 --- 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 @@ -1,30 +1,4 @@ -## 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 configure custom services? -## 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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Custom+Services) page to configure your custom services. \ 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 index 92e734fa..1695924c 100644 --- a/BMW-Dynatrace-config/CD_recall-notification-service/synthetic-monitor/README.md +++ b/BMW-Dynatrace-config/CD_recall-notification-service/synthetic-monitor/README.md @@ -1,37 +1,4 @@ -# Synthetic Configuration -To calculate the Availability KPI, a synthetic must be configured. +### How to configure synthetics? -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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Synthetic+Monitors) page to configure your synthetics. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_recall-scheduler-service/conditional-naming-processgroup/README.md b/BMW-Dynatrace-config/CD_recall-scheduler-service/conditional-naming-processgroup/README.md new file mode 100644 index 00000000..f94196a5 --- /dev/null +++ b/BMW-Dynatrace-config/CD_recall-scheduler-service/conditional-naming-processgroup/README.md @@ -0,0 +1,67 @@ +### Process Group Detection Rules and Naming + +#### Detection Rule or Naming? + +For the explanation, we're using a real example of the Infotainment application: + +!(PGNaming1)[../../../../img/PGNaming1.PNG] + +Before working with your dashboards and alerting profiles, an important task to do when working with Dynatrace is checking +the structure of your applications (process groups). You can do that clicking under *technologies* and filter using your +application Management Zone. + +In the picture above, there are two Process Groups called bon-information-prod. **If you see duplicated process groups like in** +**this case, you MUST follow this guideline** + +Next step would be to open both process groups and compare the metadata. In that way, you can identify if all process instances are +part of the same application or not. An easy way to do that is asking yourself: how many instances of my application do i have? + +If you have 4 instances in total and you're able to see 2 in one PG and other 2 in other PG it means that **they are part of the ** +**same application** + +Another situation could be that checking on the metadata, then you see that are **two different application** and Dynatrace is just naming +the process group in the same way + +*Same application* +- Problem: Dynatrace is creating two different process groups, what transalates in two separated services for the same application. Instead of +seeing all the traffic in one service, you will have it splitted and it will complicate your monitoring +- Solution: create a process group detection rule. Contact Dynatrace Expert + +*Different application* +- Problem: Dynatrace is just naming in the same way applications that are different. +- Solution: This case is less severe, since it can be fixed with a process group naming rule. + + +What about our example? +!(PGNaming2)[../../../../img/PGNaming2.PNG] +!(PGNaming3)[../../../../img/PGNaming3.PNG] + +Based on the feedback of the infotaiment team, each process group is a different application (microservice) and it's visible in the kubernetes container/workload +within the metadata of each Process Group. + +#### How to create a Process Group Detection Rule +1. Open the *conditional-naming-processgroup.yaml* file and create a rule that looks like this: +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName} +- tag: Infotainment +- skipDeployment: false +``` +The result of the rule will be renaming the PG to this: +``` +bon-information-prod ipa +bon-information-prod rsl +``` + +Other possible placeholders that you can use are for example: +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName/[^\\-]*$} +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesFullPodName/buffet-(.*?)-} +{ProcessGroup:DetectedName} - {HostGroup:Name/[^\\_]*$} +{ProcessGroup:KubernetesNamespace} +{ProcessGroup:CommandLineArgs/.*?\\-f\\s\\/www\\/(.*?)\\/generated\\/httpd\\.conf.*?} + +You can combine different ones. Check the (documentation)[link] for more \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_recall-scheduler-service/conditional-naming-processgroup/conditional-naming-processgroup.yaml b/BMW-Dynatrace-config/CD_recall-scheduler-service/conditional-naming-processgroup/conditional-naming-processgroup.yaml new file mode 100644 index 00000000..3bd7f440 --- /dev/null +++ b/BMW-Dynatrace-config/CD_recall-scheduler-service/conditional-naming-processgroup/conditional-naming-processgroup.yaml @@ -0,0 +1,8 @@ +config: +- CDrecall-scheduler-service: template.json + +CDrecall-scheduler-service: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: recall-scheduler-service +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_recall-scheduler-service/conditional-naming-processgroup/template.json b/BMW-Dynatrace-config/CD_recall-scheduler-service/conditional-naming-processgroup/template.json new file mode 100644 index 00000000..7c039808 --- /dev/null +++ b/BMW-Dynatrace-config/CD_recall-scheduler-service/conditional-naming-processgroup/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "type": "PROCESS_GROUP" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_recall-scheduler-service/conditional-naming-service/README.md b/BMW-Dynatrace-config/CD_recall-scheduler-service/conditional-naming-service/README.md new file mode 100644 index 00000000..c34ef308 --- /dev/null +++ b/BMW-Dynatrace-config/CD_recall-scheduler-service/conditional-naming-service/README.md @@ -0,0 +1,35 @@ +### Service Naming Rules + +A typical case could be that you access to *Transaction & Services* and you find two services that are exactly the same: +*DataDownloadV1* +*DataDownloadV1* + +If you drilldown into the service and you check in the process group, you may have a PROD and a E2E for each service. + +*Note: if you see that both process group are exactly the same, please contact a Dynatrace expert to create a Process* +*Group detection rule* + +In the case the PG are PROD and E2E, then we need to create a rule that looks like this: + +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {Service:DetectedName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +- tag: Infotainment +- skipDeployment: false +``` + +The rule will get the Service Detected Name (current name) and it will extract (with a regex) the part of the kubernetes namespace after the "-", so -prod or -e2e, resulting in: +*DataDownloadV1 - prod* +*DataDownloadV1 - e2e* + +Now, services will be easy to identify. + +You can create rules based on any property/metadata. Some other placeholder's eamples: +{Service:DatabaseName} - E2E +{Service:WebServiceName} - {ProcessGroup:Kubernetes:microservice} - {ProcessGroup:Kubernetes:environment} +{Service:DetectedName} - {ProcessGroup:KubernetesContainerName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +{Service:DetectedName} - {ProcessGroup:SpringBootProfileName/[^\\-]*$} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_recall-scheduler-service/conditional-naming-service/conditional-naming-service.yaml b/BMW-Dynatrace-config/CD_recall-scheduler-service/conditional-naming-service/conditional-naming-service.yaml new file mode 100644 index 00000000..3bd7f440 --- /dev/null +++ b/BMW-Dynatrace-config/CD_recall-scheduler-service/conditional-naming-service/conditional-naming-service.yaml @@ -0,0 +1,8 @@ +config: +- CDrecall-scheduler-service: template.json + +CDrecall-scheduler-service: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: recall-scheduler-service +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_recall-scheduler-service/conditional-naming-service/template.json b/BMW-Dynatrace-config/CD_recall-scheduler-service/conditional-naming-service/template.json new file mode 100644 index 00000000..5d4fac56 --- /dev/null +++ b/BMW-Dynatrace-config/CD_recall-scheduler-service/conditional-naming-service/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "type": "SERVICE" +} \ 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 index d41c4c77..5f35e5c1 100644 --- 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 @@ -1,30 +1,4 @@ -## 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 configure custom services? -## 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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Custom+Services) page to configure your custom services. \ 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 index 92e734fa..1695924c 100644 --- a/BMW-Dynatrace-config/CD_recall-scheduler-service/synthetic-monitor/README.md +++ b/BMW-Dynatrace-config/CD_recall-scheduler-service/synthetic-monitor/README.md @@ -1,37 +1,4 @@ -# Synthetic Configuration -To calculate the Availability KPI, a synthetic must be configured. +### How to configure synthetics? -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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Synthetic+Monitors) page to configure your synthetics. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_recall-tcn-service/conditional-naming-processgroup/README.md b/BMW-Dynatrace-config/CD_recall-tcn-service/conditional-naming-processgroup/README.md new file mode 100644 index 00000000..f94196a5 --- /dev/null +++ b/BMW-Dynatrace-config/CD_recall-tcn-service/conditional-naming-processgroup/README.md @@ -0,0 +1,67 @@ +### Process Group Detection Rules and Naming + +#### Detection Rule or Naming? + +For the explanation, we're using a real example of the Infotainment application: + +!(PGNaming1)[../../../../img/PGNaming1.PNG] + +Before working with your dashboards and alerting profiles, an important task to do when working with Dynatrace is checking +the structure of your applications (process groups). You can do that clicking under *technologies* and filter using your +application Management Zone. + +In the picture above, there are two Process Groups called bon-information-prod. **If you see duplicated process groups like in** +**this case, you MUST follow this guideline** + +Next step would be to open both process groups and compare the metadata. In that way, you can identify if all process instances are +part of the same application or not. An easy way to do that is asking yourself: how many instances of my application do i have? + +If you have 4 instances in total and you're able to see 2 in one PG and other 2 in other PG it means that **they are part of the ** +**same application** + +Another situation could be that checking on the metadata, then you see that are **two different application** and Dynatrace is just naming +the process group in the same way + +*Same application* +- Problem: Dynatrace is creating two different process groups, what transalates in two separated services for the same application. Instead of +seeing all the traffic in one service, you will have it splitted and it will complicate your monitoring +- Solution: create a process group detection rule. Contact Dynatrace Expert + +*Different application* +- Problem: Dynatrace is just naming in the same way applications that are different. +- Solution: This case is less severe, since it can be fixed with a process group naming rule. + + +What about our example? +!(PGNaming2)[../../../../img/PGNaming2.PNG] +!(PGNaming3)[../../../../img/PGNaming3.PNG] + +Based on the feedback of the infotaiment team, each process group is a different application (microservice) and it's visible in the kubernetes container/workload +within the metadata of each Process Group. + +#### How to create a Process Group Detection Rule +1. Open the *conditional-naming-processgroup.yaml* file and create a rule that looks like this: +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName} +- tag: Infotainment +- skipDeployment: false +``` +The result of the rule will be renaming the PG to this: +``` +bon-information-prod ipa +bon-information-prod rsl +``` + +Other possible placeholders that you can use are for example: +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName/[^\\-]*$} +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesFullPodName/buffet-(.*?)-} +{ProcessGroup:DetectedName} - {HostGroup:Name/[^\\_]*$} +{ProcessGroup:KubernetesNamespace} +{ProcessGroup:CommandLineArgs/.*?\\-f\\s\\/www\\/(.*?)\\/generated\\/httpd\\.conf.*?} + +You can combine different ones. Check the (documentation)[link] for more \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_recall-tcn-service/conditional-naming-processgroup/conditional-naming-processgroup.yaml b/BMW-Dynatrace-config/CD_recall-tcn-service/conditional-naming-processgroup/conditional-naming-processgroup.yaml new file mode 100644 index 00000000..8b7ada54 --- /dev/null +++ b/BMW-Dynatrace-config/CD_recall-tcn-service/conditional-naming-processgroup/conditional-naming-processgroup.yaml @@ -0,0 +1,8 @@ +config: +- CDrecall-tcn-service: template.json + +CDrecall-tcn-service: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: recall-tcn-service +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_recall-tcn-service/conditional-naming-processgroup/template.json b/BMW-Dynatrace-config/CD_recall-tcn-service/conditional-naming-processgroup/template.json new file mode 100644 index 00000000..7c039808 --- /dev/null +++ b/BMW-Dynatrace-config/CD_recall-tcn-service/conditional-naming-processgroup/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "type": "PROCESS_GROUP" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_recall-tcn-service/conditional-naming-service/README.md b/BMW-Dynatrace-config/CD_recall-tcn-service/conditional-naming-service/README.md new file mode 100644 index 00000000..c34ef308 --- /dev/null +++ b/BMW-Dynatrace-config/CD_recall-tcn-service/conditional-naming-service/README.md @@ -0,0 +1,35 @@ +### Service Naming Rules + +A typical case could be that you access to *Transaction & Services* and you find two services that are exactly the same: +*DataDownloadV1* +*DataDownloadV1* + +If you drilldown into the service and you check in the process group, you may have a PROD and a E2E for each service. + +*Note: if you see that both process group are exactly the same, please contact a Dynatrace expert to create a Process* +*Group detection rule* + +In the case the PG are PROD and E2E, then we need to create a rule that looks like this: + +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {Service:DetectedName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +- tag: Infotainment +- skipDeployment: false +``` + +The rule will get the Service Detected Name (current name) and it will extract (with a regex) the part of the kubernetes namespace after the "-", so -prod or -e2e, resulting in: +*DataDownloadV1 - prod* +*DataDownloadV1 - e2e* + +Now, services will be easy to identify. + +You can create rules based on any property/metadata. Some other placeholder's eamples: +{Service:DatabaseName} - E2E +{Service:WebServiceName} - {ProcessGroup:Kubernetes:microservice} - {ProcessGroup:Kubernetes:environment} +{Service:DetectedName} - {ProcessGroup:KubernetesContainerName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +{Service:DetectedName} - {ProcessGroup:SpringBootProfileName/[^\\-]*$} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_recall-tcn-service/conditional-naming-service/conditional-naming-service.yaml b/BMW-Dynatrace-config/CD_recall-tcn-service/conditional-naming-service/conditional-naming-service.yaml new file mode 100644 index 00000000..8b7ada54 --- /dev/null +++ b/BMW-Dynatrace-config/CD_recall-tcn-service/conditional-naming-service/conditional-naming-service.yaml @@ -0,0 +1,8 @@ +config: +- CDrecall-tcn-service: template.json + +CDrecall-tcn-service: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: recall-tcn-service +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_recall-tcn-service/conditional-naming-service/template.json b/BMW-Dynatrace-config/CD_recall-tcn-service/conditional-naming-service/template.json new file mode 100644 index 00000000..5d4fac56 --- /dev/null +++ b/BMW-Dynatrace-config/CD_recall-tcn-service/conditional-naming-service/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "type": "SERVICE" +} \ 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 index d41c4c77..5f35e5c1 100644 --- 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 @@ -1,30 +1,4 @@ -## 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 configure custom services? -## 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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Custom+Services) page to configure your custom services. \ 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 index 92e734fa..1695924c 100644 --- a/BMW-Dynatrace-config/CD_recall-tcn-service/synthetic-monitor/README.md +++ b/BMW-Dynatrace-config/CD_recall-tcn-service/synthetic-monitor/README.md @@ -1,37 +1,4 @@ -# Synthetic Configuration -To calculate the Availability KPI, a synthetic must be configured. +### How to configure synthetics? -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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Synthetic+Monitors) page to configure your synthetics. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_remote-360-composite-service/conditional-naming-processgroup/README.md b/BMW-Dynatrace-config/CD_remote-360-composite-service/conditional-naming-processgroup/README.md new file mode 100644 index 00000000..f94196a5 --- /dev/null +++ b/BMW-Dynatrace-config/CD_remote-360-composite-service/conditional-naming-processgroup/README.md @@ -0,0 +1,67 @@ +### Process Group Detection Rules and Naming + +#### Detection Rule or Naming? + +For the explanation, we're using a real example of the Infotainment application: + +!(PGNaming1)[../../../../img/PGNaming1.PNG] + +Before working with your dashboards and alerting profiles, an important task to do when working with Dynatrace is checking +the structure of your applications (process groups). You can do that clicking under *technologies* and filter using your +application Management Zone. + +In the picture above, there are two Process Groups called bon-information-prod. **If you see duplicated process groups like in** +**this case, you MUST follow this guideline** + +Next step would be to open both process groups and compare the metadata. In that way, you can identify if all process instances are +part of the same application or not. An easy way to do that is asking yourself: how many instances of my application do i have? + +If you have 4 instances in total and you're able to see 2 in one PG and other 2 in other PG it means that **they are part of the ** +**same application** + +Another situation could be that checking on the metadata, then you see that are **two different application** and Dynatrace is just naming +the process group in the same way + +*Same application* +- Problem: Dynatrace is creating two different process groups, what transalates in two separated services for the same application. Instead of +seeing all the traffic in one service, you will have it splitted and it will complicate your monitoring +- Solution: create a process group detection rule. Contact Dynatrace Expert + +*Different application* +- Problem: Dynatrace is just naming in the same way applications that are different. +- Solution: This case is less severe, since it can be fixed with a process group naming rule. + + +What about our example? +!(PGNaming2)[../../../../img/PGNaming2.PNG] +!(PGNaming3)[../../../../img/PGNaming3.PNG] + +Based on the feedback of the infotaiment team, each process group is a different application (microservice) and it's visible in the kubernetes container/workload +within the metadata of each Process Group. + +#### How to create a Process Group Detection Rule +1. Open the *conditional-naming-processgroup.yaml* file and create a rule that looks like this: +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName} +- tag: Infotainment +- skipDeployment: false +``` +The result of the rule will be renaming the PG to this: +``` +bon-information-prod ipa +bon-information-prod rsl +``` + +Other possible placeholders that you can use are for example: +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName/[^\\-]*$} +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesFullPodName/buffet-(.*?)-} +{ProcessGroup:DetectedName} - {HostGroup:Name/[^\\_]*$} +{ProcessGroup:KubernetesNamespace} +{ProcessGroup:CommandLineArgs/.*?\\-f\\s\\/www\\/(.*?)\\/generated\\/httpd\\.conf.*?} + +You can combine different ones. Check the (documentation)[link] for more \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_remote-360-composite-service/conditional-naming-processgroup/conditional-naming-processgroup.yaml b/BMW-Dynatrace-config/CD_remote-360-composite-service/conditional-naming-processgroup/conditional-naming-processgroup.yaml new file mode 100644 index 00000000..c2613b53 --- /dev/null +++ b/BMW-Dynatrace-config/CD_remote-360-composite-service/conditional-naming-processgroup/conditional-naming-processgroup.yaml @@ -0,0 +1,8 @@ +config: +- CDremote-360-composite-service: template.json + +CDremote-360-composite-service: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: remote-360-composite-service +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_remote-360-composite-service/conditional-naming-processgroup/template.json b/BMW-Dynatrace-config/CD_remote-360-composite-service/conditional-naming-processgroup/template.json new file mode 100644 index 00000000..7c039808 --- /dev/null +++ b/BMW-Dynatrace-config/CD_remote-360-composite-service/conditional-naming-processgroup/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "type": "PROCESS_GROUP" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_remote-360-composite-service/conditional-naming-service/README.md b/BMW-Dynatrace-config/CD_remote-360-composite-service/conditional-naming-service/README.md new file mode 100644 index 00000000..c34ef308 --- /dev/null +++ b/BMW-Dynatrace-config/CD_remote-360-composite-service/conditional-naming-service/README.md @@ -0,0 +1,35 @@ +### Service Naming Rules + +A typical case could be that you access to *Transaction & Services* and you find two services that are exactly the same: +*DataDownloadV1* +*DataDownloadV1* + +If you drilldown into the service and you check in the process group, you may have a PROD and a E2E for each service. + +*Note: if you see that both process group are exactly the same, please contact a Dynatrace expert to create a Process* +*Group detection rule* + +In the case the PG are PROD and E2E, then we need to create a rule that looks like this: + +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {Service:DetectedName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +- tag: Infotainment +- skipDeployment: false +``` + +The rule will get the Service Detected Name (current name) and it will extract (with a regex) the part of the kubernetes namespace after the "-", so -prod or -e2e, resulting in: +*DataDownloadV1 - prod* +*DataDownloadV1 - e2e* + +Now, services will be easy to identify. + +You can create rules based on any property/metadata. Some other placeholder's eamples: +{Service:DatabaseName} - E2E +{Service:WebServiceName} - {ProcessGroup:Kubernetes:microservice} - {ProcessGroup:Kubernetes:environment} +{Service:DetectedName} - {ProcessGroup:KubernetesContainerName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +{Service:DetectedName} - {ProcessGroup:SpringBootProfileName/[^\\-]*$} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_remote-360-composite-service/conditional-naming-service/conditional-naming-service.yaml b/BMW-Dynatrace-config/CD_remote-360-composite-service/conditional-naming-service/conditional-naming-service.yaml new file mode 100644 index 00000000..c2613b53 --- /dev/null +++ b/BMW-Dynatrace-config/CD_remote-360-composite-service/conditional-naming-service/conditional-naming-service.yaml @@ -0,0 +1,8 @@ +config: +- CDremote-360-composite-service: template.json + +CDremote-360-composite-service: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: remote-360-composite-service +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_remote-360-composite-service/conditional-naming-service/template.json b/BMW-Dynatrace-config/CD_remote-360-composite-service/conditional-naming-service/template.json new file mode 100644 index 00000000..5d4fac56 --- /dev/null +++ b/BMW-Dynatrace-config/CD_remote-360-composite-service/conditional-naming-service/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "type": "SERVICE" +} \ 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 index d41c4c77..5f35e5c1 100644 --- 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 @@ -1,30 +1,4 @@ -## 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 configure custom services? -## 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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Custom+Services) page to configure your custom services. \ 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 index 92e734fa..1695924c 100644 --- 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 @@ -1,37 +1,4 @@ -# Synthetic Configuration -To calculate the Availability KPI, a synthetic must be configured. +### How to configure synthetics? -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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Synthetic+Monitors) page to configure your synthetics. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_remote-service-event-processor/conditional-naming-processgroup/README.md b/BMW-Dynatrace-config/CD_remote-service-event-processor/conditional-naming-processgroup/README.md new file mode 100644 index 00000000..f94196a5 --- /dev/null +++ b/BMW-Dynatrace-config/CD_remote-service-event-processor/conditional-naming-processgroup/README.md @@ -0,0 +1,67 @@ +### Process Group Detection Rules and Naming + +#### Detection Rule or Naming? + +For the explanation, we're using a real example of the Infotainment application: + +!(PGNaming1)[../../../../img/PGNaming1.PNG] + +Before working with your dashboards and alerting profiles, an important task to do when working with Dynatrace is checking +the structure of your applications (process groups). You can do that clicking under *technologies* and filter using your +application Management Zone. + +In the picture above, there are two Process Groups called bon-information-prod. **If you see duplicated process groups like in** +**this case, you MUST follow this guideline** + +Next step would be to open both process groups and compare the metadata. In that way, you can identify if all process instances are +part of the same application or not. An easy way to do that is asking yourself: how many instances of my application do i have? + +If you have 4 instances in total and you're able to see 2 in one PG and other 2 in other PG it means that **they are part of the ** +**same application** + +Another situation could be that checking on the metadata, then you see that are **two different application** and Dynatrace is just naming +the process group in the same way + +*Same application* +- Problem: Dynatrace is creating two different process groups, what transalates in two separated services for the same application. Instead of +seeing all the traffic in one service, you will have it splitted and it will complicate your monitoring +- Solution: create a process group detection rule. Contact Dynatrace Expert + +*Different application* +- Problem: Dynatrace is just naming in the same way applications that are different. +- Solution: This case is less severe, since it can be fixed with a process group naming rule. + + +What about our example? +!(PGNaming2)[../../../../img/PGNaming2.PNG] +!(PGNaming3)[../../../../img/PGNaming3.PNG] + +Based on the feedback of the infotaiment team, each process group is a different application (microservice) and it's visible in the kubernetes container/workload +within the metadata of each Process Group. + +#### How to create a Process Group Detection Rule +1. Open the *conditional-naming-processgroup.yaml* file and create a rule that looks like this: +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName} +- tag: Infotainment +- skipDeployment: false +``` +The result of the rule will be renaming the PG to this: +``` +bon-information-prod ipa +bon-information-prod rsl +``` + +Other possible placeholders that you can use are for example: +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName/[^\\-]*$} +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesFullPodName/buffet-(.*?)-} +{ProcessGroup:DetectedName} - {HostGroup:Name/[^\\_]*$} +{ProcessGroup:KubernetesNamespace} +{ProcessGroup:CommandLineArgs/.*?\\-f\\s\\/www\\/(.*?)\\/generated\\/httpd\\.conf.*?} + +You can combine different ones. Check the (documentation)[link] for more \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_remote-service-event-processor/conditional-naming-processgroup/conditional-naming-processgroup.yaml b/BMW-Dynatrace-config/CD_remote-service-event-processor/conditional-naming-processgroup/conditional-naming-processgroup.yaml new file mode 100644 index 00000000..9cb97830 --- /dev/null +++ b/BMW-Dynatrace-config/CD_remote-service-event-processor/conditional-naming-processgroup/conditional-naming-processgroup.yaml @@ -0,0 +1,8 @@ +config: +- CDremote-service-event-processor: template.json + +CDremote-service-event-processor: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: remote-service-event-processor +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_remote-service-event-processor/conditional-naming-processgroup/template.json b/BMW-Dynatrace-config/CD_remote-service-event-processor/conditional-naming-processgroup/template.json new file mode 100644 index 00000000..7c039808 --- /dev/null +++ b/BMW-Dynatrace-config/CD_remote-service-event-processor/conditional-naming-processgroup/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "type": "PROCESS_GROUP" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_remote-service-event-processor/conditional-naming-service/README.md b/BMW-Dynatrace-config/CD_remote-service-event-processor/conditional-naming-service/README.md new file mode 100644 index 00000000..c34ef308 --- /dev/null +++ b/BMW-Dynatrace-config/CD_remote-service-event-processor/conditional-naming-service/README.md @@ -0,0 +1,35 @@ +### Service Naming Rules + +A typical case could be that you access to *Transaction & Services* and you find two services that are exactly the same: +*DataDownloadV1* +*DataDownloadV1* + +If you drilldown into the service and you check in the process group, you may have a PROD and a E2E for each service. + +*Note: if you see that both process group are exactly the same, please contact a Dynatrace expert to create a Process* +*Group detection rule* + +In the case the PG are PROD and E2E, then we need to create a rule that looks like this: + +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {Service:DetectedName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +- tag: Infotainment +- skipDeployment: false +``` + +The rule will get the Service Detected Name (current name) and it will extract (with a regex) the part of the kubernetes namespace after the "-", so -prod or -e2e, resulting in: +*DataDownloadV1 - prod* +*DataDownloadV1 - e2e* + +Now, services will be easy to identify. + +You can create rules based on any property/metadata. Some other placeholder's eamples: +{Service:DatabaseName} - E2E +{Service:WebServiceName} - {ProcessGroup:Kubernetes:microservice} - {ProcessGroup:Kubernetes:environment} +{Service:DetectedName} - {ProcessGroup:KubernetesContainerName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +{Service:DetectedName} - {ProcessGroup:SpringBootProfileName/[^\\-]*$} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_remote-service-event-processor/conditional-naming-service/conditional-naming-service.yaml b/BMW-Dynatrace-config/CD_remote-service-event-processor/conditional-naming-service/conditional-naming-service.yaml new file mode 100644 index 00000000..9cb97830 --- /dev/null +++ b/BMW-Dynatrace-config/CD_remote-service-event-processor/conditional-naming-service/conditional-naming-service.yaml @@ -0,0 +1,8 @@ +config: +- CDremote-service-event-processor: template.json + +CDremote-service-event-processor: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: remote-service-event-processor +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_remote-service-event-processor/conditional-naming-service/template.json b/BMW-Dynatrace-config/CD_remote-service-event-processor/conditional-naming-service/template.json new file mode 100644 index 00000000..5d4fac56 --- /dev/null +++ b/BMW-Dynatrace-config/CD_remote-service-event-processor/conditional-naming-service/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "type": "SERVICE" +} \ 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 index d41c4c77..5f35e5c1 100644 --- 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 @@ -1,30 +1,4 @@ -## 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 configure custom services? -## 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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Custom+Services) page to configure your custom services. \ 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 index 92e734fa..1695924c 100644 --- 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 @@ -1,37 +1,4 @@ -# Synthetic Configuration -To calculate the Availability KPI, a synthetic must be configured. +### How to configure synthetics? -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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Synthetic+Monitors) page to configure your synthetics. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_remote-service/conditional-naming-processgroup/README.md b/BMW-Dynatrace-config/CD_remote-service/conditional-naming-processgroup/README.md new file mode 100644 index 00000000..f94196a5 --- /dev/null +++ b/BMW-Dynatrace-config/CD_remote-service/conditional-naming-processgroup/README.md @@ -0,0 +1,67 @@ +### Process Group Detection Rules and Naming + +#### Detection Rule or Naming? + +For the explanation, we're using a real example of the Infotainment application: + +!(PGNaming1)[../../../../img/PGNaming1.PNG] + +Before working with your dashboards and alerting profiles, an important task to do when working with Dynatrace is checking +the structure of your applications (process groups). You can do that clicking under *technologies* and filter using your +application Management Zone. + +In the picture above, there are two Process Groups called bon-information-prod. **If you see duplicated process groups like in** +**this case, you MUST follow this guideline** + +Next step would be to open both process groups and compare the metadata. In that way, you can identify if all process instances are +part of the same application or not. An easy way to do that is asking yourself: how many instances of my application do i have? + +If you have 4 instances in total and you're able to see 2 in one PG and other 2 in other PG it means that **they are part of the ** +**same application** + +Another situation could be that checking on the metadata, then you see that are **two different application** and Dynatrace is just naming +the process group in the same way + +*Same application* +- Problem: Dynatrace is creating two different process groups, what transalates in two separated services for the same application. Instead of +seeing all the traffic in one service, you will have it splitted and it will complicate your monitoring +- Solution: create a process group detection rule. Contact Dynatrace Expert + +*Different application* +- Problem: Dynatrace is just naming in the same way applications that are different. +- Solution: This case is less severe, since it can be fixed with a process group naming rule. + + +What about our example? +!(PGNaming2)[../../../../img/PGNaming2.PNG] +!(PGNaming3)[../../../../img/PGNaming3.PNG] + +Based on the feedback of the infotaiment team, each process group is a different application (microservice) and it's visible in the kubernetes container/workload +within the metadata of each Process Group. + +#### How to create a Process Group Detection Rule +1. Open the *conditional-naming-processgroup.yaml* file and create a rule that looks like this: +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName} +- tag: Infotainment +- skipDeployment: false +``` +The result of the rule will be renaming the PG to this: +``` +bon-information-prod ipa +bon-information-prod rsl +``` + +Other possible placeholders that you can use are for example: +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName/[^\\-]*$} +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesFullPodName/buffet-(.*?)-} +{ProcessGroup:DetectedName} - {HostGroup:Name/[^\\_]*$} +{ProcessGroup:KubernetesNamespace} +{ProcessGroup:CommandLineArgs/.*?\\-f\\s\\/www\\/(.*?)\\/generated\\/httpd\\.conf.*?} + +You can combine different ones. Check the (documentation)[link] for more \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_remote-service/conditional-naming-processgroup/conditional-naming-processgroup.yaml b/BMW-Dynatrace-config/CD_remote-service/conditional-naming-processgroup/conditional-naming-processgroup.yaml new file mode 100644 index 00000000..116fe129 --- /dev/null +++ b/BMW-Dynatrace-config/CD_remote-service/conditional-naming-processgroup/conditional-naming-processgroup.yaml @@ -0,0 +1,8 @@ +config: +- CDremote-service: template.json + +CDremote-service: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: remote-service +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_remote-service/conditional-naming-processgroup/template.json b/BMW-Dynatrace-config/CD_remote-service/conditional-naming-processgroup/template.json new file mode 100644 index 00000000..7c039808 --- /dev/null +++ b/BMW-Dynatrace-config/CD_remote-service/conditional-naming-processgroup/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "type": "PROCESS_GROUP" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_remote-service/conditional-naming-service/README.md b/BMW-Dynatrace-config/CD_remote-service/conditional-naming-service/README.md new file mode 100644 index 00000000..c34ef308 --- /dev/null +++ b/BMW-Dynatrace-config/CD_remote-service/conditional-naming-service/README.md @@ -0,0 +1,35 @@ +### Service Naming Rules + +A typical case could be that you access to *Transaction & Services* and you find two services that are exactly the same: +*DataDownloadV1* +*DataDownloadV1* + +If you drilldown into the service and you check in the process group, you may have a PROD and a E2E for each service. + +*Note: if you see that both process group are exactly the same, please contact a Dynatrace expert to create a Process* +*Group detection rule* + +In the case the PG are PROD and E2E, then we need to create a rule that looks like this: + +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {Service:DetectedName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +- tag: Infotainment +- skipDeployment: false +``` + +The rule will get the Service Detected Name (current name) and it will extract (with a regex) the part of the kubernetes namespace after the "-", so -prod or -e2e, resulting in: +*DataDownloadV1 - prod* +*DataDownloadV1 - e2e* + +Now, services will be easy to identify. + +You can create rules based on any property/metadata. Some other placeholder's eamples: +{Service:DatabaseName} - E2E +{Service:WebServiceName} - {ProcessGroup:Kubernetes:microservice} - {ProcessGroup:Kubernetes:environment} +{Service:DetectedName} - {ProcessGroup:KubernetesContainerName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +{Service:DetectedName} - {ProcessGroup:SpringBootProfileName/[^\\-]*$} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_remote-service/conditional-naming-service/conditional-naming-service.yaml b/BMW-Dynatrace-config/CD_remote-service/conditional-naming-service/conditional-naming-service.yaml new file mode 100644 index 00000000..116fe129 --- /dev/null +++ b/BMW-Dynatrace-config/CD_remote-service/conditional-naming-service/conditional-naming-service.yaml @@ -0,0 +1,8 @@ +config: +- CDremote-service: template.json + +CDremote-service: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: remote-service +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_remote-service/conditional-naming-service/template.json b/BMW-Dynatrace-config/CD_remote-service/conditional-naming-service/template.json new file mode 100644 index 00000000..5d4fac56 --- /dev/null +++ b/BMW-Dynatrace-config/CD_remote-service/conditional-naming-service/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "type": "SERVICE" +} \ 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 index d41c4c77..5f35e5c1 100644 --- a/BMW-Dynatrace-config/CD_remote-service/custom-service-java/README.md +++ b/BMW-Dynatrace-config/CD_remote-service/custom-service-java/README.md @@ -1,30 +1,4 @@ -## 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 configure custom services? -## 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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Custom+Services) page to configure your custom services. \ 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 index 92e734fa..1695924c 100644 --- a/BMW-Dynatrace-config/CD_remote-service/synthetic-monitor/README.md +++ b/BMW-Dynatrace-config/CD_remote-service/synthetic-monitor/README.md @@ -1,37 +1,4 @@ -# Synthetic Configuration -To calculate the Availability KPI, a synthetic must be configured. +### How to configure synthetics? -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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Synthetic+Monitors) page to configure your synthetics. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_remote-software-upgrade/conditional-naming-processgroup/README.md b/BMW-Dynatrace-config/CD_remote-software-upgrade/conditional-naming-processgroup/README.md new file mode 100644 index 00000000..f94196a5 --- /dev/null +++ b/BMW-Dynatrace-config/CD_remote-software-upgrade/conditional-naming-processgroup/README.md @@ -0,0 +1,67 @@ +### Process Group Detection Rules and Naming + +#### Detection Rule or Naming? + +For the explanation, we're using a real example of the Infotainment application: + +!(PGNaming1)[../../../../img/PGNaming1.PNG] + +Before working with your dashboards and alerting profiles, an important task to do when working with Dynatrace is checking +the structure of your applications (process groups). You can do that clicking under *technologies* and filter using your +application Management Zone. + +In the picture above, there are two Process Groups called bon-information-prod. **If you see duplicated process groups like in** +**this case, you MUST follow this guideline** + +Next step would be to open both process groups and compare the metadata. In that way, you can identify if all process instances are +part of the same application or not. An easy way to do that is asking yourself: how many instances of my application do i have? + +If you have 4 instances in total and you're able to see 2 in one PG and other 2 in other PG it means that **they are part of the ** +**same application** + +Another situation could be that checking on the metadata, then you see that are **two different application** and Dynatrace is just naming +the process group in the same way + +*Same application* +- Problem: Dynatrace is creating two different process groups, what transalates in two separated services for the same application. Instead of +seeing all the traffic in one service, you will have it splitted and it will complicate your monitoring +- Solution: create a process group detection rule. Contact Dynatrace Expert + +*Different application* +- Problem: Dynatrace is just naming in the same way applications that are different. +- Solution: This case is less severe, since it can be fixed with a process group naming rule. + + +What about our example? +!(PGNaming2)[../../../../img/PGNaming2.PNG] +!(PGNaming3)[../../../../img/PGNaming3.PNG] + +Based on the feedback of the infotaiment team, each process group is a different application (microservice) and it's visible in the kubernetes container/workload +within the metadata of each Process Group. + +#### How to create a Process Group Detection Rule +1. Open the *conditional-naming-processgroup.yaml* file and create a rule that looks like this: +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName} +- tag: Infotainment +- skipDeployment: false +``` +The result of the rule will be renaming the PG to this: +``` +bon-information-prod ipa +bon-information-prod rsl +``` + +Other possible placeholders that you can use are for example: +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName/[^\\-]*$} +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesFullPodName/buffet-(.*?)-} +{ProcessGroup:DetectedName} - {HostGroup:Name/[^\\_]*$} +{ProcessGroup:KubernetesNamespace} +{ProcessGroup:CommandLineArgs/.*?\\-f\\s\\/www\\/(.*?)\\/generated\\/httpd\\.conf.*?} + +You can combine different ones. Check the (documentation)[link] for more \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_remote-software-upgrade/conditional-naming-processgroup/conditional-naming-processgroup.yaml b/BMW-Dynatrace-config/CD_remote-software-upgrade/conditional-naming-processgroup/conditional-naming-processgroup.yaml new file mode 100644 index 00000000..219cecce --- /dev/null +++ b/BMW-Dynatrace-config/CD_remote-software-upgrade/conditional-naming-processgroup/conditional-naming-processgroup.yaml @@ -0,0 +1,8 @@ +config: +- CDremote-software-upgrade: template.json + +CDremote-software-upgrade: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: remote-software-upgrade +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_remote-software-upgrade/conditional-naming-processgroup/template.json b/BMW-Dynatrace-config/CD_remote-software-upgrade/conditional-naming-processgroup/template.json new file mode 100644 index 00000000..7c039808 --- /dev/null +++ b/BMW-Dynatrace-config/CD_remote-software-upgrade/conditional-naming-processgroup/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "type": "PROCESS_GROUP" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_remote-software-upgrade/conditional-naming-service/README.md b/BMW-Dynatrace-config/CD_remote-software-upgrade/conditional-naming-service/README.md new file mode 100644 index 00000000..c34ef308 --- /dev/null +++ b/BMW-Dynatrace-config/CD_remote-software-upgrade/conditional-naming-service/README.md @@ -0,0 +1,35 @@ +### Service Naming Rules + +A typical case could be that you access to *Transaction & Services* and you find two services that are exactly the same: +*DataDownloadV1* +*DataDownloadV1* + +If you drilldown into the service and you check in the process group, you may have a PROD and a E2E for each service. + +*Note: if you see that both process group are exactly the same, please contact a Dynatrace expert to create a Process* +*Group detection rule* + +In the case the PG are PROD and E2E, then we need to create a rule that looks like this: + +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {Service:DetectedName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +- tag: Infotainment +- skipDeployment: false +``` + +The rule will get the Service Detected Name (current name) and it will extract (with a regex) the part of the kubernetes namespace after the "-", so -prod or -e2e, resulting in: +*DataDownloadV1 - prod* +*DataDownloadV1 - e2e* + +Now, services will be easy to identify. + +You can create rules based on any property/metadata. Some other placeholder's eamples: +{Service:DatabaseName} - E2E +{Service:WebServiceName} - {ProcessGroup:Kubernetes:microservice} - {ProcessGroup:Kubernetes:environment} +{Service:DetectedName} - {ProcessGroup:KubernetesContainerName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +{Service:DetectedName} - {ProcessGroup:SpringBootProfileName/[^\\-]*$} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_remote-software-upgrade/conditional-naming-service/conditional-naming-service.yaml b/BMW-Dynatrace-config/CD_remote-software-upgrade/conditional-naming-service/conditional-naming-service.yaml new file mode 100644 index 00000000..219cecce --- /dev/null +++ b/BMW-Dynatrace-config/CD_remote-software-upgrade/conditional-naming-service/conditional-naming-service.yaml @@ -0,0 +1,8 @@ +config: +- CDremote-software-upgrade: template.json + +CDremote-software-upgrade: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: remote-software-upgrade +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_remote-software-upgrade/conditional-naming-service/template.json b/BMW-Dynatrace-config/CD_remote-software-upgrade/conditional-naming-service/template.json new file mode 100644 index 00000000..5d4fac56 --- /dev/null +++ b/BMW-Dynatrace-config/CD_remote-software-upgrade/conditional-naming-service/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "type": "SERVICE" +} \ 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 index d41c4c77..5f35e5c1 100644 --- 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 @@ -1,30 +1,4 @@ -## 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 configure custom services? -## 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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Custom+Services) page to configure your custom services. \ 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 index 92e734fa..1695924c 100644 --- a/BMW-Dynatrace-config/CD_remote-software-upgrade/synthetic-monitor/README.md +++ b/BMW-Dynatrace-config/CD_remote-software-upgrade/synthetic-monitor/README.md @@ -1,37 +1,4 @@ -# Synthetic Configuration -To calculate the Availability KPI, a synthetic must be configured. +### How to configure synthetics? -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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Synthetic+Monitors) page to configure your synthetics. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_roadside-assistance-composite-service/conditional-naming-processgroup/README.md b/BMW-Dynatrace-config/CD_roadside-assistance-composite-service/conditional-naming-processgroup/README.md new file mode 100644 index 00000000..f94196a5 --- /dev/null +++ b/BMW-Dynatrace-config/CD_roadside-assistance-composite-service/conditional-naming-processgroup/README.md @@ -0,0 +1,67 @@ +### Process Group Detection Rules and Naming + +#### Detection Rule or Naming? + +For the explanation, we're using a real example of the Infotainment application: + +!(PGNaming1)[../../../../img/PGNaming1.PNG] + +Before working with your dashboards and alerting profiles, an important task to do when working with Dynatrace is checking +the structure of your applications (process groups). You can do that clicking under *technologies* and filter using your +application Management Zone. + +In the picture above, there are two Process Groups called bon-information-prod. **If you see duplicated process groups like in** +**this case, you MUST follow this guideline** + +Next step would be to open both process groups and compare the metadata. In that way, you can identify if all process instances are +part of the same application or not. An easy way to do that is asking yourself: how many instances of my application do i have? + +If you have 4 instances in total and you're able to see 2 in one PG and other 2 in other PG it means that **they are part of the ** +**same application** + +Another situation could be that checking on the metadata, then you see that are **two different application** and Dynatrace is just naming +the process group in the same way + +*Same application* +- Problem: Dynatrace is creating two different process groups, what transalates in two separated services for the same application. Instead of +seeing all the traffic in one service, you will have it splitted and it will complicate your monitoring +- Solution: create a process group detection rule. Contact Dynatrace Expert + +*Different application* +- Problem: Dynatrace is just naming in the same way applications that are different. +- Solution: This case is less severe, since it can be fixed with a process group naming rule. + + +What about our example? +!(PGNaming2)[../../../../img/PGNaming2.PNG] +!(PGNaming3)[../../../../img/PGNaming3.PNG] + +Based on the feedback of the infotaiment team, each process group is a different application (microservice) and it's visible in the kubernetes container/workload +within the metadata of each Process Group. + +#### How to create a Process Group Detection Rule +1. Open the *conditional-naming-processgroup.yaml* file and create a rule that looks like this: +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName} +- tag: Infotainment +- skipDeployment: false +``` +The result of the rule will be renaming the PG to this: +``` +bon-information-prod ipa +bon-information-prod rsl +``` + +Other possible placeholders that you can use are for example: +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName/[^\\-]*$} +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesFullPodName/buffet-(.*?)-} +{ProcessGroup:DetectedName} - {HostGroup:Name/[^\\_]*$} +{ProcessGroup:KubernetesNamespace} +{ProcessGroup:CommandLineArgs/.*?\\-f\\s\\/www\\/(.*?)\\/generated\\/httpd\\.conf.*?} + +You can combine different ones. Check the (documentation)[link] for more \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_roadside-assistance-composite-service/conditional-naming-processgroup/conditional-naming-processgroup.yaml b/BMW-Dynatrace-config/CD_roadside-assistance-composite-service/conditional-naming-processgroup/conditional-naming-processgroup.yaml new file mode 100644 index 00000000..de39f3e3 --- /dev/null +++ b/BMW-Dynatrace-config/CD_roadside-assistance-composite-service/conditional-naming-processgroup/conditional-naming-processgroup.yaml @@ -0,0 +1,8 @@ +config: +- CDroadside-assistance-composite-service: template.json + +CDroadside-assistance-composite-service: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: roadside-assistance-composite-service +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_roadside-assistance-composite-service/conditional-naming-processgroup/template.json b/BMW-Dynatrace-config/CD_roadside-assistance-composite-service/conditional-naming-processgroup/template.json new file mode 100644 index 00000000..7c039808 --- /dev/null +++ b/BMW-Dynatrace-config/CD_roadside-assistance-composite-service/conditional-naming-processgroup/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "type": "PROCESS_GROUP" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_roadside-assistance-composite-service/conditional-naming-service/README.md b/BMW-Dynatrace-config/CD_roadside-assistance-composite-service/conditional-naming-service/README.md new file mode 100644 index 00000000..c34ef308 --- /dev/null +++ b/BMW-Dynatrace-config/CD_roadside-assistance-composite-service/conditional-naming-service/README.md @@ -0,0 +1,35 @@ +### Service Naming Rules + +A typical case could be that you access to *Transaction & Services* and you find two services that are exactly the same: +*DataDownloadV1* +*DataDownloadV1* + +If you drilldown into the service and you check in the process group, you may have a PROD and a E2E for each service. + +*Note: if you see that both process group are exactly the same, please contact a Dynatrace expert to create a Process* +*Group detection rule* + +In the case the PG are PROD and E2E, then we need to create a rule that looks like this: + +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {Service:DetectedName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +- tag: Infotainment +- skipDeployment: false +``` + +The rule will get the Service Detected Name (current name) and it will extract (with a regex) the part of the kubernetes namespace after the "-", so -prod or -e2e, resulting in: +*DataDownloadV1 - prod* +*DataDownloadV1 - e2e* + +Now, services will be easy to identify. + +You can create rules based on any property/metadata. Some other placeholder's eamples: +{Service:DatabaseName} - E2E +{Service:WebServiceName} - {ProcessGroup:Kubernetes:microservice} - {ProcessGroup:Kubernetes:environment} +{Service:DetectedName} - {ProcessGroup:KubernetesContainerName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +{Service:DetectedName} - {ProcessGroup:SpringBootProfileName/[^\\-]*$} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_roadside-assistance-composite-service/conditional-naming-service/conditional-naming-service.yaml b/BMW-Dynatrace-config/CD_roadside-assistance-composite-service/conditional-naming-service/conditional-naming-service.yaml new file mode 100644 index 00000000..de39f3e3 --- /dev/null +++ b/BMW-Dynatrace-config/CD_roadside-assistance-composite-service/conditional-naming-service/conditional-naming-service.yaml @@ -0,0 +1,8 @@ +config: +- CDroadside-assistance-composite-service: template.json + +CDroadside-assistance-composite-service: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: roadside-assistance-composite-service +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_roadside-assistance-composite-service/conditional-naming-service/template.json b/BMW-Dynatrace-config/CD_roadside-assistance-composite-service/conditional-naming-service/template.json new file mode 100644 index 00000000..5d4fac56 --- /dev/null +++ b/BMW-Dynatrace-config/CD_roadside-assistance-composite-service/conditional-naming-service/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "type": "SERVICE" +} \ 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 index d41c4c77..5f35e5c1 100644 --- 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 @@ -1,30 +1,4 @@ -## 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 configure custom services? -## 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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Custom+Services) page to configure your custom services. \ 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 index 92e734fa..1695924c 100644 --- 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 @@ -1,37 +1,4 @@ -# Synthetic Configuration -To calculate the Availability KPI, a synthetic must be configured. +### How to configure synthetics? -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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Synthetic+Monitors) page to configure your synthetics. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_roadside-assistance/conditional-naming-processgroup/README.md b/BMW-Dynatrace-config/CD_roadside-assistance/conditional-naming-processgroup/README.md new file mode 100644 index 00000000..f94196a5 --- /dev/null +++ b/BMW-Dynatrace-config/CD_roadside-assistance/conditional-naming-processgroup/README.md @@ -0,0 +1,67 @@ +### Process Group Detection Rules and Naming + +#### Detection Rule or Naming? + +For the explanation, we're using a real example of the Infotainment application: + +!(PGNaming1)[../../../../img/PGNaming1.PNG] + +Before working with your dashboards and alerting profiles, an important task to do when working with Dynatrace is checking +the structure of your applications (process groups). You can do that clicking under *technologies* and filter using your +application Management Zone. + +In the picture above, there are two Process Groups called bon-information-prod. **If you see duplicated process groups like in** +**this case, you MUST follow this guideline** + +Next step would be to open both process groups and compare the metadata. In that way, you can identify if all process instances are +part of the same application or not. An easy way to do that is asking yourself: how many instances of my application do i have? + +If you have 4 instances in total and you're able to see 2 in one PG and other 2 in other PG it means that **they are part of the ** +**same application** + +Another situation could be that checking on the metadata, then you see that are **two different application** and Dynatrace is just naming +the process group in the same way + +*Same application* +- Problem: Dynatrace is creating two different process groups, what transalates in two separated services for the same application. Instead of +seeing all the traffic in one service, you will have it splitted and it will complicate your monitoring +- Solution: create a process group detection rule. Contact Dynatrace Expert + +*Different application* +- Problem: Dynatrace is just naming in the same way applications that are different. +- Solution: This case is less severe, since it can be fixed with a process group naming rule. + + +What about our example? +!(PGNaming2)[../../../../img/PGNaming2.PNG] +!(PGNaming3)[../../../../img/PGNaming3.PNG] + +Based on the feedback of the infotaiment team, each process group is a different application (microservice) and it's visible in the kubernetes container/workload +within the metadata of each Process Group. + +#### How to create a Process Group Detection Rule +1. Open the *conditional-naming-processgroup.yaml* file and create a rule that looks like this: +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName} +- tag: Infotainment +- skipDeployment: false +``` +The result of the rule will be renaming the PG to this: +``` +bon-information-prod ipa +bon-information-prod rsl +``` + +Other possible placeholders that you can use are for example: +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName/[^\\-]*$} +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesFullPodName/buffet-(.*?)-} +{ProcessGroup:DetectedName} - {HostGroup:Name/[^\\_]*$} +{ProcessGroup:KubernetesNamespace} +{ProcessGroup:CommandLineArgs/.*?\\-f\\s\\/www\\/(.*?)\\/generated\\/httpd\\.conf.*?} + +You can combine different ones. Check the (documentation)[link] for more \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_roadside-assistance/conditional-naming-processgroup/conditional-naming-processgroup.yaml b/BMW-Dynatrace-config/CD_roadside-assistance/conditional-naming-processgroup/conditional-naming-processgroup.yaml new file mode 100644 index 00000000..535b777f --- /dev/null +++ b/BMW-Dynatrace-config/CD_roadside-assistance/conditional-naming-processgroup/conditional-naming-processgroup.yaml @@ -0,0 +1,8 @@ +config: +- CDroadside-assistance: template.json + +CDroadside-assistance: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: roadside-assistance +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_roadside-assistance/conditional-naming-processgroup/template.json b/BMW-Dynatrace-config/CD_roadside-assistance/conditional-naming-processgroup/template.json new file mode 100644 index 00000000..7c039808 --- /dev/null +++ b/BMW-Dynatrace-config/CD_roadside-assistance/conditional-naming-processgroup/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "type": "PROCESS_GROUP" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_roadside-assistance/conditional-naming-service/README.md b/BMW-Dynatrace-config/CD_roadside-assistance/conditional-naming-service/README.md new file mode 100644 index 00000000..c34ef308 --- /dev/null +++ b/BMW-Dynatrace-config/CD_roadside-assistance/conditional-naming-service/README.md @@ -0,0 +1,35 @@ +### Service Naming Rules + +A typical case could be that you access to *Transaction & Services* and you find two services that are exactly the same: +*DataDownloadV1* +*DataDownloadV1* + +If you drilldown into the service and you check in the process group, you may have a PROD and a E2E for each service. + +*Note: if you see that both process group are exactly the same, please contact a Dynatrace expert to create a Process* +*Group detection rule* + +In the case the PG are PROD and E2E, then we need to create a rule that looks like this: + +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {Service:DetectedName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +- tag: Infotainment +- skipDeployment: false +``` + +The rule will get the Service Detected Name (current name) and it will extract (with a regex) the part of the kubernetes namespace after the "-", so -prod or -e2e, resulting in: +*DataDownloadV1 - prod* +*DataDownloadV1 - e2e* + +Now, services will be easy to identify. + +You can create rules based on any property/metadata. Some other placeholder's eamples: +{Service:DatabaseName} - E2E +{Service:WebServiceName} - {ProcessGroup:Kubernetes:microservice} - {ProcessGroup:Kubernetes:environment} +{Service:DetectedName} - {ProcessGroup:KubernetesContainerName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +{Service:DetectedName} - {ProcessGroup:SpringBootProfileName/[^\\-]*$} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_roadside-assistance/conditional-naming-service/conditional-naming-service.yaml b/BMW-Dynatrace-config/CD_roadside-assistance/conditional-naming-service/conditional-naming-service.yaml new file mode 100644 index 00000000..535b777f --- /dev/null +++ b/BMW-Dynatrace-config/CD_roadside-assistance/conditional-naming-service/conditional-naming-service.yaml @@ -0,0 +1,8 @@ +config: +- CDroadside-assistance: template.json + +CDroadside-assistance: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: roadside-assistance +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_roadside-assistance/conditional-naming-service/template.json b/BMW-Dynatrace-config/CD_roadside-assistance/conditional-naming-service/template.json new file mode 100644 index 00000000..5d4fac56 --- /dev/null +++ b/BMW-Dynatrace-config/CD_roadside-assistance/conditional-naming-service/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "type": "SERVICE" +} \ 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 index d41c4c77..5f35e5c1 100644 --- a/BMW-Dynatrace-config/CD_roadside-assistance/custom-service-java/README.md +++ b/BMW-Dynatrace-config/CD_roadside-assistance/custom-service-java/README.md @@ -1,30 +1,4 @@ -## 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 configure custom services? -## 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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Custom+Services) page to configure your custom services. \ 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 index 92e734fa..1695924c 100644 --- a/BMW-Dynatrace-config/CD_roadside-assistance/synthetic-monitor/README.md +++ b/BMW-Dynatrace-config/CD_roadside-assistance/synthetic-monitor/README.md @@ -1,37 +1,4 @@ -# Synthetic Configuration -To calculate the Availability KPI, a synthetic must be configured. +### How to configure synthetics? -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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Synthetic+Monitors) page to configure your synthetics. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_rsu-adapter/conditional-naming-processgroup/README.md b/BMW-Dynatrace-config/CD_rsu-adapter/conditional-naming-processgroup/README.md new file mode 100644 index 00000000..f94196a5 --- /dev/null +++ b/BMW-Dynatrace-config/CD_rsu-adapter/conditional-naming-processgroup/README.md @@ -0,0 +1,67 @@ +### Process Group Detection Rules and Naming + +#### Detection Rule or Naming? + +For the explanation, we're using a real example of the Infotainment application: + +!(PGNaming1)[../../../../img/PGNaming1.PNG] + +Before working with your dashboards and alerting profiles, an important task to do when working with Dynatrace is checking +the structure of your applications (process groups). You can do that clicking under *technologies* and filter using your +application Management Zone. + +In the picture above, there are two Process Groups called bon-information-prod. **If you see duplicated process groups like in** +**this case, you MUST follow this guideline** + +Next step would be to open both process groups and compare the metadata. In that way, you can identify if all process instances are +part of the same application or not. An easy way to do that is asking yourself: how many instances of my application do i have? + +If you have 4 instances in total and you're able to see 2 in one PG and other 2 in other PG it means that **they are part of the ** +**same application** + +Another situation could be that checking on the metadata, then you see that are **two different application** and Dynatrace is just naming +the process group in the same way + +*Same application* +- Problem: Dynatrace is creating two different process groups, what transalates in two separated services for the same application. Instead of +seeing all the traffic in one service, you will have it splitted and it will complicate your monitoring +- Solution: create a process group detection rule. Contact Dynatrace Expert + +*Different application* +- Problem: Dynatrace is just naming in the same way applications that are different. +- Solution: This case is less severe, since it can be fixed with a process group naming rule. + + +What about our example? +!(PGNaming2)[../../../../img/PGNaming2.PNG] +!(PGNaming3)[../../../../img/PGNaming3.PNG] + +Based on the feedback of the infotaiment team, each process group is a different application (microservice) and it's visible in the kubernetes container/workload +within the metadata of each Process Group. + +#### How to create a Process Group Detection Rule +1. Open the *conditional-naming-processgroup.yaml* file and create a rule that looks like this: +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName} +- tag: Infotainment +- skipDeployment: false +``` +The result of the rule will be renaming the PG to this: +``` +bon-information-prod ipa +bon-information-prod rsl +``` + +Other possible placeholders that you can use are for example: +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName/[^\\-]*$} +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesFullPodName/buffet-(.*?)-} +{ProcessGroup:DetectedName} - {HostGroup:Name/[^\\_]*$} +{ProcessGroup:KubernetesNamespace} +{ProcessGroup:CommandLineArgs/.*?\\-f\\s\\/www\\/(.*?)\\/generated\\/httpd\\.conf.*?} + +You can combine different ones. Check the (documentation)[link] for more \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_rsu-adapter/conditional-naming-processgroup/conditional-naming-processgroup.yaml b/BMW-Dynatrace-config/CD_rsu-adapter/conditional-naming-processgroup/conditional-naming-processgroup.yaml new file mode 100644 index 00000000..43d01b07 --- /dev/null +++ b/BMW-Dynatrace-config/CD_rsu-adapter/conditional-naming-processgroup/conditional-naming-processgroup.yaml @@ -0,0 +1,8 @@ +config: +- CDrsu-adapter: template.json + +CDrsu-adapter: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: rsu-adapter +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_rsu-adapter/conditional-naming-processgroup/template.json b/BMW-Dynatrace-config/CD_rsu-adapter/conditional-naming-processgroup/template.json new file mode 100644 index 00000000..7c039808 --- /dev/null +++ b/BMW-Dynatrace-config/CD_rsu-adapter/conditional-naming-processgroup/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "type": "PROCESS_GROUP" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_rsu-adapter/conditional-naming-service/README.md b/BMW-Dynatrace-config/CD_rsu-adapter/conditional-naming-service/README.md new file mode 100644 index 00000000..c34ef308 --- /dev/null +++ b/BMW-Dynatrace-config/CD_rsu-adapter/conditional-naming-service/README.md @@ -0,0 +1,35 @@ +### Service Naming Rules + +A typical case could be that you access to *Transaction & Services* and you find two services that are exactly the same: +*DataDownloadV1* +*DataDownloadV1* + +If you drilldown into the service and you check in the process group, you may have a PROD and a E2E for each service. + +*Note: if you see that both process group are exactly the same, please contact a Dynatrace expert to create a Process* +*Group detection rule* + +In the case the PG are PROD and E2E, then we need to create a rule that looks like this: + +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {Service:DetectedName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +- tag: Infotainment +- skipDeployment: false +``` + +The rule will get the Service Detected Name (current name) and it will extract (with a regex) the part of the kubernetes namespace after the "-", so -prod or -e2e, resulting in: +*DataDownloadV1 - prod* +*DataDownloadV1 - e2e* + +Now, services will be easy to identify. + +You can create rules based on any property/metadata. Some other placeholder's eamples: +{Service:DatabaseName} - E2E +{Service:WebServiceName} - {ProcessGroup:Kubernetes:microservice} - {ProcessGroup:Kubernetes:environment} +{Service:DetectedName} - {ProcessGroup:KubernetesContainerName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +{Service:DetectedName} - {ProcessGroup:SpringBootProfileName/[^\\-]*$} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_rsu-adapter/conditional-naming-service/conditional-naming-service.yaml b/BMW-Dynatrace-config/CD_rsu-adapter/conditional-naming-service/conditional-naming-service.yaml new file mode 100644 index 00000000..43d01b07 --- /dev/null +++ b/BMW-Dynatrace-config/CD_rsu-adapter/conditional-naming-service/conditional-naming-service.yaml @@ -0,0 +1,8 @@ +config: +- CDrsu-adapter: template.json + +CDrsu-adapter: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: rsu-adapter +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_rsu-adapter/conditional-naming-service/template.json b/BMW-Dynatrace-config/CD_rsu-adapter/conditional-naming-service/template.json new file mode 100644 index 00000000..5d4fac56 --- /dev/null +++ b/BMW-Dynatrace-config/CD_rsu-adapter/conditional-naming-service/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "type": "SERVICE" +} \ 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 index d41c4c77..5f35e5c1 100644 --- a/BMW-Dynatrace-config/CD_rsu-adapter/custom-service-java/README.md +++ b/BMW-Dynatrace-config/CD_rsu-adapter/custom-service-java/README.md @@ -1,30 +1,4 @@ -## 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 configure custom services? -## 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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Custom+Services) page to configure your custom services. \ 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 index 92e734fa..1695924c 100644 --- a/BMW-Dynatrace-config/CD_rsu-adapter/synthetic-monitor/README.md +++ b/BMW-Dynatrace-config/CD_rsu-adapter/synthetic-monitor/README.md @@ -1,37 +1,4 @@ -# Synthetic Configuration -To calculate the Availability KPI, a synthetic must be configured. +### How to configure synthetics? -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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Synthetic+Monitors) page to configure your synthetics. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_rsu/conditional-naming-processgroup/README.md b/BMW-Dynatrace-config/CD_rsu/conditional-naming-processgroup/README.md new file mode 100644 index 00000000..f94196a5 --- /dev/null +++ b/BMW-Dynatrace-config/CD_rsu/conditional-naming-processgroup/README.md @@ -0,0 +1,67 @@ +### Process Group Detection Rules and Naming + +#### Detection Rule or Naming? + +For the explanation, we're using a real example of the Infotainment application: + +!(PGNaming1)[../../../../img/PGNaming1.PNG] + +Before working with your dashboards and alerting profiles, an important task to do when working with Dynatrace is checking +the structure of your applications (process groups). You can do that clicking under *technologies* and filter using your +application Management Zone. + +In the picture above, there are two Process Groups called bon-information-prod. **If you see duplicated process groups like in** +**this case, you MUST follow this guideline** + +Next step would be to open both process groups and compare the metadata. In that way, you can identify if all process instances are +part of the same application or not. An easy way to do that is asking yourself: how many instances of my application do i have? + +If you have 4 instances in total and you're able to see 2 in one PG and other 2 in other PG it means that **they are part of the ** +**same application** + +Another situation could be that checking on the metadata, then you see that are **two different application** and Dynatrace is just naming +the process group in the same way + +*Same application* +- Problem: Dynatrace is creating two different process groups, what transalates in two separated services for the same application. Instead of +seeing all the traffic in one service, you will have it splitted and it will complicate your monitoring +- Solution: create a process group detection rule. Contact Dynatrace Expert + +*Different application* +- Problem: Dynatrace is just naming in the same way applications that are different. +- Solution: This case is less severe, since it can be fixed with a process group naming rule. + + +What about our example? +!(PGNaming2)[../../../../img/PGNaming2.PNG] +!(PGNaming3)[../../../../img/PGNaming3.PNG] + +Based on the feedback of the infotaiment team, each process group is a different application (microservice) and it's visible in the kubernetes container/workload +within the metadata of each Process Group. + +#### How to create a Process Group Detection Rule +1. Open the *conditional-naming-processgroup.yaml* file and create a rule that looks like this: +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName} +- tag: Infotainment +- skipDeployment: false +``` +The result of the rule will be renaming the PG to this: +``` +bon-information-prod ipa +bon-information-prod rsl +``` + +Other possible placeholders that you can use are for example: +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName/[^\\-]*$} +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesFullPodName/buffet-(.*?)-} +{ProcessGroup:DetectedName} - {HostGroup:Name/[^\\_]*$} +{ProcessGroup:KubernetesNamespace} +{ProcessGroup:CommandLineArgs/.*?\\-f\\s\\/www\\/(.*?)\\/generated\\/httpd\\.conf.*?} + +You can combine different ones. Check the (documentation)[link] for more \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_rsu/conditional-naming-processgroup/conditional-naming-processgroup.yaml b/BMW-Dynatrace-config/CD_rsu/conditional-naming-processgroup/conditional-naming-processgroup.yaml new file mode 100644 index 00000000..0f7139fc --- /dev/null +++ b/BMW-Dynatrace-config/CD_rsu/conditional-naming-processgroup/conditional-naming-processgroup.yaml @@ -0,0 +1,8 @@ +config: +- CDrsu: template.json + +CDrsu: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: rsu +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_rsu/conditional-naming-processgroup/template.json b/BMW-Dynatrace-config/CD_rsu/conditional-naming-processgroup/template.json new file mode 100644 index 00000000..7c039808 --- /dev/null +++ b/BMW-Dynatrace-config/CD_rsu/conditional-naming-processgroup/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "type": "PROCESS_GROUP" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_rsu/conditional-naming-service/README.md b/BMW-Dynatrace-config/CD_rsu/conditional-naming-service/README.md new file mode 100644 index 00000000..c34ef308 --- /dev/null +++ b/BMW-Dynatrace-config/CD_rsu/conditional-naming-service/README.md @@ -0,0 +1,35 @@ +### Service Naming Rules + +A typical case could be that you access to *Transaction & Services* and you find two services that are exactly the same: +*DataDownloadV1* +*DataDownloadV1* + +If you drilldown into the service and you check in the process group, you may have a PROD and a E2E for each service. + +*Note: if you see that both process group are exactly the same, please contact a Dynatrace expert to create a Process* +*Group detection rule* + +In the case the PG are PROD and E2E, then we need to create a rule that looks like this: + +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {Service:DetectedName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +- tag: Infotainment +- skipDeployment: false +``` + +The rule will get the Service Detected Name (current name) and it will extract (with a regex) the part of the kubernetes namespace after the "-", so -prod or -e2e, resulting in: +*DataDownloadV1 - prod* +*DataDownloadV1 - e2e* + +Now, services will be easy to identify. + +You can create rules based on any property/metadata. Some other placeholder's eamples: +{Service:DatabaseName} - E2E +{Service:WebServiceName} - {ProcessGroup:Kubernetes:microservice} - {ProcessGroup:Kubernetes:environment} +{Service:DetectedName} - {ProcessGroup:KubernetesContainerName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +{Service:DetectedName} - {ProcessGroup:SpringBootProfileName/[^\\-]*$} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_rsu/conditional-naming-service/conditional-naming-service.yaml b/BMW-Dynatrace-config/CD_rsu/conditional-naming-service/conditional-naming-service.yaml new file mode 100644 index 00000000..0f7139fc --- /dev/null +++ b/BMW-Dynatrace-config/CD_rsu/conditional-naming-service/conditional-naming-service.yaml @@ -0,0 +1,8 @@ +config: +- CDrsu: template.json + +CDrsu: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: rsu +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_rsu/conditional-naming-service/template.json b/BMW-Dynatrace-config/CD_rsu/conditional-naming-service/template.json new file mode 100644 index 00000000..5d4fac56 --- /dev/null +++ b/BMW-Dynatrace-config/CD_rsu/conditional-naming-service/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "type": "SERVICE" +} \ 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 index d41c4c77..5f35e5c1 100644 --- a/BMW-Dynatrace-config/CD_rsu/custom-service-java/README.md +++ b/BMW-Dynatrace-config/CD_rsu/custom-service-java/README.md @@ -1,30 +1,4 @@ -## 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 configure custom services? -## 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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Custom+Services) page to configure your custom services. \ 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 index 92e734fa..1695924c 100644 --- a/BMW-Dynatrace-config/CD_rsu/synthetic-monitor/README.md +++ b/BMW-Dynatrace-config/CD_rsu/synthetic-monitor/README.md @@ -1,37 +1,4 @@ -# Synthetic Configuration -To calculate the Availability KPI, a synthetic must be configured. +### How to configure synthetics? -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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Synthetic+Monitors) page to configure your synthetics. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_sbr/conditional-naming-processgroup/README.md b/BMW-Dynatrace-config/CD_sbr/conditional-naming-processgroup/README.md new file mode 100644 index 00000000..f94196a5 --- /dev/null +++ b/BMW-Dynatrace-config/CD_sbr/conditional-naming-processgroup/README.md @@ -0,0 +1,67 @@ +### Process Group Detection Rules and Naming + +#### Detection Rule or Naming? + +For the explanation, we're using a real example of the Infotainment application: + +!(PGNaming1)[../../../../img/PGNaming1.PNG] + +Before working with your dashboards and alerting profiles, an important task to do when working with Dynatrace is checking +the structure of your applications (process groups). You can do that clicking under *technologies* and filter using your +application Management Zone. + +In the picture above, there are two Process Groups called bon-information-prod. **If you see duplicated process groups like in** +**this case, you MUST follow this guideline** + +Next step would be to open both process groups and compare the metadata. In that way, you can identify if all process instances are +part of the same application or not. An easy way to do that is asking yourself: how many instances of my application do i have? + +If you have 4 instances in total and you're able to see 2 in one PG and other 2 in other PG it means that **they are part of the ** +**same application** + +Another situation could be that checking on the metadata, then you see that are **two different application** and Dynatrace is just naming +the process group in the same way + +*Same application* +- Problem: Dynatrace is creating two different process groups, what transalates in two separated services for the same application. Instead of +seeing all the traffic in one service, you will have it splitted and it will complicate your monitoring +- Solution: create a process group detection rule. Contact Dynatrace Expert + +*Different application* +- Problem: Dynatrace is just naming in the same way applications that are different. +- Solution: This case is less severe, since it can be fixed with a process group naming rule. + + +What about our example? +!(PGNaming2)[../../../../img/PGNaming2.PNG] +!(PGNaming3)[../../../../img/PGNaming3.PNG] + +Based on the feedback of the infotaiment team, each process group is a different application (microservice) and it's visible in the kubernetes container/workload +within the metadata of each Process Group. + +#### How to create a Process Group Detection Rule +1. Open the *conditional-naming-processgroup.yaml* file and create a rule that looks like this: +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName} +- tag: Infotainment +- skipDeployment: false +``` +The result of the rule will be renaming the PG to this: +``` +bon-information-prod ipa +bon-information-prod rsl +``` + +Other possible placeholders that you can use are for example: +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName/[^\\-]*$} +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesFullPodName/buffet-(.*?)-} +{ProcessGroup:DetectedName} - {HostGroup:Name/[^\\_]*$} +{ProcessGroup:KubernetesNamespace} +{ProcessGroup:CommandLineArgs/.*?\\-f\\s\\/www\\/(.*?)\\/generated\\/httpd\\.conf.*?} + +You can combine different ones. Check the (documentation)[link] for more \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_sbr/conditional-naming-processgroup/conditional-naming-processgroup.yaml b/BMW-Dynatrace-config/CD_sbr/conditional-naming-processgroup/conditional-naming-processgroup.yaml new file mode 100644 index 00000000..a9a2cec9 --- /dev/null +++ b/BMW-Dynatrace-config/CD_sbr/conditional-naming-processgroup/conditional-naming-processgroup.yaml @@ -0,0 +1,8 @@ +config: +- CDsbr: template.json + +CDsbr: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: sbr +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_sbr/conditional-naming-processgroup/template.json b/BMW-Dynatrace-config/CD_sbr/conditional-naming-processgroup/template.json new file mode 100644 index 00000000..7c039808 --- /dev/null +++ b/BMW-Dynatrace-config/CD_sbr/conditional-naming-processgroup/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "type": "PROCESS_GROUP" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_sbr/conditional-naming-service/README.md b/BMW-Dynatrace-config/CD_sbr/conditional-naming-service/README.md new file mode 100644 index 00000000..c34ef308 --- /dev/null +++ b/BMW-Dynatrace-config/CD_sbr/conditional-naming-service/README.md @@ -0,0 +1,35 @@ +### Service Naming Rules + +A typical case could be that you access to *Transaction & Services* and you find two services that are exactly the same: +*DataDownloadV1* +*DataDownloadV1* + +If you drilldown into the service and you check in the process group, you may have a PROD and a E2E for each service. + +*Note: if you see that both process group are exactly the same, please contact a Dynatrace expert to create a Process* +*Group detection rule* + +In the case the PG are PROD and E2E, then we need to create a rule that looks like this: + +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {Service:DetectedName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +- tag: Infotainment +- skipDeployment: false +``` + +The rule will get the Service Detected Name (current name) and it will extract (with a regex) the part of the kubernetes namespace after the "-", so -prod or -e2e, resulting in: +*DataDownloadV1 - prod* +*DataDownloadV1 - e2e* + +Now, services will be easy to identify. + +You can create rules based on any property/metadata. Some other placeholder's eamples: +{Service:DatabaseName} - E2E +{Service:WebServiceName} - {ProcessGroup:Kubernetes:microservice} - {ProcessGroup:Kubernetes:environment} +{Service:DetectedName} - {ProcessGroup:KubernetesContainerName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +{Service:DetectedName} - {ProcessGroup:SpringBootProfileName/[^\\-]*$} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_sbr/conditional-naming-service/conditional-naming-service.yaml b/BMW-Dynatrace-config/CD_sbr/conditional-naming-service/conditional-naming-service.yaml new file mode 100644 index 00000000..a9a2cec9 --- /dev/null +++ b/BMW-Dynatrace-config/CD_sbr/conditional-naming-service/conditional-naming-service.yaml @@ -0,0 +1,8 @@ +config: +- CDsbr: template.json + +CDsbr: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: sbr +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_sbr/conditional-naming-service/template.json b/BMW-Dynatrace-config/CD_sbr/conditional-naming-service/template.json new file mode 100644 index 00000000..5d4fac56 --- /dev/null +++ b/BMW-Dynatrace-config/CD_sbr/conditional-naming-service/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "type": "SERVICE" +} \ 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 index d41c4c77..5f35e5c1 100644 --- a/BMW-Dynatrace-config/CD_sbr/custom-service-java/README.md +++ b/BMW-Dynatrace-config/CD_sbr/custom-service-java/README.md @@ -1,30 +1,4 @@ -## 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 configure custom services? -## 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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Custom+Services) page to configure your custom services. \ 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 index 92e734fa..1695924c 100644 --- a/BMW-Dynatrace-config/CD_sbr/synthetic-monitor/README.md +++ b/BMW-Dynatrace-config/CD_sbr/synthetic-monitor/README.md @@ -1,37 +1,4 @@ -# Synthetic Configuration -To calculate the Availability KPI, a synthetic must be configured. +### How to configure synthetics? -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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Synthetic+Monitors) page to configure your synthetics. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_scb/conditional-naming-processgroup/README.md b/BMW-Dynatrace-config/CD_scb/conditional-naming-processgroup/README.md new file mode 100644 index 00000000..f94196a5 --- /dev/null +++ b/BMW-Dynatrace-config/CD_scb/conditional-naming-processgroup/README.md @@ -0,0 +1,67 @@ +### Process Group Detection Rules and Naming + +#### Detection Rule or Naming? + +For the explanation, we're using a real example of the Infotainment application: + +!(PGNaming1)[../../../../img/PGNaming1.PNG] + +Before working with your dashboards and alerting profiles, an important task to do when working with Dynatrace is checking +the structure of your applications (process groups). You can do that clicking under *technologies* and filter using your +application Management Zone. + +In the picture above, there are two Process Groups called bon-information-prod. **If you see duplicated process groups like in** +**this case, you MUST follow this guideline** + +Next step would be to open both process groups and compare the metadata. In that way, you can identify if all process instances are +part of the same application or not. An easy way to do that is asking yourself: how many instances of my application do i have? + +If you have 4 instances in total and you're able to see 2 in one PG and other 2 in other PG it means that **they are part of the ** +**same application** + +Another situation could be that checking on the metadata, then you see that are **two different application** and Dynatrace is just naming +the process group in the same way + +*Same application* +- Problem: Dynatrace is creating two different process groups, what transalates in two separated services for the same application. Instead of +seeing all the traffic in one service, you will have it splitted and it will complicate your monitoring +- Solution: create a process group detection rule. Contact Dynatrace Expert + +*Different application* +- Problem: Dynatrace is just naming in the same way applications that are different. +- Solution: This case is less severe, since it can be fixed with a process group naming rule. + + +What about our example? +!(PGNaming2)[../../../../img/PGNaming2.PNG] +!(PGNaming3)[../../../../img/PGNaming3.PNG] + +Based on the feedback of the infotaiment team, each process group is a different application (microservice) and it's visible in the kubernetes container/workload +within the metadata of each Process Group. + +#### How to create a Process Group Detection Rule +1. Open the *conditional-naming-processgroup.yaml* file and create a rule that looks like this: +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName} +- tag: Infotainment +- skipDeployment: false +``` +The result of the rule will be renaming the PG to this: +``` +bon-information-prod ipa +bon-information-prod rsl +``` + +Other possible placeholders that you can use are for example: +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName/[^\\-]*$} +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesFullPodName/buffet-(.*?)-} +{ProcessGroup:DetectedName} - {HostGroup:Name/[^\\_]*$} +{ProcessGroup:KubernetesNamespace} +{ProcessGroup:CommandLineArgs/.*?\\-f\\s\\/www\\/(.*?)\\/generated\\/httpd\\.conf.*?} + +You can combine different ones. Check the (documentation)[link] for more \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_scb/conditional-naming-processgroup/conditional-naming-processgroup.yaml b/BMW-Dynatrace-config/CD_scb/conditional-naming-processgroup/conditional-naming-processgroup.yaml new file mode 100644 index 00000000..37eb76f2 --- /dev/null +++ b/BMW-Dynatrace-config/CD_scb/conditional-naming-processgroup/conditional-naming-processgroup.yaml @@ -0,0 +1,8 @@ +config: +- CDscb: template.json + +CDscb: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: scb +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_scb/conditional-naming-processgroup/template.json b/BMW-Dynatrace-config/CD_scb/conditional-naming-processgroup/template.json new file mode 100644 index 00000000..7c039808 --- /dev/null +++ b/BMW-Dynatrace-config/CD_scb/conditional-naming-processgroup/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "type": "PROCESS_GROUP" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_scb/conditional-naming-service/README.md b/BMW-Dynatrace-config/CD_scb/conditional-naming-service/README.md new file mode 100644 index 00000000..c34ef308 --- /dev/null +++ b/BMW-Dynatrace-config/CD_scb/conditional-naming-service/README.md @@ -0,0 +1,35 @@ +### Service Naming Rules + +A typical case could be that you access to *Transaction & Services* and you find two services that are exactly the same: +*DataDownloadV1* +*DataDownloadV1* + +If you drilldown into the service and you check in the process group, you may have a PROD and a E2E for each service. + +*Note: if you see that both process group are exactly the same, please contact a Dynatrace expert to create a Process* +*Group detection rule* + +In the case the PG are PROD and E2E, then we need to create a rule that looks like this: + +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {Service:DetectedName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +- tag: Infotainment +- skipDeployment: false +``` + +The rule will get the Service Detected Name (current name) and it will extract (with a regex) the part of the kubernetes namespace after the "-", so -prod or -e2e, resulting in: +*DataDownloadV1 - prod* +*DataDownloadV1 - e2e* + +Now, services will be easy to identify. + +You can create rules based on any property/metadata. Some other placeholder's eamples: +{Service:DatabaseName} - E2E +{Service:WebServiceName} - {ProcessGroup:Kubernetes:microservice} - {ProcessGroup:Kubernetes:environment} +{Service:DetectedName} - {ProcessGroup:KubernetesContainerName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +{Service:DetectedName} - {ProcessGroup:SpringBootProfileName/[^\\-]*$} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_scb/conditional-naming-service/conditional-naming-service.yaml b/BMW-Dynatrace-config/CD_scb/conditional-naming-service/conditional-naming-service.yaml new file mode 100644 index 00000000..37eb76f2 --- /dev/null +++ b/BMW-Dynatrace-config/CD_scb/conditional-naming-service/conditional-naming-service.yaml @@ -0,0 +1,8 @@ +config: +- CDscb: template.json + +CDscb: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: scb +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_scb/conditional-naming-service/template.json b/BMW-Dynatrace-config/CD_scb/conditional-naming-service/template.json new file mode 100644 index 00000000..5d4fac56 --- /dev/null +++ b/BMW-Dynatrace-config/CD_scb/conditional-naming-service/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "type": "SERVICE" +} \ 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 index d41c4c77..5f35e5c1 100644 --- a/BMW-Dynatrace-config/CD_scb/custom-service-java/README.md +++ b/BMW-Dynatrace-config/CD_scb/custom-service-java/README.md @@ -1,30 +1,4 @@ -## 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 configure custom services? -## 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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Custom+Services) page to configure your custom services. \ 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 index 92e734fa..1695924c 100644 --- a/BMW-Dynatrace-config/CD_scb/synthetic-monitor/README.md +++ b/BMW-Dynatrace-config/CD_scb/synthetic-monitor/README.md @@ -1,37 +1,4 @@ -# Synthetic Configuration -To calculate the Availability KPI, a synthetic must be configured. +### How to configure synthetics? -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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Synthetic+Monitors) page to configure your synthetics. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_scc/conditional-naming-processgroup/README.md b/BMW-Dynatrace-config/CD_scc/conditional-naming-processgroup/README.md new file mode 100644 index 00000000..f94196a5 --- /dev/null +++ b/BMW-Dynatrace-config/CD_scc/conditional-naming-processgroup/README.md @@ -0,0 +1,67 @@ +### Process Group Detection Rules and Naming + +#### Detection Rule or Naming? + +For the explanation, we're using a real example of the Infotainment application: + +!(PGNaming1)[../../../../img/PGNaming1.PNG] + +Before working with your dashboards and alerting profiles, an important task to do when working with Dynatrace is checking +the structure of your applications (process groups). You can do that clicking under *technologies* and filter using your +application Management Zone. + +In the picture above, there are two Process Groups called bon-information-prod. **If you see duplicated process groups like in** +**this case, you MUST follow this guideline** + +Next step would be to open both process groups and compare the metadata. In that way, you can identify if all process instances are +part of the same application or not. An easy way to do that is asking yourself: how many instances of my application do i have? + +If you have 4 instances in total and you're able to see 2 in one PG and other 2 in other PG it means that **they are part of the ** +**same application** + +Another situation could be that checking on the metadata, then you see that are **two different application** and Dynatrace is just naming +the process group in the same way + +*Same application* +- Problem: Dynatrace is creating two different process groups, what transalates in two separated services for the same application. Instead of +seeing all the traffic in one service, you will have it splitted and it will complicate your monitoring +- Solution: create a process group detection rule. Contact Dynatrace Expert + +*Different application* +- Problem: Dynatrace is just naming in the same way applications that are different. +- Solution: This case is less severe, since it can be fixed with a process group naming rule. + + +What about our example? +!(PGNaming2)[../../../../img/PGNaming2.PNG] +!(PGNaming3)[../../../../img/PGNaming3.PNG] + +Based on the feedback of the infotaiment team, each process group is a different application (microservice) and it's visible in the kubernetes container/workload +within the metadata of each Process Group. + +#### How to create a Process Group Detection Rule +1. Open the *conditional-naming-processgroup.yaml* file and create a rule that looks like this: +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName} +- tag: Infotainment +- skipDeployment: false +``` +The result of the rule will be renaming the PG to this: +``` +bon-information-prod ipa +bon-information-prod rsl +``` + +Other possible placeholders that you can use are for example: +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName/[^\\-]*$} +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesFullPodName/buffet-(.*?)-} +{ProcessGroup:DetectedName} - {HostGroup:Name/[^\\_]*$} +{ProcessGroup:KubernetesNamespace} +{ProcessGroup:CommandLineArgs/.*?\\-f\\s\\/www\\/(.*?)\\/generated\\/httpd\\.conf.*?} + +You can combine different ones. Check the (documentation)[link] for more \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_scc/conditional-naming-processgroup/conditional-naming-processgroup.yaml b/BMW-Dynatrace-config/CD_scc/conditional-naming-processgroup/conditional-naming-processgroup.yaml new file mode 100644 index 00000000..3bbc005a --- /dev/null +++ b/BMW-Dynatrace-config/CD_scc/conditional-naming-processgroup/conditional-naming-processgroup.yaml @@ -0,0 +1,8 @@ +config: +- CDscc: template.json + +CDscc: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: scc +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_scc/conditional-naming-processgroup/template.json b/BMW-Dynatrace-config/CD_scc/conditional-naming-processgroup/template.json new file mode 100644 index 00000000..7c039808 --- /dev/null +++ b/BMW-Dynatrace-config/CD_scc/conditional-naming-processgroup/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "type": "PROCESS_GROUP" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_scc/conditional-naming-service/README.md b/BMW-Dynatrace-config/CD_scc/conditional-naming-service/README.md new file mode 100644 index 00000000..c34ef308 --- /dev/null +++ b/BMW-Dynatrace-config/CD_scc/conditional-naming-service/README.md @@ -0,0 +1,35 @@ +### Service Naming Rules + +A typical case could be that you access to *Transaction & Services* and you find two services that are exactly the same: +*DataDownloadV1* +*DataDownloadV1* + +If you drilldown into the service and you check in the process group, you may have a PROD and a E2E for each service. + +*Note: if you see that both process group are exactly the same, please contact a Dynatrace expert to create a Process* +*Group detection rule* + +In the case the PG are PROD and E2E, then we need to create a rule that looks like this: + +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {Service:DetectedName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +- tag: Infotainment +- skipDeployment: false +``` + +The rule will get the Service Detected Name (current name) and it will extract (with a regex) the part of the kubernetes namespace after the "-", so -prod or -e2e, resulting in: +*DataDownloadV1 - prod* +*DataDownloadV1 - e2e* + +Now, services will be easy to identify. + +You can create rules based on any property/metadata. Some other placeholder's eamples: +{Service:DatabaseName} - E2E +{Service:WebServiceName} - {ProcessGroup:Kubernetes:microservice} - {ProcessGroup:Kubernetes:environment} +{Service:DetectedName} - {ProcessGroup:KubernetesContainerName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +{Service:DetectedName} - {ProcessGroup:SpringBootProfileName/[^\\-]*$} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_scc/conditional-naming-service/conditional-naming-service.yaml b/BMW-Dynatrace-config/CD_scc/conditional-naming-service/conditional-naming-service.yaml new file mode 100644 index 00000000..3bbc005a --- /dev/null +++ b/BMW-Dynatrace-config/CD_scc/conditional-naming-service/conditional-naming-service.yaml @@ -0,0 +1,8 @@ +config: +- CDscc: template.json + +CDscc: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: scc +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_scc/conditional-naming-service/template.json b/BMW-Dynatrace-config/CD_scc/conditional-naming-service/template.json new file mode 100644 index 00000000..5d4fac56 --- /dev/null +++ b/BMW-Dynatrace-config/CD_scc/conditional-naming-service/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "type": "SERVICE" +} \ 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 index d41c4c77..5f35e5c1 100644 --- a/BMW-Dynatrace-config/CD_scc/custom-service-java/README.md +++ b/BMW-Dynatrace-config/CD_scc/custom-service-java/README.md @@ -1,30 +1,4 @@ -## 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 configure custom services? -## 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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Custom+Services) page to configure your custom services. \ 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 index 92e734fa..1695924c 100644 --- a/BMW-Dynatrace-config/CD_scc/synthetic-monitor/README.md +++ b/BMW-Dynatrace-config/CD_scc/synthetic-monitor/README.md @@ -1,37 +1,4 @@ -# Synthetic Configuration -To calculate the Availability KPI, a synthetic must be configured. +### How to configure synthetics? -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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Synthetic+Monitors) page to configure your synthetics. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_scm-agentreg/conditional-naming-processgroup/README.md b/BMW-Dynatrace-config/CD_scm-agentreg/conditional-naming-processgroup/README.md new file mode 100644 index 00000000..f94196a5 --- /dev/null +++ b/BMW-Dynatrace-config/CD_scm-agentreg/conditional-naming-processgroup/README.md @@ -0,0 +1,67 @@ +### Process Group Detection Rules and Naming + +#### Detection Rule or Naming? + +For the explanation, we're using a real example of the Infotainment application: + +!(PGNaming1)[../../../../img/PGNaming1.PNG] + +Before working with your dashboards and alerting profiles, an important task to do when working with Dynatrace is checking +the structure of your applications (process groups). You can do that clicking under *technologies* and filter using your +application Management Zone. + +In the picture above, there are two Process Groups called bon-information-prod. **If you see duplicated process groups like in** +**this case, you MUST follow this guideline** + +Next step would be to open both process groups and compare the metadata. In that way, you can identify if all process instances are +part of the same application or not. An easy way to do that is asking yourself: how many instances of my application do i have? + +If you have 4 instances in total and you're able to see 2 in one PG and other 2 in other PG it means that **they are part of the ** +**same application** + +Another situation could be that checking on the metadata, then you see that are **two different application** and Dynatrace is just naming +the process group in the same way + +*Same application* +- Problem: Dynatrace is creating two different process groups, what transalates in two separated services for the same application. Instead of +seeing all the traffic in one service, you will have it splitted and it will complicate your monitoring +- Solution: create a process group detection rule. Contact Dynatrace Expert + +*Different application* +- Problem: Dynatrace is just naming in the same way applications that are different. +- Solution: This case is less severe, since it can be fixed with a process group naming rule. + + +What about our example? +!(PGNaming2)[../../../../img/PGNaming2.PNG] +!(PGNaming3)[../../../../img/PGNaming3.PNG] + +Based on the feedback of the infotaiment team, each process group is a different application (microservice) and it's visible in the kubernetes container/workload +within the metadata of each Process Group. + +#### How to create a Process Group Detection Rule +1. Open the *conditional-naming-processgroup.yaml* file and create a rule that looks like this: +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName} +- tag: Infotainment +- skipDeployment: false +``` +The result of the rule will be renaming the PG to this: +``` +bon-information-prod ipa +bon-information-prod rsl +``` + +Other possible placeholders that you can use are for example: +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName/[^\\-]*$} +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesFullPodName/buffet-(.*?)-} +{ProcessGroup:DetectedName} - {HostGroup:Name/[^\\_]*$} +{ProcessGroup:KubernetesNamespace} +{ProcessGroup:CommandLineArgs/.*?\\-f\\s\\/www\\/(.*?)\\/generated\\/httpd\\.conf.*?} + +You can combine different ones. Check the (documentation)[link] for more \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_scm-agentreg/conditional-naming-processgroup/conditional-naming-processgroup.yaml b/BMW-Dynatrace-config/CD_scm-agentreg/conditional-naming-processgroup/conditional-naming-processgroup.yaml new file mode 100644 index 00000000..4356c404 --- /dev/null +++ b/BMW-Dynatrace-config/CD_scm-agentreg/conditional-naming-processgroup/conditional-naming-processgroup.yaml @@ -0,0 +1,8 @@ +config: +- CDscm-agentreg: template.json + +CDscm-agentreg: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: scm-agentreg +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_scm-agentreg/conditional-naming-processgroup/template.json b/BMW-Dynatrace-config/CD_scm-agentreg/conditional-naming-processgroup/template.json new file mode 100644 index 00000000..7c039808 --- /dev/null +++ b/BMW-Dynatrace-config/CD_scm-agentreg/conditional-naming-processgroup/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "type": "PROCESS_GROUP" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_scm-agentreg/conditional-naming-service/README.md b/BMW-Dynatrace-config/CD_scm-agentreg/conditional-naming-service/README.md new file mode 100644 index 00000000..c34ef308 --- /dev/null +++ b/BMW-Dynatrace-config/CD_scm-agentreg/conditional-naming-service/README.md @@ -0,0 +1,35 @@ +### Service Naming Rules + +A typical case could be that you access to *Transaction & Services* and you find two services that are exactly the same: +*DataDownloadV1* +*DataDownloadV1* + +If you drilldown into the service and you check in the process group, you may have a PROD and a E2E for each service. + +*Note: if you see that both process group are exactly the same, please contact a Dynatrace expert to create a Process* +*Group detection rule* + +In the case the PG are PROD and E2E, then we need to create a rule that looks like this: + +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {Service:DetectedName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +- tag: Infotainment +- skipDeployment: false +``` + +The rule will get the Service Detected Name (current name) and it will extract (with a regex) the part of the kubernetes namespace after the "-", so -prod or -e2e, resulting in: +*DataDownloadV1 - prod* +*DataDownloadV1 - e2e* + +Now, services will be easy to identify. + +You can create rules based on any property/metadata. Some other placeholder's eamples: +{Service:DatabaseName} - E2E +{Service:WebServiceName} - {ProcessGroup:Kubernetes:microservice} - {ProcessGroup:Kubernetes:environment} +{Service:DetectedName} - {ProcessGroup:KubernetesContainerName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +{Service:DetectedName} - {ProcessGroup:SpringBootProfileName/[^\\-]*$} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_scm-agentreg/conditional-naming-service/conditional-naming-service.yaml b/BMW-Dynatrace-config/CD_scm-agentreg/conditional-naming-service/conditional-naming-service.yaml new file mode 100644 index 00000000..4356c404 --- /dev/null +++ b/BMW-Dynatrace-config/CD_scm-agentreg/conditional-naming-service/conditional-naming-service.yaml @@ -0,0 +1,8 @@ +config: +- CDscm-agentreg: template.json + +CDscm-agentreg: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: scm-agentreg +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_scm-agentreg/conditional-naming-service/template.json b/BMW-Dynatrace-config/CD_scm-agentreg/conditional-naming-service/template.json new file mode 100644 index 00000000..5d4fac56 --- /dev/null +++ b/BMW-Dynatrace-config/CD_scm-agentreg/conditional-naming-service/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "type": "SERVICE" +} \ 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 index d41c4c77..5f35e5c1 100644 --- a/BMW-Dynatrace-config/CD_scm-agentreg/custom-service-java/README.md +++ b/BMW-Dynatrace-config/CD_scm-agentreg/custom-service-java/README.md @@ -1,30 +1,4 @@ -## 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 configure custom services? -## 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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Custom+Services) page to configure your custom services. \ 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 index 92e734fa..1695924c 100644 --- a/BMW-Dynatrace-config/CD_scm-agentreg/synthetic-monitor/README.md +++ b/BMW-Dynatrace-config/CD_scm-agentreg/synthetic-monitor/README.md @@ -1,37 +1,4 @@ -# Synthetic Configuration -To calculate the Availability KPI, a synthetic must be configured. +### How to configure synthetics? -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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Synthetic+Monitors) page to configure your synthetics. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_scm-scm/conditional-naming-processgroup/README.md b/BMW-Dynatrace-config/CD_scm-scm/conditional-naming-processgroup/README.md new file mode 100644 index 00000000..f94196a5 --- /dev/null +++ b/BMW-Dynatrace-config/CD_scm-scm/conditional-naming-processgroup/README.md @@ -0,0 +1,67 @@ +### Process Group Detection Rules and Naming + +#### Detection Rule or Naming? + +For the explanation, we're using a real example of the Infotainment application: + +!(PGNaming1)[../../../../img/PGNaming1.PNG] + +Before working with your dashboards and alerting profiles, an important task to do when working with Dynatrace is checking +the structure of your applications (process groups). You can do that clicking under *technologies* and filter using your +application Management Zone. + +In the picture above, there are two Process Groups called bon-information-prod. **If you see duplicated process groups like in** +**this case, you MUST follow this guideline** + +Next step would be to open both process groups and compare the metadata. In that way, you can identify if all process instances are +part of the same application or not. An easy way to do that is asking yourself: how many instances of my application do i have? + +If you have 4 instances in total and you're able to see 2 in one PG and other 2 in other PG it means that **they are part of the ** +**same application** + +Another situation could be that checking on the metadata, then you see that are **two different application** and Dynatrace is just naming +the process group in the same way + +*Same application* +- Problem: Dynatrace is creating two different process groups, what transalates in two separated services for the same application. Instead of +seeing all the traffic in one service, you will have it splitted and it will complicate your monitoring +- Solution: create a process group detection rule. Contact Dynatrace Expert + +*Different application* +- Problem: Dynatrace is just naming in the same way applications that are different. +- Solution: This case is less severe, since it can be fixed with a process group naming rule. + + +What about our example? +!(PGNaming2)[../../../../img/PGNaming2.PNG] +!(PGNaming3)[../../../../img/PGNaming3.PNG] + +Based on the feedback of the infotaiment team, each process group is a different application (microservice) and it's visible in the kubernetes container/workload +within the metadata of each Process Group. + +#### How to create a Process Group Detection Rule +1. Open the *conditional-naming-processgroup.yaml* file and create a rule that looks like this: +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName} +- tag: Infotainment +- skipDeployment: false +``` +The result of the rule will be renaming the PG to this: +``` +bon-information-prod ipa +bon-information-prod rsl +``` + +Other possible placeholders that you can use are for example: +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName/[^\\-]*$} +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesFullPodName/buffet-(.*?)-} +{ProcessGroup:DetectedName} - {HostGroup:Name/[^\\_]*$} +{ProcessGroup:KubernetesNamespace} +{ProcessGroup:CommandLineArgs/.*?\\-f\\s\\/www\\/(.*?)\\/generated\\/httpd\\.conf.*?} + +You can combine different ones. Check the (documentation)[link] for more \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_scm-scm/conditional-naming-processgroup/conditional-naming-processgroup.yaml b/BMW-Dynatrace-config/CD_scm-scm/conditional-naming-processgroup/conditional-naming-processgroup.yaml new file mode 100644 index 00000000..6dfd77ac --- /dev/null +++ b/BMW-Dynatrace-config/CD_scm-scm/conditional-naming-processgroup/conditional-naming-processgroup.yaml @@ -0,0 +1,8 @@ +config: +- CDscm-scm: template.json + +CDscm-scm: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: scm-scm +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_scm-scm/conditional-naming-processgroup/template.json b/BMW-Dynatrace-config/CD_scm-scm/conditional-naming-processgroup/template.json new file mode 100644 index 00000000..7c039808 --- /dev/null +++ b/BMW-Dynatrace-config/CD_scm-scm/conditional-naming-processgroup/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "type": "PROCESS_GROUP" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_scm-scm/conditional-naming-service/README.md b/BMW-Dynatrace-config/CD_scm-scm/conditional-naming-service/README.md new file mode 100644 index 00000000..c34ef308 --- /dev/null +++ b/BMW-Dynatrace-config/CD_scm-scm/conditional-naming-service/README.md @@ -0,0 +1,35 @@ +### Service Naming Rules + +A typical case could be that you access to *Transaction & Services* and you find two services that are exactly the same: +*DataDownloadV1* +*DataDownloadV1* + +If you drilldown into the service and you check in the process group, you may have a PROD and a E2E for each service. + +*Note: if you see that both process group are exactly the same, please contact a Dynatrace expert to create a Process* +*Group detection rule* + +In the case the PG are PROD and E2E, then we need to create a rule that looks like this: + +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {Service:DetectedName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +- tag: Infotainment +- skipDeployment: false +``` + +The rule will get the Service Detected Name (current name) and it will extract (with a regex) the part of the kubernetes namespace after the "-", so -prod or -e2e, resulting in: +*DataDownloadV1 - prod* +*DataDownloadV1 - e2e* + +Now, services will be easy to identify. + +You can create rules based on any property/metadata. Some other placeholder's eamples: +{Service:DatabaseName} - E2E +{Service:WebServiceName} - {ProcessGroup:Kubernetes:microservice} - {ProcessGroup:Kubernetes:environment} +{Service:DetectedName} - {ProcessGroup:KubernetesContainerName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +{Service:DetectedName} - {ProcessGroup:SpringBootProfileName/[^\\-]*$} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_scm-scm/conditional-naming-service/conditional-naming-service.yaml b/BMW-Dynatrace-config/CD_scm-scm/conditional-naming-service/conditional-naming-service.yaml new file mode 100644 index 00000000..6dfd77ac --- /dev/null +++ b/BMW-Dynatrace-config/CD_scm-scm/conditional-naming-service/conditional-naming-service.yaml @@ -0,0 +1,8 @@ +config: +- CDscm-scm: template.json + +CDscm-scm: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: scm-scm +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_scm-scm/conditional-naming-service/template.json b/BMW-Dynatrace-config/CD_scm-scm/conditional-naming-service/template.json new file mode 100644 index 00000000..5d4fac56 --- /dev/null +++ b/BMW-Dynatrace-config/CD_scm-scm/conditional-naming-service/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "type": "SERVICE" +} \ 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 index d41c4c77..5f35e5c1 100644 --- a/BMW-Dynatrace-config/CD_scm-scm/custom-service-java/README.md +++ b/BMW-Dynatrace-config/CD_scm-scm/custom-service-java/README.md @@ -1,30 +1,4 @@ -## 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 configure custom services? -## 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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Custom+Services) page to configure your custom services. \ 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 index 92e734fa..1695924c 100644 --- a/BMW-Dynatrace-config/CD_scm-scm/synthetic-monitor/README.md +++ b/BMW-Dynatrace-config/CD_scm-scm/synthetic-monitor/README.md @@ -1,37 +1,4 @@ -# Synthetic Configuration -To calculate the Availability KPI, a synthetic must be configured. +### How to configure synthetics? -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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Synthetic+Monitors) page to configure your synthetics. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_scma-backend/conditional-naming-processgroup/README.md b/BMW-Dynatrace-config/CD_scma-backend/conditional-naming-processgroup/README.md new file mode 100644 index 00000000..f94196a5 --- /dev/null +++ b/BMW-Dynatrace-config/CD_scma-backend/conditional-naming-processgroup/README.md @@ -0,0 +1,67 @@ +### Process Group Detection Rules and Naming + +#### Detection Rule or Naming? + +For the explanation, we're using a real example of the Infotainment application: + +!(PGNaming1)[../../../../img/PGNaming1.PNG] + +Before working with your dashboards and alerting profiles, an important task to do when working with Dynatrace is checking +the structure of your applications (process groups). You can do that clicking under *technologies* and filter using your +application Management Zone. + +In the picture above, there are two Process Groups called bon-information-prod. **If you see duplicated process groups like in** +**this case, you MUST follow this guideline** + +Next step would be to open both process groups and compare the metadata. In that way, you can identify if all process instances are +part of the same application or not. An easy way to do that is asking yourself: how many instances of my application do i have? + +If you have 4 instances in total and you're able to see 2 in one PG and other 2 in other PG it means that **they are part of the ** +**same application** + +Another situation could be that checking on the metadata, then you see that are **two different application** and Dynatrace is just naming +the process group in the same way + +*Same application* +- Problem: Dynatrace is creating two different process groups, what transalates in two separated services for the same application. Instead of +seeing all the traffic in one service, you will have it splitted and it will complicate your monitoring +- Solution: create a process group detection rule. Contact Dynatrace Expert + +*Different application* +- Problem: Dynatrace is just naming in the same way applications that are different. +- Solution: This case is less severe, since it can be fixed with a process group naming rule. + + +What about our example? +!(PGNaming2)[../../../../img/PGNaming2.PNG] +!(PGNaming3)[../../../../img/PGNaming3.PNG] + +Based on the feedback of the infotaiment team, each process group is a different application (microservice) and it's visible in the kubernetes container/workload +within the metadata of each Process Group. + +#### How to create a Process Group Detection Rule +1. Open the *conditional-naming-processgroup.yaml* file and create a rule that looks like this: +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName} +- tag: Infotainment +- skipDeployment: false +``` +The result of the rule will be renaming the PG to this: +``` +bon-information-prod ipa +bon-information-prod rsl +``` + +Other possible placeholders that you can use are for example: +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName/[^\\-]*$} +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesFullPodName/buffet-(.*?)-} +{ProcessGroup:DetectedName} - {HostGroup:Name/[^\\_]*$} +{ProcessGroup:KubernetesNamespace} +{ProcessGroup:CommandLineArgs/.*?\\-f\\s\\/www\\/(.*?)\\/generated\\/httpd\\.conf.*?} + +You can combine different ones. Check the (documentation)[link] for more \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_scma-backend/conditional-naming-processgroup/conditional-naming-processgroup.yaml b/BMW-Dynatrace-config/CD_scma-backend/conditional-naming-processgroup/conditional-naming-processgroup.yaml new file mode 100644 index 00000000..3152e3c3 --- /dev/null +++ b/BMW-Dynatrace-config/CD_scma-backend/conditional-naming-processgroup/conditional-naming-processgroup.yaml @@ -0,0 +1,8 @@ +config: +- CDscma-backend: template.json + +CDscma-backend: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: scma-backend +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_scma-backend/conditional-naming-processgroup/template.json b/BMW-Dynatrace-config/CD_scma-backend/conditional-naming-processgroup/template.json new file mode 100644 index 00000000..7c039808 --- /dev/null +++ b/BMW-Dynatrace-config/CD_scma-backend/conditional-naming-processgroup/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "type": "PROCESS_GROUP" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_scma-backend/conditional-naming-service/README.md b/BMW-Dynatrace-config/CD_scma-backend/conditional-naming-service/README.md new file mode 100644 index 00000000..c34ef308 --- /dev/null +++ b/BMW-Dynatrace-config/CD_scma-backend/conditional-naming-service/README.md @@ -0,0 +1,35 @@ +### Service Naming Rules + +A typical case could be that you access to *Transaction & Services* and you find two services that are exactly the same: +*DataDownloadV1* +*DataDownloadV1* + +If you drilldown into the service and you check in the process group, you may have a PROD and a E2E for each service. + +*Note: if you see that both process group are exactly the same, please contact a Dynatrace expert to create a Process* +*Group detection rule* + +In the case the PG are PROD and E2E, then we need to create a rule that looks like this: + +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {Service:DetectedName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +- tag: Infotainment +- skipDeployment: false +``` + +The rule will get the Service Detected Name (current name) and it will extract (with a regex) the part of the kubernetes namespace after the "-", so -prod or -e2e, resulting in: +*DataDownloadV1 - prod* +*DataDownloadV1 - e2e* + +Now, services will be easy to identify. + +You can create rules based on any property/metadata. Some other placeholder's eamples: +{Service:DatabaseName} - E2E +{Service:WebServiceName} - {ProcessGroup:Kubernetes:microservice} - {ProcessGroup:Kubernetes:environment} +{Service:DetectedName} - {ProcessGroup:KubernetesContainerName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +{Service:DetectedName} - {ProcessGroup:SpringBootProfileName/[^\\-]*$} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_scma-backend/conditional-naming-service/conditional-naming-service.yaml b/BMW-Dynatrace-config/CD_scma-backend/conditional-naming-service/conditional-naming-service.yaml new file mode 100644 index 00000000..3152e3c3 --- /dev/null +++ b/BMW-Dynatrace-config/CD_scma-backend/conditional-naming-service/conditional-naming-service.yaml @@ -0,0 +1,8 @@ +config: +- CDscma-backend: template.json + +CDscma-backend: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: scma-backend +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_scma-backend/conditional-naming-service/template.json b/BMW-Dynatrace-config/CD_scma-backend/conditional-naming-service/template.json new file mode 100644 index 00000000..5d4fac56 --- /dev/null +++ b/BMW-Dynatrace-config/CD_scma-backend/conditional-naming-service/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "type": "SERVICE" +} \ 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 index d41c4c77..5f35e5c1 100644 --- a/BMW-Dynatrace-config/CD_scma-backend/custom-service-java/README.md +++ b/BMW-Dynatrace-config/CD_scma-backend/custom-service-java/README.md @@ -1,30 +1,4 @@ -## 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 configure custom services? -## 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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Custom+Services) page to configure your custom services. \ 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 index 92e734fa..1695924c 100644 --- a/BMW-Dynatrace-config/CD_scma-backend/synthetic-monitor/README.md +++ b/BMW-Dynatrace-config/CD_scma-backend/synthetic-monitor/README.md @@ -1,37 +1,4 @@ -# Synthetic Configuration -To calculate the Availability KPI, a synthetic must be configured. +### How to configure synthetics? -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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Synthetic+Monitors) page to configure your synthetics. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_seam-event-consumer/conditional-naming-processgroup/README.md b/BMW-Dynatrace-config/CD_seam-event-consumer/conditional-naming-processgroup/README.md new file mode 100644 index 00000000..f94196a5 --- /dev/null +++ b/BMW-Dynatrace-config/CD_seam-event-consumer/conditional-naming-processgroup/README.md @@ -0,0 +1,67 @@ +### Process Group Detection Rules and Naming + +#### Detection Rule or Naming? + +For the explanation, we're using a real example of the Infotainment application: + +!(PGNaming1)[../../../../img/PGNaming1.PNG] + +Before working with your dashboards and alerting profiles, an important task to do when working with Dynatrace is checking +the structure of your applications (process groups). You can do that clicking under *technologies* and filter using your +application Management Zone. + +In the picture above, there are two Process Groups called bon-information-prod. **If you see duplicated process groups like in** +**this case, you MUST follow this guideline** + +Next step would be to open both process groups and compare the metadata. In that way, you can identify if all process instances are +part of the same application or not. An easy way to do that is asking yourself: how many instances of my application do i have? + +If you have 4 instances in total and you're able to see 2 in one PG and other 2 in other PG it means that **they are part of the ** +**same application** + +Another situation could be that checking on the metadata, then you see that are **two different application** and Dynatrace is just naming +the process group in the same way + +*Same application* +- Problem: Dynatrace is creating two different process groups, what transalates in two separated services for the same application. Instead of +seeing all the traffic in one service, you will have it splitted and it will complicate your monitoring +- Solution: create a process group detection rule. Contact Dynatrace Expert + +*Different application* +- Problem: Dynatrace is just naming in the same way applications that are different. +- Solution: This case is less severe, since it can be fixed with a process group naming rule. + + +What about our example? +!(PGNaming2)[../../../../img/PGNaming2.PNG] +!(PGNaming3)[../../../../img/PGNaming3.PNG] + +Based on the feedback of the infotaiment team, each process group is a different application (microservice) and it's visible in the kubernetes container/workload +within the metadata of each Process Group. + +#### How to create a Process Group Detection Rule +1. Open the *conditional-naming-processgroup.yaml* file and create a rule that looks like this: +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName} +- tag: Infotainment +- skipDeployment: false +``` +The result of the rule will be renaming the PG to this: +``` +bon-information-prod ipa +bon-information-prod rsl +``` + +Other possible placeholders that you can use are for example: +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName/[^\\-]*$} +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesFullPodName/buffet-(.*?)-} +{ProcessGroup:DetectedName} - {HostGroup:Name/[^\\_]*$} +{ProcessGroup:KubernetesNamespace} +{ProcessGroup:CommandLineArgs/.*?\\-f\\s\\/www\\/(.*?)\\/generated\\/httpd\\.conf.*?} + +You can combine different ones. Check the (documentation)[link] for more \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_seam-event-consumer/conditional-naming-processgroup/conditional-naming-processgroup.yaml b/BMW-Dynatrace-config/CD_seam-event-consumer/conditional-naming-processgroup/conditional-naming-processgroup.yaml new file mode 100644 index 00000000..3224bdd5 --- /dev/null +++ b/BMW-Dynatrace-config/CD_seam-event-consumer/conditional-naming-processgroup/conditional-naming-processgroup.yaml @@ -0,0 +1,8 @@ +config: +- CDseam-event-consumer: template.json + +CDseam-event-consumer: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: seam-event-consumer +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_seam-event-consumer/conditional-naming-processgroup/template.json b/BMW-Dynatrace-config/CD_seam-event-consumer/conditional-naming-processgroup/template.json new file mode 100644 index 00000000..7c039808 --- /dev/null +++ b/BMW-Dynatrace-config/CD_seam-event-consumer/conditional-naming-processgroup/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "type": "PROCESS_GROUP" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_seam-event-consumer/conditional-naming-service/README.md b/BMW-Dynatrace-config/CD_seam-event-consumer/conditional-naming-service/README.md new file mode 100644 index 00000000..c34ef308 --- /dev/null +++ b/BMW-Dynatrace-config/CD_seam-event-consumer/conditional-naming-service/README.md @@ -0,0 +1,35 @@ +### Service Naming Rules + +A typical case could be that you access to *Transaction & Services* and you find two services that are exactly the same: +*DataDownloadV1* +*DataDownloadV1* + +If you drilldown into the service and you check in the process group, you may have a PROD and a E2E for each service. + +*Note: if you see that both process group are exactly the same, please contact a Dynatrace expert to create a Process* +*Group detection rule* + +In the case the PG are PROD and E2E, then we need to create a rule that looks like this: + +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {Service:DetectedName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +- tag: Infotainment +- skipDeployment: false +``` + +The rule will get the Service Detected Name (current name) and it will extract (with a regex) the part of the kubernetes namespace after the "-", so -prod or -e2e, resulting in: +*DataDownloadV1 - prod* +*DataDownloadV1 - e2e* + +Now, services will be easy to identify. + +You can create rules based on any property/metadata. Some other placeholder's eamples: +{Service:DatabaseName} - E2E +{Service:WebServiceName} - {ProcessGroup:Kubernetes:microservice} - {ProcessGroup:Kubernetes:environment} +{Service:DetectedName} - {ProcessGroup:KubernetesContainerName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +{Service:DetectedName} - {ProcessGroup:SpringBootProfileName/[^\\-]*$} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_seam-event-consumer/conditional-naming-service/conditional-naming-service.yaml b/BMW-Dynatrace-config/CD_seam-event-consumer/conditional-naming-service/conditional-naming-service.yaml new file mode 100644 index 00000000..3224bdd5 --- /dev/null +++ b/BMW-Dynatrace-config/CD_seam-event-consumer/conditional-naming-service/conditional-naming-service.yaml @@ -0,0 +1,8 @@ +config: +- CDseam-event-consumer: template.json + +CDseam-event-consumer: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: seam-event-consumer +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_seam-event-consumer/conditional-naming-service/template.json b/BMW-Dynatrace-config/CD_seam-event-consumer/conditional-naming-service/template.json new file mode 100644 index 00000000..5d4fac56 --- /dev/null +++ b/BMW-Dynatrace-config/CD_seam-event-consumer/conditional-naming-service/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "type": "SERVICE" +} \ 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 index d41c4c77..5f35e5c1 100644 --- 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 @@ -1,30 +1,4 @@ -## 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 configure custom services? -## 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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Custom+Services) page to configure your custom services. \ 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 index 92e734fa..1695924c 100644 --- a/BMW-Dynatrace-config/CD_seam-event-consumer/synthetic-monitor/README.md +++ b/BMW-Dynatrace-config/CD_seam-event-consumer/synthetic-monitor/README.md @@ -1,37 +1,4 @@ -# Synthetic Configuration -To calculate the Availability KPI, a synthetic must be configured. +### How to configure synthetics? -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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Synthetic+Monitors) page to configure your synthetics. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_seam-event-producer/conditional-naming-processgroup/README.md b/BMW-Dynatrace-config/CD_seam-event-producer/conditional-naming-processgroup/README.md new file mode 100644 index 00000000..f94196a5 --- /dev/null +++ b/BMW-Dynatrace-config/CD_seam-event-producer/conditional-naming-processgroup/README.md @@ -0,0 +1,67 @@ +### Process Group Detection Rules and Naming + +#### Detection Rule or Naming? + +For the explanation, we're using a real example of the Infotainment application: + +!(PGNaming1)[../../../../img/PGNaming1.PNG] + +Before working with your dashboards and alerting profiles, an important task to do when working with Dynatrace is checking +the structure of your applications (process groups). You can do that clicking under *technologies* and filter using your +application Management Zone. + +In the picture above, there are two Process Groups called bon-information-prod. **If you see duplicated process groups like in** +**this case, you MUST follow this guideline** + +Next step would be to open both process groups and compare the metadata. In that way, you can identify if all process instances are +part of the same application or not. An easy way to do that is asking yourself: how many instances of my application do i have? + +If you have 4 instances in total and you're able to see 2 in one PG and other 2 in other PG it means that **they are part of the ** +**same application** + +Another situation could be that checking on the metadata, then you see that are **two different application** and Dynatrace is just naming +the process group in the same way + +*Same application* +- Problem: Dynatrace is creating two different process groups, what transalates in two separated services for the same application. Instead of +seeing all the traffic in one service, you will have it splitted and it will complicate your monitoring +- Solution: create a process group detection rule. Contact Dynatrace Expert + +*Different application* +- Problem: Dynatrace is just naming in the same way applications that are different. +- Solution: This case is less severe, since it can be fixed with a process group naming rule. + + +What about our example? +!(PGNaming2)[../../../../img/PGNaming2.PNG] +!(PGNaming3)[../../../../img/PGNaming3.PNG] + +Based on the feedback of the infotaiment team, each process group is a different application (microservice) and it's visible in the kubernetes container/workload +within the metadata of each Process Group. + +#### How to create a Process Group Detection Rule +1. Open the *conditional-naming-processgroup.yaml* file and create a rule that looks like this: +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName} +- tag: Infotainment +- skipDeployment: false +``` +The result of the rule will be renaming the PG to this: +``` +bon-information-prod ipa +bon-information-prod rsl +``` + +Other possible placeholders that you can use are for example: +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName/[^\\-]*$} +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesFullPodName/buffet-(.*?)-} +{ProcessGroup:DetectedName} - {HostGroup:Name/[^\\_]*$} +{ProcessGroup:KubernetesNamespace} +{ProcessGroup:CommandLineArgs/.*?\\-f\\s\\/www\\/(.*?)\\/generated\\/httpd\\.conf.*?} + +You can combine different ones. Check the (documentation)[link] for more \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_seam-event-producer/conditional-naming-processgroup/conditional-naming-processgroup.yaml b/BMW-Dynatrace-config/CD_seam-event-producer/conditional-naming-processgroup/conditional-naming-processgroup.yaml new file mode 100644 index 00000000..34b46925 --- /dev/null +++ b/BMW-Dynatrace-config/CD_seam-event-producer/conditional-naming-processgroup/conditional-naming-processgroup.yaml @@ -0,0 +1,8 @@ +config: +- CDseam-event-producer: template.json + +CDseam-event-producer: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: seam-event-producer +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_seam-event-producer/conditional-naming-processgroup/template.json b/BMW-Dynatrace-config/CD_seam-event-producer/conditional-naming-processgroup/template.json new file mode 100644 index 00000000..7c039808 --- /dev/null +++ b/BMW-Dynatrace-config/CD_seam-event-producer/conditional-naming-processgroup/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "type": "PROCESS_GROUP" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_seam-event-producer/conditional-naming-service/README.md b/BMW-Dynatrace-config/CD_seam-event-producer/conditional-naming-service/README.md new file mode 100644 index 00000000..c34ef308 --- /dev/null +++ b/BMW-Dynatrace-config/CD_seam-event-producer/conditional-naming-service/README.md @@ -0,0 +1,35 @@ +### Service Naming Rules + +A typical case could be that you access to *Transaction & Services* and you find two services that are exactly the same: +*DataDownloadV1* +*DataDownloadV1* + +If you drilldown into the service and you check in the process group, you may have a PROD and a E2E for each service. + +*Note: if you see that both process group are exactly the same, please contact a Dynatrace expert to create a Process* +*Group detection rule* + +In the case the PG are PROD and E2E, then we need to create a rule that looks like this: + +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {Service:DetectedName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +- tag: Infotainment +- skipDeployment: false +``` + +The rule will get the Service Detected Name (current name) and it will extract (with a regex) the part of the kubernetes namespace after the "-", so -prod or -e2e, resulting in: +*DataDownloadV1 - prod* +*DataDownloadV1 - e2e* + +Now, services will be easy to identify. + +You can create rules based on any property/metadata. Some other placeholder's eamples: +{Service:DatabaseName} - E2E +{Service:WebServiceName} - {ProcessGroup:Kubernetes:microservice} - {ProcessGroup:Kubernetes:environment} +{Service:DetectedName} - {ProcessGroup:KubernetesContainerName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +{Service:DetectedName} - {ProcessGroup:SpringBootProfileName/[^\\-]*$} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_seam-event-producer/conditional-naming-service/conditional-naming-service.yaml b/BMW-Dynatrace-config/CD_seam-event-producer/conditional-naming-service/conditional-naming-service.yaml new file mode 100644 index 00000000..34b46925 --- /dev/null +++ b/BMW-Dynatrace-config/CD_seam-event-producer/conditional-naming-service/conditional-naming-service.yaml @@ -0,0 +1,8 @@ +config: +- CDseam-event-producer: template.json + +CDseam-event-producer: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: seam-event-producer +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_seam-event-producer/conditional-naming-service/template.json b/BMW-Dynatrace-config/CD_seam-event-producer/conditional-naming-service/template.json new file mode 100644 index 00000000..5d4fac56 --- /dev/null +++ b/BMW-Dynatrace-config/CD_seam-event-producer/conditional-naming-service/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "type": "SERVICE" +} \ 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 index d41c4c77..5f35e5c1 100644 --- 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 @@ -1,30 +1,4 @@ -## 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 configure custom services? -## 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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Custom+Services) page to configure your custom services. \ 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 index 92e734fa..1695924c 100644 --- a/BMW-Dynatrace-config/CD_seam-event-producer/synthetic-monitor/README.md +++ b/BMW-Dynatrace-config/CD_seam-event-producer/synthetic-monitor/README.md @@ -1,37 +1,4 @@ -# Synthetic Configuration -To calculate the Availability KPI, a synthetic must be configured. +### How to configure synthetics? -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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Synthetic+Monitors) page to configure your synthetics. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_search-composite-service/conditional-naming-processgroup/README.md b/BMW-Dynatrace-config/CD_search-composite-service/conditional-naming-processgroup/README.md new file mode 100644 index 00000000..f94196a5 --- /dev/null +++ b/BMW-Dynatrace-config/CD_search-composite-service/conditional-naming-processgroup/README.md @@ -0,0 +1,67 @@ +### Process Group Detection Rules and Naming + +#### Detection Rule or Naming? + +For the explanation, we're using a real example of the Infotainment application: + +!(PGNaming1)[../../../../img/PGNaming1.PNG] + +Before working with your dashboards and alerting profiles, an important task to do when working with Dynatrace is checking +the structure of your applications (process groups). You can do that clicking under *technologies* and filter using your +application Management Zone. + +In the picture above, there are two Process Groups called bon-information-prod. **If you see duplicated process groups like in** +**this case, you MUST follow this guideline** + +Next step would be to open both process groups and compare the metadata. In that way, you can identify if all process instances are +part of the same application or not. An easy way to do that is asking yourself: how many instances of my application do i have? + +If you have 4 instances in total and you're able to see 2 in one PG and other 2 in other PG it means that **they are part of the ** +**same application** + +Another situation could be that checking on the metadata, then you see that are **two different application** and Dynatrace is just naming +the process group in the same way + +*Same application* +- Problem: Dynatrace is creating two different process groups, what transalates in two separated services for the same application. Instead of +seeing all the traffic in one service, you will have it splitted and it will complicate your monitoring +- Solution: create a process group detection rule. Contact Dynatrace Expert + +*Different application* +- Problem: Dynatrace is just naming in the same way applications that are different. +- Solution: This case is less severe, since it can be fixed with a process group naming rule. + + +What about our example? +!(PGNaming2)[../../../../img/PGNaming2.PNG] +!(PGNaming3)[../../../../img/PGNaming3.PNG] + +Based on the feedback of the infotaiment team, each process group is a different application (microservice) and it's visible in the kubernetes container/workload +within the metadata of each Process Group. + +#### How to create a Process Group Detection Rule +1. Open the *conditional-naming-processgroup.yaml* file and create a rule that looks like this: +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName} +- tag: Infotainment +- skipDeployment: false +``` +The result of the rule will be renaming the PG to this: +``` +bon-information-prod ipa +bon-information-prod rsl +``` + +Other possible placeholders that you can use are for example: +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName/[^\\-]*$} +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesFullPodName/buffet-(.*?)-} +{ProcessGroup:DetectedName} - {HostGroup:Name/[^\\_]*$} +{ProcessGroup:KubernetesNamespace} +{ProcessGroup:CommandLineArgs/.*?\\-f\\s\\/www\\/(.*?)\\/generated\\/httpd\\.conf.*?} + +You can combine different ones. Check the (documentation)[link] for more \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_search-composite-service/conditional-naming-processgroup/conditional-naming-processgroup.yaml b/BMW-Dynatrace-config/CD_search-composite-service/conditional-naming-processgroup/conditional-naming-processgroup.yaml new file mode 100644 index 00000000..cc0df542 --- /dev/null +++ b/BMW-Dynatrace-config/CD_search-composite-service/conditional-naming-processgroup/conditional-naming-processgroup.yaml @@ -0,0 +1,8 @@ +config: +- CDsearch-composite-service: template.json + +CDsearch-composite-service: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: search-composite-service +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_search-composite-service/conditional-naming-processgroup/template.json b/BMW-Dynatrace-config/CD_search-composite-service/conditional-naming-processgroup/template.json new file mode 100644 index 00000000..7c039808 --- /dev/null +++ b/BMW-Dynatrace-config/CD_search-composite-service/conditional-naming-processgroup/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "type": "PROCESS_GROUP" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_search-composite-service/conditional-naming-service/README.md b/BMW-Dynatrace-config/CD_search-composite-service/conditional-naming-service/README.md new file mode 100644 index 00000000..c34ef308 --- /dev/null +++ b/BMW-Dynatrace-config/CD_search-composite-service/conditional-naming-service/README.md @@ -0,0 +1,35 @@ +### Service Naming Rules + +A typical case could be that you access to *Transaction & Services* and you find two services that are exactly the same: +*DataDownloadV1* +*DataDownloadV1* + +If you drilldown into the service and you check in the process group, you may have a PROD and a E2E for each service. + +*Note: if you see that both process group are exactly the same, please contact a Dynatrace expert to create a Process* +*Group detection rule* + +In the case the PG are PROD and E2E, then we need to create a rule that looks like this: + +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {Service:DetectedName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +- tag: Infotainment +- skipDeployment: false +``` + +The rule will get the Service Detected Name (current name) and it will extract (with a regex) the part of the kubernetes namespace after the "-", so -prod or -e2e, resulting in: +*DataDownloadV1 - prod* +*DataDownloadV1 - e2e* + +Now, services will be easy to identify. + +You can create rules based on any property/metadata. Some other placeholder's eamples: +{Service:DatabaseName} - E2E +{Service:WebServiceName} - {ProcessGroup:Kubernetes:microservice} - {ProcessGroup:Kubernetes:environment} +{Service:DetectedName} - {ProcessGroup:KubernetesContainerName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +{Service:DetectedName} - {ProcessGroup:SpringBootProfileName/[^\\-]*$} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_search-composite-service/conditional-naming-service/conditional-naming-service.yaml b/BMW-Dynatrace-config/CD_search-composite-service/conditional-naming-service/conditional-naming-service.yaml new file mode 100644 index 00000000..cc0df542 --- /dev/null +++ b/BMW-Dynatrace-config/CD_search-composite-service/conditional-naming-service/conditional-naming-service.yaml @@ -0,0 +1,8 @@ +config: +- CDsearch-composite-service: template.json + +CDsearch-composite-service: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: search-composite-service +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_search-composite-service/conditional-naming-service/template.json b/BMW-Dynatrace-config/CD_search-composite-service/conditional-naming-service/template.json new file mode 100644 index 00000000..5d4fac56 --- /dev/null +++ b/BMW-Dynatrace-config/CD_search-composite-service/conditional-naming-service/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "type": "SERVICE" +} \ 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 index d41c4c77..5f35e5c1 100644 --- 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 @@ -1,30 +1,4 @@ -## 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 configure custom services? -## 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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Custom+Services) page to configure your custom services. \ 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 index 92e734fa..1695924c 100644 --- a/BMW-Dynatrace-config/CD_search-composite-service/synthetic-monitor/README.md +++ b/BMW-Dynatrace-config/CD_search-composite-service/synthetic-monitor/README.md @@ -1,37 +1,4 @@ -# Synthetic Configuration -To calculate the Availability KPI, a synthetic must be configured. +### How to configure synthetics? -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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Synthetic+Monitors) page to configure your synthetics. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_send-to-car-service/conditional-naming-processgroup/README.md b/BMW-Dynatrace-config/CD_send-to-car-service/conditional-naming-processgroup/README.md new file mode 100644 index 00000000..f94196a5 --- /dev/null +++ b/BMW-Dynatrace-config/CD_send-to-car-service/conditional-naming-processgroup/README.md @@ -0,0 +1,67 @@ +### Process Group Detection Rules and Naming + +#### Detection Rule or Naming? + +For the explanation, we're using a real example of the Infotainment application: + +!(PGNaming1)[../../../../img/PGNaming1.PNG] + +Before working with your dashboards and alerting profiles, an important task to do when working with Dynatrace is checking +the structure of your applications (process groups). You can do that clicking under *technologies* and filter using your +application Management Zone. + +In the picture above, there are two Process Groups called bon-information-prod. **If you see duplicated process groups like in** +**this case, you MUST follow this guideline** + +Next step would be to open both process groups and compare the metadata. In that way, you can identify if all process instances are +part of the same application or not. An easy way to do that is asking yourself: how many instances of my application do i have? + +If you have 4 instances in total and you're able to see 2 in one PG and other 2 in other PG it means that **they are part of the ** +**same application** + +Another situation could be that checking on the metadata, then you see that are **two different application** and Dynatrace is just naming +the process group in the same way + +*Same application* +- Problem: Dynatrace is creating two different process groups, what transalates in two separated services for the same application. Instead of +seeing all the traffic in one service, you will have it splitted and it will complicate your monitoring +- Solution: create a process group detection rule. Contact Dynatrace Expert + +*Different application* +- Problem: Dynatrace is just naming in the same way applications that are different. +- Solution: This case is less severe, since it can be fixed with a process group naming rule. + + +What about our example? +!(PGNaming2)[../../../../img/PGNaming2.PNG] +!(PGNaming3)[../../../../img/PGNaming3.PNG] + +Based on the feedback of the infotaiment team, each process group is a different application (microservice) and it's visible in the kubernetes container/workload +within the metadata of each Process Group. + +#### How to create a Process Group Detection Rule +1. Open the *conditional-naming-processgroup.yaml* file and create a rule that looks like this: +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName} +- tag: Infotainment +- skipDeployment: false +``` +The result of the rule will be renaming the PG to this: +``` +bon-information-prod ipa +bon-information-prod rsl +``` + +Other possible placeholders that you can use are for example: +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName/[^\\-]*$} +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesFullPodName/buffet-(.*?)-} +{ProcessGroup:DetectedName} - {HostGroup:Name/[^\\_]*$} +{ProcessGroup:KubernetesNamespace} +{ProcessGroup:CommandLineArgs/.*?\\-f\\s\\/www\\/(.*?)\\/generated\\/httpd\\.conf.*?} + +You can combine different ones. Check the (documentation)[link] for more \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_send-to-car-service/conditional-naming-processgroup/conditional-naming-processgroup.yaml b/BMW-Dynatrace-config/CD_send-to-car-service/conditional-naming-processgroup/conditional-naming-processgroup.yaml new file mode 100644 index 00000000..c9dd2dbb --- /dev/null +++ b/BMW-Dynatrace-config/CD_send-to-car-service/conditional-naming-processgroup/conditional-naming-processgroup.yaml @@ -0,0 +1,8 @@ +config: +- CDsend-to-car-service: template.json + +CDsend-to-car-service: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: send-to-car-service +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_send-to-car-service/conditional-naming-processgroup/template.json b/BMW-Dynatrace-config/CD_send-to-car-service/conditional-naming-processgroup/template.json new file mode 100644 index 00000000..7c039808 --- /dev/null +++ b/BMW-Dynatrace-config/CD_send-to-car-service/conditional-naming-processgroup/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "type": "PROCESS_GROUP" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_send-to-car-service/conditional-naming-service/README.md b/BMW-Dynatrace-config/CD_send-to-car-service/conditional-naming-service/README.md new file mode 100644 index 00000000..c34ef308 --- /dev/null +++ b/BMW-Dynatrace-config/CD_send-to-car-service/conditional-naming-service/README.md @@ -0,0 +1,35 @@ +### Service Naming Rules + +A typical case could be that you access to *Transaction & Services* and you find two services that are exactly the same: +*DataDownloadV1* +*DataDownloadV1* + +If you drilldown into the service and you check in the process group, you may have a PROD and a E2E for each service. + +*Note: if you see that both process group are exactly the same, please contact a Dynatrace expert to create a Process* +*Group detection rule* + +In the case the PG are PROD and E2E, then we need to create a rule that looks like this: + +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {Service:DetectedName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +- tag: Infotainment +- skipDeployment: false +``` + +The rule will get the Service Detected Name (current name) and it will extract (with a regex) the part of the kubernetes namespace after the "-", so -prod or -e2e, resulting in: +*DataDownloadV1 - prod* +*DataDownloadV1 - e2e* + +Now, services will be easy to identify. + +You can create rules based on any property/metadata. Some other placeholder's eamples: +{Service:DatabaseName} - E2E +{Service:WebServiceName} - {ProcessGroup:Kubernetes:microservice} - {ProcessGroup:Kubernetes:environment} +{Service:DetectedName} - {ProcessGroup:KubernetesContainerName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +{Service:DetectedName} - {ProcessGroup:SpringBootProfileName/[^\\-]*$} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_send-to-car-service/conditional-naming-service/conditional-naming-service.yaml b/BMW-Dynatrace-config/CD_send-to-car-service/conditional-naming-service/conditional-naming-service.yaml new file mode 100644 index 00000000..c9dd2dbb --- /dev/null +++ b/BMW-Dynatrace-config/CD_send-to-car-service/conditional-naming-service/conditional-naming-service.yaml @@ -0,0 +1,8 @@ +config: +- CDsend-to-car-service: template.json + +CDsend-to-car-service: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: send-to-car-service +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_send-to-car-service/conditional-naming-service/template.json b/BMW-Dynatrace-config/CD_send-to-car-service/conditional-naming-service/template.json new file mode 100644 index 00000000..5d4fac56 --- /dev/null +++ b/BMW-Dynatrace-config/CD_send-to-car-service/conditional-naming-service/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "type": "SERVICE" +} \ 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 index d41c4c77..5f35e5c1 100644 --- 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 @@ -1,30 +1,4 @@ -## 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 configure custom services? -## 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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Custom+Services) page to configure your custom services. \ 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 index 92e734fa..1695924c 100644 --- 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 @@ -1,37 +1,4 @@ -# Synthetic Configuration -To calculate the Availability KPI, a synthetic must be configured. +### How to configure synthetics? -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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Synthetic+Monitors) page to configure your synthetics. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_service-manager/conditional-naming-processgroup/README.md b/BMW-Dynatrace-config/CD_service-manager/conditional-naming-processgroup/README.md new file mode 100644 index 00000000..f94196a5 --- /dev/null +++ b/BMW-Dynatrace-config/CD_service-manager/conditional-naming-processgroup/README.md @@ -0,0 +1,67 @@ +### Process Group Detection Rules and Naming + +#### Detection Rule or Naming? + +For the explanation, we're using a real example of the Infotainment application: + +!(PGNaming1)[../../../../img/PGNaming1.PNG] + +Before working with your dashboards and alerting profiles, an important task to do when working with Dynatrace is checking +the structure of your applications (process groups). You can do that clicking under *technologies* and filter using your +application Management Zone. + +In the picture above, there are two Process Groups called bon-information-prod. **If you see duplicated process groups like in** +**this case, you MUST follow this guideline** + +Next step would be to open both process groups and compare the metadata. In that way, you can identify if all process instances are +part of the same application or not. An easy way to do that is asking yourself: how many instances of my application do i have? + +If you have 4 instances in total and you're able to see 2 in one PG and other 2 in other PG it means that **they are part of the ** +**same application** + +Another situation could be that checking on the metadata, then you see that are **two different application** and Dynatrace is just naming +the process group in the same way + +*Same application* +- Problem: Dynatrace is creating two different process groups, what transalates in two separated services for the same application. Instead of +seeing all the traffic in one service, you will have it splitted and it will complicate your monitoring +- Solution: create a process group detection rule. Contact Dynatrace Expert + +*Different application* +- Problem: Dynatrace is just naming in the same way applications that are different. +- Solution: This case is less severe, since it can be fixed with a process group naming rule. + + +What about our example? +!(PGNaming2)[../../../../img/PGNaming2.PNG] +!(PGNaming3)[../../../../img/PGNaming3.PNG] + +Based on the feedback of the infotaiment team, each process group is a different application (microservice) and it's visible in the kubernetes container/workload +within the metadata of each Process Group. + +#### How to create a Process Group Detection Rule +1. Open the *conditional-naming-processgroup.yaml* file and create a rule that looks like this: +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName} +- tag: Infotainment +- skipDeployment: false +``` +The result of the rule will be renaming the PG to this: +``` +bon-information-prod ipa +bon-information-prod rsl +``` + +Other possible placeholders that you can use are for example: +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName/[^\\-]*$} +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesFullPodName/buffet-(.*?)-} +{ProcessGroup:DetectedName} - {HostGroup:Name/[^\\_]*$} +{ProcessGroup:KubernetesNamespace} +{ProcessGroup:CommandLineArgs/.*?\\-f\\s\\/www\\/(.*?)\\/generated\\/httpd\\.conf.*?} + +You can combine different ones. Check the (documentation)[link] for more \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_service-manager/conditional-naming-processgroup/conditional-naming-processgroup.yaml b/BMW-Dynatrace-config/CD_service-manager/conditional-naming-processgroup/conditional-naming-processgroup.yaml new file mode 100644 index 00000000..a46c41e8 --- /dev/null +++ b/BMW-Dynatrace-config/CD_service-manager/conditional-naming-processgroup/conditional-naming-processgroup.yaml @@ -0,0 +1,8 @@ +config: +- CDservice-manager: template.json + +CDservice-manager: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: service-manager +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_service-manager/conditional-naming-processgroup/template.json b/BMW-Dynatrace-config/CD_service-manager/conditional-naming-processgroup/template.json new file mode 100644 index 00000000..7c039808 --- /dev/null +++ b/BMW-Dynatrace-config/CD_service-manager/conditional-naming-processgroup/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "type": "PROCESS_GROUP" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_service-manager/conditional-naming-service/README.md b/BMW-Dynatrace-config/CD_service-manager/conditional-naming-service/README.md new file mode 100644 index 00000000..c34ef308 --- /dev/null +++ b/BMW-Dynatrace-config/CD_service-manager/conditional-naming-service/README.md @@ -0,0 +1,35 @@ +### Service Naming Rules + +A typical case could be that you access to *Transaction & Services* and you find two services that are exactly the same: +*DataDownloadV1* +*DataDownloadV1* + +If you drilldown into the service and you check in the process group, you may have a PROD and a E2E for each service. + +*Note: if you see that both process group are exactly the same, please contact a Dynatrace expert to create a Process* +*Group detection rule* + +In the case the PG are PROD and E2E, then we need to create a rule that looks like this: + +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {Service:DetectedName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +- tag: Infotainment +- skipDeployment: false +``` + +The rule will get the Service Detected Name (current name) and it will extract (with a regex) the part of the kubernetes namespace after the "-", so -prod or -e2e, resulting in: +*DataDownloadV1 - prod* +*DataDownloadV1 - e2e* + +Now, services will be easy to identify. + +You can create rules based on any property/metadata. Some other placeholder's eamples: +{Service:DatabaseName} - E2E +{Service:WebServiceName} - {ProcessGroup:Kubernetes:microservice} - {ProcessGroup:Kubernetes:environment} +{Service:DetectedName} - {ProcessGroup:KubernetesContainerName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +{Service:DetectedName} - {ProcessGroup:SpringBootProfileName/[^\\-]*$} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_service-manager/conditional-naming-service/conditional-naming-service.yaml b/BMW-Dynatrace-config/CD_service-manager/conditional-naming-service/conditional-naming-service.yaml new file mode 100644 index 00000000..a46c41e8 --- /dev/null +++ b/BMW-Dynatrace-config/CD_service-manager/conditional-naming-service/conditional-naming-service.yaml @@ -0,0 +1,8 @@ +config: +- CDservice-manager: template.json + +CDservice-manager: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: service-manager +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_service-manager/conditional-naming-service/template.json b/BMW-Dynatrace-config/CD_service-manager/conditional-naming-service/template.json new file mode 100644 index 00000000..5d4fac56 --- /dev/null +++ b/BMW-Dynatrace-config/CD_service-manager/conditional-naming-service/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "type": "SERVICE" +} \ 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 index d41c4c77..5f35e5c1 100644 --- a/BMW-Dynatrace-config/CD_service-manager/custom-service-java/README.md +++ b/BMW-Dynatrace-config/CD_service-manager/custom-service-java/README.md @@ -1,30 +1,4 @@ -## 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 configure custom services? -## 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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Custom+Services) page to configure your custom services. \ 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 index 92e734fa..1695924c 100644 --- a/BMW-Dynatrace-config/CD_service-manager/synthetic-monitor/README.md +++ b/BMW-Dynatrace-config/CD_service-manager/synthetic-monitor/README.md @@ -1,37 +1,4 @@ -# Synthetic Configuration -To calculate the Availability KPI, a synthetic must be configured. +### How to configure synthetics? -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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Synthetic+Monitors) page to configure your synthetics. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_service-notification-service/conditional-naming-processgroup/README.md b/BMW-Dynatrace-config/CD_service-notification-service/conditional-naming-processgroup/README.md new file mode 100644 index 00000000..f94196a5 --- /dev/null +++ b/BMW-Dynatrace-config/CD_service-notification-service/conditional-naming-processgroup/README.md @@ -0,0 +1,67 @@ +### Process Group Detection Rules and Naming + +#### Detection Rule or Naming? + +For the explanation, we're using a real example of the Infotainment application: + +!(PGNaming1)[../../../../img/PGNaming1.PNG] + +Before working with your dashboards and alerting profiles, an important task to do when working with Dynatrace is checking +the structure of your applications (process groups). You can do that clicking under *technologies* and filter using your +application Management Zone. + +In the picture above, there are two Process Groups called bon-information-prod. **If you see duplicated process groups like in** +**this case, you MUST follow this guideline** + +Next step would be to open both process groups and compare the metadata. In that way, you can identify if all process instances are +part of the same application or not. An easy way to do that is asking yourself: how many instances of my application do i have? + +If you have 4 instances in total and you're able to see 2 in one PG and other 2 in other PG it means that **they are part of the ** +**same application** + +Another situation could be that checking on the metadata, then you see that are **two different application** and Dynatrace is just naming +the process group in the same way + +*Same application* +- Problem: Dynatrace is creating two different process groups, what transalates in two separated services for the same application. Instead of +seeing all the traffic in one service, you will have it splitted and it will complicate your monitoring +- Solution: create a process group detection rule. Contact Dynatrace Expert + +*Different application* +- Problem: Dynatrace is just naming in the same way applications that are different. +- Solution: This case is less severe, since it can be fixed with a process group naming rule. + + +What about our example? +!(PGNaming2)[../../../../img/PGNaming2.PNG] +!(PGNaming3)[../../../../img/PGNaming3.PNG] + +Based on the feedback of the infotaiment team, each process group is a different application (microservice) and it's visible in the kubernetes container/workload +within the metadata of each Process Group. + +#### How to create a Process Group Detection Rule +1. Open the *conditional-naming-processgroup.yaml* file and create a rule that looks like this: +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName} +- tag: Infotainment +- skipDeployment: false +``` +The result of the rule will be renaming the PG to this: +``` +bon-information-prod ipa +bon-information-prod rsl +``` + +Other possible placeholders that you can use are for example: +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName/[^\\-]*$} +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesFullPodName/buffet-(.*?)-} +{ProcessGroup:DetectedName} - {HostGroup:Name/[^\\_]*$} +{ProcessGroup:KubernetesNamespace} +{ProcessGroup:CommandLineArgs/.*?\\-f\\s\\/www\\/(.*?)\\/generated\\/httpd\\.conf.*?} + +You can combine different ones. Check the (documentation)[link] for more \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_service-notification-service/conditional-naming-processgroup/conditional-naming-processgroup.yaml b/BMW-Dynatrace-config/CD_service-notification-service/conditional-naming-processgroup/conditional-naming-processgroup.yaml new file mode 100644 index 00000000..d506a0c2 --- /dev/null +++ b/BMW-Dynatrace-config/CD_service-notification-service/conditional-naming-processgroup/conditional-naming-processgroup.yaml @@ -0,0 +1,8 @@ +config: +- CDservice-notification-service: template.json + +CDservice-notification-service: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: service-notification-service +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_service-notification-service/conditional-naming-processgroup/template.json b/BMW-Dynatrace-config/CD_service-notification-service/conditional-naming-processgroup/template.json new file mode 100644 index 00000000..7c039808 --- /dev/null +++ b/BMW-Dynatrace-config/CD_service-notification-service/conditional-naming-processgroup/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "type": "PROCESS_GROUP" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_service-notification-service/conditional-naming-service/README.md b/BMW-Dynatrace-config/CD_service-notification-service/conditional-naming-service/README.md new file mode 100644 index 00000000..c34ef308 --- /dev/null +++ b/BMW-Dynatrace-config/CD_service-notification-service/conditional-naming-service/README.md @@ -0,0 +1,35 @@ +### Service Naming Rules + +A typical case could be that you access to *Transaction & Services* and you find two services that are exactly the same: +*DataDownloadV1* +*DataDownloadV1* + +If you drilldown into the service and you check in the process group, you may have a PROD and a E2E for each service. + +*Note: if you see that both process group are exactly the same, please contact a Dynatrace expert to create a Process* +*Group detection rule* + +In the case the PG are PROD and E2E, then we need to create a rule that looks like this: + +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {Service:DetectedName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +- tag: Infotainment +- skipDeployment: false +``` + +The rule will get the Service Detected Name (current name) and it will extract (with a regex) the part of the kubernetes namespace after the "-", so -prod or -e2e, resulting in: +*DataDownloadV1 - prod* +*DataDownloadV1 - e2e* + +Now, services will be easy to identify. + +You can create rules based on any property/metadata. Some other placeholder's eamples: +{Service:DatabaseName} - E2E +{Service:WebServiceName} - {ProcessGroup:Kubernetes:microservice} - {ProcessGroup:Kubernetes:environment} +{Service:DetectedName} - {ProcessGroup:KubernetesContainerName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +{Service:DetectedName} - {ProcessGroup:SpringBootProfileName/[^\\-]*$} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_service-notification-service/conditional-naming-service/conditional-naming-service.yaml b/BMW-Dynatrace-config/CD_service-notification-service/conditional-naming-service/conditional-naming-service.yaml new file mode 100644 index 00000000..d506a0c2 --- /dev/null +++ b/BMW-Dynatrace-config/CD_service-notification-service/conditional-naming-service/conditional-naming-service.yaml @@ -0,0 +1,8 @@ +config: +- CDservice-notification-service: template.json + +CDservice-notification-service: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: service-notification-service +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_service-notification-service/conditional-naming-service/template.json b/BMW-Dynatrace-config/CD_service-notification-service/conditional-naming-service/template.json new file mode 100644 index 00000000..5d4fac56 --- /dev/null +++ b/BMW-Dynatrace-config/CD_service-notification-service/conditional-naming-service/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "type": "SERVICE" +} \ 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 index d41c4c77..5f35e5c1 100644 --- 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 @@ -1,30 +1,4 @@ -## 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 configure custom services? -## 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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Custom+Services) page to configure your custom services. \ 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 index 92e734fa..1695924c 100644 --- a/BMW-Dynatrace-config/CD_service-notification-service/synthetic-monitor/README.md +++ b/BMW-Dynatrace-config/CD_service-notification-service/synthetic-monitor/README.md @@ -1,37 +1,4 @@ -# Synthetic Configuration -To calculate the Availability KPI, a synthetic must be configured. +### How to configure synthetics? -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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Synthetic+Monitors) page to configure your synthetics. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_sfa-fre/conditional-naming-processgroup/README.md b/BMW-Dynatrace-config/CD_sfa-fre/conditional-naming-processgroup/README.md new file mode 100644 index 00000000..f94196a5 --- /dev/null +++ b/BMW-Dynatrace-config/CD_sfa-fre/conditional-naming-processgroup/README.md @@ -0,0 +1,67 @@ +### Process Group Detection Rules and Naming + +#### Detection Rule or Naming? + +For the explanation, we're using a real example of the Infotainment application: + +!(PGNaming1)[../../../../img/PGNaming1.PNG] + +Before working with your dashboards and alerting profiles, an important task to do when working with Dynatrace is checking +the structure of your applications (process groups). You can do that clicking under *technologies* and filter using your +application Management Zone. + +In the picture above, there are two Process Groups called bon-information-prod. **If you see duplicated process groups like in** +**this case, you MUST follow this guideline** + +Next step would be to open both process groups and compare the metadata. In that way, you can identify if all process instances are +part of the same application or not. An easy way to do that is asking yourself: how many instances of my application do i have? + +If you have 4 instances in total and you're able to see 2 in one PG and other 2 in other PG it means that **they are part of the ** +**same application** + +Another situation could be that checking on the metadata, then you see that are **two different application** and Dynatrace is just naming +the process group in the same way + +*Same application* +- Problem: Dynatrace is creating two different process groups, what transalates in two separated services for the same application. Instead of +seeing all the traffic in one service, you will have it splitted and it will complicate your monitoring +- Solution: create a process group detection rule. Contact Dynatrace Expert + +*Different application* +- Problem: Dynatrace is just naming in the same way applications that are different. +- Solution: This case is less severe, since it can be fixed with a process group naming rule. + + +What about our example? +!(PGNaming2)[../../../../img/PGNaming2.PNG] +!(PGNaming3)[../../../../img/PGNaming3.PNG] + +Based on the feedback of the infotaiment team, each process group is a different application (microservice) and it's visible in the kubernetes container/workload +within the metadata of each Process Group. + +#### How to create a Process Group Detection Rule +1. Open the *conditional-naming-processgroup.yaml* file and create a rule that looks like this: +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName} +- tag: Infotainment +- skipDeployment: false +``` +The result of the rule will be renaming the PG to this: +``` +bon-information-prod ipa +bon-information-prod rsl +``` + +Other possible placeholders that you can use are for example: +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName/[^\\-]*$} +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesFullPodName/buffet-(.*?)-} +{ProcessGroup:DetectedName} - {HostGroup:Name/[^\\_]*$} +{ProcessGroup:KubernetesNamespace} +{ProcessGroup:CommandLineArgs/.*?\\-f\\s\\/www\\/(.*?)\\/generated\\/httpd\\.conf.*?} + +You can combine different ones. Check the (documentation)[link] for more \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_sfa-fre/conditional-naming-processgroup/conditional-naming-processgroup.yaml b/BMW-Dynatrace-config/CD_sfa-fre/conditional-naming-processgroup/conditional-naming-processgroup.yaml new file mode 100644 index 00000000..830d3e64 --- /dev/null +++ b/BMW-Dynatrace-config/CD_sfa-fre/conditional-naming-processgroup/conditional-naming-processgroup.yaml @@ -0,0 +1,8 @@ +config: +- CDsfa-fre: template.json + +CDsfa-fre: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: sfa-fre +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_sfa-fre/conditional-naming-processgroup/template.json b/BMW-Dynatrace-config/CD_sfa-fre/conditional-naming-processgroup/template.json new file mode 100644 index 00000000..7c039808 --- /dev/null +++ b/BMW-Dynatrace-config/CD_sfa-fre/conditional-naming-processgroup/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "type": "PROCESS_GROUP" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_sfa-fre/conditional-naming-service/README.md b/BMW-Dynatrace-config/CD_sfa-fre/conditional-naming-service/README.md new file mode 100644 index 00000000..c34ef308 --- /dev/null +++ b/BMW-Dynatrace-config/CD_sfa-fre/conditional-naming-service/README.md @@ -0,0 +1,35 @@ +### Service Naming Rules + +A typical case could be that you access to *Transaction & Services* and you find two services that are exactly the same: +*DataDownloadV1* +*DataDownloadV1* + +If you drilldown into the service and you check in the process group, you may have a PROD and a E2E for each service. + +*Note: if you see that both process group are exactly the same, please contact a Dynatrace expert to create a Process* +*Group detection rule* + +In the case the PG are PROD and E2E, then we need to create a rule that looks like this: + +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {Service:DetectedName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +- tag: Infotainment +- skipDeployment: false +``` + +The rule will get the Service Detected Name (current name) and it will extract (with a regex) the part of the kubernetes namespace after the "-", so -prod or -e2e, resulting in: +*DataDownloadV1 - prod* +*DataDownloadV1 - e2e* + +Now, services will be easy to identify. + +You can create rules based on any property/metadata. Some other placeholder's eamples: +{Service:DatabaseName} - E2E +{Service:WebServiceName} - {ProcessGroup:Kubernetes:microservice} - {ProcessGroup:Kubernetes:environment} +{Service:DetectedName} - {ProcessGroup:KubernetesContainerName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +{Service:DetectedName} - {ProcessGroup:SpringBootProfileName/[^\\-]*$} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_sfa-fre/conditional-naming-service/conditional-naming-service.yaml b/BMW-Dynatrace-config/CD_sfa-fre/conditional-naming-service/conditional-naming-service.yaml new file mode 100644 index 00000000..830d3e64 --- /dev/null +++ b/BMW-Dynatrace-config/CD_sfa-fre/conditional-naming-service/conditional-naming-service.yaml @@ -0,0 +1,8 @@ +config: +- CDsfa-fre: template.json + +CDsfa-fre: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: sfa-fre +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_sfa-fre/conditional-naming-service/template.json b/BMW-Dynatrace-config/CD_sfa-fre/conditional-naming-service/template.json new file mode 100644 index 00000000..5d4fac56 --- /dev/null +++ b/BMW-Dynatrace-config/CD_sfa-fre/conditional-naming-service/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "type": "SERVICE" +} \ 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 index d41c4c77..5f35e5c1 100644 --- a/BMW-Dynatrace-config/CD_sfa-fre/custom-service-java/README.md +++ b/BMW-Dynatrace-config/CD_sfa-fre/custom-service-java/README.md @@ -1,30 +1,4 @@ -## 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 configure custom services? -## 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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Custom+Services) page to configure your custom services. \ 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 index 92e734fa..1695924c 100644 --- a/BMW-Dynatrace-config/CD_sfa-fre/synthetic-monitor/README.md +++ b/BMW-Dynatrace-config/CD_sfa-fre/synthetic-monitor/README.md @@ -1,37 +1,4 @@ -# Synthetic Configuration -To calculate the Availability KPI, a synthetic must be configured. +### How to configure synthetics? -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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Synthetic+Monitors) page to configure your synthetics. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_sfa-ota/conditional-naming-processgroup/README.md b/BMW-Dynatrace-config/CD_sfa-ota/conditional-naming-processgroup/README.md new file mode 100644 index 00000000..f94196a5 --- /dev/null +++ b/BMW-Dynatrace-config/CD_sfa-ota/conditional-naming-processgroup/README.md @@ -0,0 +1,67 @@ +### Process Group Detection Rules and Naming + +#### Detection Rule or Naming? + +For the explanation, we're using a real example of the Infotainment application: + +!(PGNaming1)[../../../../img/PGNaming1.PNG] + +Before working with your dashboards and alerting profiles, an important task to do when working with Dynatrace is checking +the structure of your applications (process groups). You can do that clicking under *technologies* and filter using your +application Management Zone. + +In the picture above, there are two Process Groups called bon-information-prod. **If you see duplicated process groups like in** +**this case, you MUST follow this guideline** + +Next step would be to open both process groups and compare the metadata. In that way, you can identify if all process instances are +part of the same application or not. An easy way to do that is asking yourself: how many instances of my application do i have? + +If you have 4 instances in total and you're able to see 2 in one PG and other 2 in other PG it means that **they are part of the ** +**same application** + +Another situation could be that checking on the metadata, then you see that are **two different application** and Dynatrace is just naming +the process group in the same way + +*Same application* +- Problem: Dynatrace is creating two different process groups, what transalates in two separated services for the same application. Instead of +seeing all the traffic in one service, you will have it splitted and it will complicate your monitoring +- Solution: create a process group detection rule. Contact Dynatrace Expert + +*Different application* +- Problem: Dynatrace is just naming in the same way applications that are different. +- Solution: This case is less severe, since it can be fixed with a process group naming rule. + + +What about our example? +!(PGNaming2)[../../../../img/PGNaming2.PNG] +!(PGNaming3)[../../../../img/PGNaming3.PNG] + +Based on the feedback of the infotaiment team, each process group is a different application (microservice) and it's visible in the kubernetes container/workload +within the metadata of each Process Group. + +#### How to create a Process Group Detection Rule +1. Open the *conditional-naming-processgroup.yaml* file and create a rule that looks like this: +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName} +- tag: Infotainment +- skipDeployment: false +``` +The result of the rule will be renaming the PG to this: +``` +bon-information-prod ipa +bon-information-prod rsl +``` + +Other possible placeholders that you can use are for example: +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName/[^\\-]*$} +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesFullPodName/buffet-(.*?)-} +{ProcessGroup:DetectedName} - {HostGroup:Name/[^\\_]*$} +{ProcessGroup:KubernetesNamespace} +{ProcessGroup:CommandLineArgs/.*?\\-f\\s\\/www\\/(.*?)\\/generated\\/httpd\\.conf.*?} + +You can combine different ones. Check the (documentation)[link] for more \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_sfa-ota/conditional-naming-processgroup/conditional-naming-processgroup.yaml b/BMW-Dynatrace-config/CD_sfa-ota/conditional-naming-processgroup/conditional-naming-processgroup.yaml new file mode 100644 index 00000000..a43af184 --- /dev/null +++ b/BMW-Dynatrace-config/CD_sfa-ota/conditional-naming-processgroup/conditional-naming-processgroup.yaml @@ -0,0 +1,8 @@ +config: +- CDsfa-ota: template.json + +CDsfa-ota: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: sfa-ota +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_sfa-ota/conditional-naming-processgroup/template.json b/BMW-Dynatrace-config/CD_sfa-ota/conditional-naming-processgroup/template.json new file mode 100644 index 00000000..7c039808 --- /dev/null +++ b/BMW-Dynatrace-config/CD_sfa-ota/conditional-naming-processgroup/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "type": "PROCESS_GROUP" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_sfa-ota/conditional-naming-service/README.md b/BMW-Dynatrace-config/CD_sfa-ota/conditional-naming-service/README.md new file mode 100644 index 00000000..c34ef308 --- /dev/null +++ b/BMW-Dynatrace-config/CD_sfa-ota/conditional-naming-service/README.md @@ -0,0 +1,35 @@ +### Service Naming Rules + +A typical case could be that you access to *Transaction & Services* and you find two services that are exactly the same: +*DataDownloadV1* +*DataDownloadV1* + +If you drilldown into the service and you check in the process group, you may have a PROD and a E2E for each service. + +*Note: if you see that both process group are exactly the same, please contact a Dynatrace expert to create a Process* +*Group detection rule* + +In the case the PG are PROD and E2E, then we need to create a rule that looks like this: + +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {Service:DetectedName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +- tag: Infotainment +- skipDeployment: false +``` + +The rule will get the Service Detected Name (current name) and it will extract (with a regex) the part of the kubernetes namespace after the "-", so -prod or -e2e, resulting in: +*DataDownloadV1 - prod* +*DataDownloadV1 - e2e* + +Now, services will be easy to identify. + +You can create rules based on any property/metadata. Some other placeholder's eamples: +{Service:DatabaseName} - E2E +{Service:WebServiceName} - {ProcessGroup:Kubernetes:microservice} - {ProcessGroup:Kubernetes:environment} +{Service:DetectedName} - {ProcessGroup:KubernetesContainerName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +{Service:DetectedName} - {ProcessGroup:SpringBootProfileName/[^\\-]*$} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_sfa-ota/conditional-naming-service/conditional-naming-service.yaml b/BMW-Dynatrace-config/CD_sfa-ota/conditional-naming-service/conditional-naming-service.yaml new file mode 100644 index 00000000..a43af184 --- /dev/null +++ b/BMW-Dynatrace-config/CD_sfa-ota/conditional-naming-service/conditional-naming-service.yaml @@ -0,0 +1,8 @@ +config: +- CDsfa-ota: template.json + +CDsfa-ota: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: sfa-ota +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_sfa-ota/conditional-naming-service/template.json b/BMW-Dynatrace-config/CD_sfa-ota/conditional-naming-service/template.json new file mode 100644 index 00000000..5d4fac56 --- /dev/null +++ b/BMW-Dynatrace-config/CD_sfa-ota/conditional-naming-service/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "type": "SERVICE" +} \ 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 index d41c4c77..5f35e5c1 100644 --- a/BMW-Dynatrace-config/CD_sfa-ota/custom-service-java/README.md +++ b/BMW-Dynatrace-config/CD_sfa-ota/custom-service-java/README.md @@ -1,30 +1,4 @@ -## 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 configure custom services? -## 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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Custom+Services) page to configure your custom services. \ 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 index 92e734fa..1695924c 100644 --- a/BMW-Dynatrace-config/CD_sfa-ota/synthetic-monitor/README.md +++ b/BMW-Dynatrace-config/CD_sfa-ota/synthetic-monitor/README.md @@ -1,37 +1,4 @@ -# Synthetic Configuration -To calculate the Availability KPI, a synthetic must be configured. +### How to configure synthetics? -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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Synthetic+Monitors) page to configure your synthetics. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_sfa-vs/conditional-naming-processgroup/README.md b/BMW-Dynatrace-config/CD_sfa-vs/conditional-naming-processgroup/README.md new file mode 100644 index 00000000..f94196a5 --- /dev/null +++ b/BMW-Dynatrace-config/CD_sfa-vs/conditional-naming-processgroup/README.md @@ -0,0 +1,67 @@ +### Process Group Detection Rules and Naming + +#### Detection Rule or Naming? + +For the explanation, we're using a real example of the Infotainment application: + +!(PGNaming1)[../../../../img/PGNaming1.PNG] + +Before working with your dashboards and alerting profiles, an important task to do when working with Dynatrace is checking +the structure of your applications (process groups). You can do that clicking under *technologies* and filter using your +application Management Zone. + +In the picture above, there are two Process Groups called bon-information-prod. **If you see duplicated process groups like in** +**this case, you MUST follow this guideline** + +Next step would be to open both process groups and compare the metadata. In that way, you can identify if all process instances are +part of the same application or not. An easy way to do that is asking yourself: how many instances of my application do i have? + +If you have 4 instances in total and you're able to see 2 in one PG and other 2 in other PG it means that **they are part of the ** +**same application** + +Another situation could be that checking on the metadata, then you see that are **two different application** and Dynatrace is just naming +the process group in the same way + +*Same application* +- Problem: Dynatrace is creating two different process groups, what transalates in two separated services for the same application. Instead of +seeing all the traffic in one service, you will have it splitted and it will complicate your monitoring +- Solution: create a process group detection rule. Contact Dynatrace Expert + +*Different application* +- Problem: Dynatrace is just naming in the same way applications that are different. +- Solution: This case is less severe, since it can be fixed with a process group naming rule. + + +What about our example? +!(PGNaming2)[../../../../img/PGNaming2.PNG] +!(PGNaming3)[../../../../img/PGNaming3.PNG] + +Based on the feedback of the infotaiment team, each process group is a different application (microservice) and it's visible in the kubernetes container/workload +within the metadata of each Process Group. + +#### How to create a Process Group Detection Rule +1. Open the *conditional-naming-processgroup.yaml* file and create a rule that looks like this: +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName} +- tag: Infotainment +- skipDeployment: false +``` +The result of the rule will be renaming the PG to this: +``` +bon-information-prod ipa +bon-information-prod rsl +``` + +Other possible placeholders that you can use are for example: +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName/[^\\-]*$} +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesFullPodName/buffet-(.*?)-} +{ProcessGroup:DetectedName} - {HostGroup:Name/[^\\_]*$} +{ProcessGroup:KubernetesNamespace} +{ProcessGroup:CommandLineArgs/.*?\\-f\\s\\/www\\/(.*?)\\/generated\\/httpd\\.conf.*?} + +You can combine different ones. Check the (documentation)[link] for more \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_sfa-vs/conditional-naming-processgroup/conditional-naming-processgroup.yaml b/BMW-Dynatrace-config/CD_sfa-vs/conditional-naming-processgroup/conditional-naming-processgroup.yaml new file mode 100644 index 00000000..9df0e31e --- /dev/null +++ b/BMW-Dynatrace-config/CD_sfa-vs/conditional-naming-processgroup/conditional-naming-processgroup.yaml @@ -0,0 +1,8 @@ +config: +- CDsfa-vs: template.json + +CDsfa-vs: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: sfa-vs +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_sfa-vs/conditional-naming-processgroup/template.json b/BMW-Dynatrace-config/CD_sfa-vs/conditional-naming-processgroup/template.json new file mode 100644 index 00000000..7c039808 --- /dev/null +++ b/BMW-Dynatrace-config/CD_sfa-vs/conditional-naming-processgroup/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "type": "PROCESS_GROUP" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_sfa-vs/conditional-naming-service/README.md b/BMW-Dynatrace-config/CD_sfa-vs/conditional-naming-service/README.md new file mode 100644 index 00000000..c34ef308 --- /dev/null +++ b/BMW-Dynatrace-config/CD_sfa-vs/conditional-naming-service/README.md @@ -0,0 +1,35 @@ +### Service Naming Rules + +A typical case could be that you access to *Transaction & Services* and you find two services that are exactly the same: +*DataDownloadV1* +*DataDownloadV1* + +If you drilldown into the service and you check in the process group, you may have a PROD and a E2E for each service. + +*Note: if you see that both process group are exactly the same, please contact a Dynatrace expert to create a Process* +*Group detection rule* + +In the case the PG are PROD and E2E, then we need to create a rule that looks like this: + +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {Service:DetectedName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +- tag: Infotainment +- skipDeployment: false +``` + +The rule will get the Service Detected Name (current name) and it will extract (with a regex) the part of the kubernetes namespace after the "-", so -prod or -e2e, resulting in: +*DataDownloadV1 - prod* +*DataDownloadV1 - e2e* + +Now, services will be easy to identify. + +You can create rules based on any property/metadata. Some other placeholder's eamples: +{Service:DatabaseName} - E2E +{Service:WebServiceName} - {ProcessGroup:Kubernetes:microservice} - {ProcessGroup:Kubernetes:environment} +{Service:DetectedName} - {ProcessGroup:KubernetesContainerName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +{Service:DetectedName} - {ProcessGroup:SpringBootProfileName/[^\\-]*$} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_sfa-vs/conditional-naming-service/conditional-naming-service.yaml b/BMW-Dynatrace-config/CD_sfa-vs/conditional-naming-service/conditional-naming-service.yaml new file mode 100644 index 00000000..9df0e31e --- /dev/null +++ b/BMW-Dynatrace-config/CD_sfa-vs/conditional-naming-service/conditional-naming-service.yaml @@ -0,0 +1,8 @@ +config: +- CDsfa-vs: template.json + +CDsfa-vs: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: sfa-vs +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_sfa-vs/conditional-naming-service/template.json b/BMW-Dynatrace-config/CD_sfa-vs/conditional-naming-service/template.json new file mode 100644 index 00000000..5d4fac56 --- /dev/null +++ b/BMW-Dynatrace-config/CD_sfa-vs/conditional-naming-service/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "type": "SERVICE" +} \ 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 index d41c4c77..5f35e5c1 100644 --- a/BMW-Dynatrace-config/CD_sfa-vs/custom-service-java/README.md +++ b/BMW-Dynatrace-config/CD_sfa-vs/custom-service-java/README.md @@ -1,30 +1,4 @@ -## 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 configure custom services? -## 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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Custom+Services) page to configure your custom services. \ 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 index 92e734fa..1695924c 100644 --- a/BMW-Dynatrace-config/CD_sfa-vs/synthetic-monitor/README.md +++ b/BMW-Dynatrace-config/CD_sfa-vs/synthetic-monitor/README.md @@ -1,37 +1,4 @@ -# Synthetic Configuration -To calculate the Availability KPI, a synthetic must be configured. +### How to configure synthetics? -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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Synthetic+Monitors) page to configure your synthetics. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_sfa/conditional-naming-processgroup/README.md b/BMW-Dynatrace-config/CD_sfa/conditional-naming-processgroup/README.md new file mode 100644 index 00000000..f94196a5 --- /dev/null +++ b/BMW-Dynatrace-config/CD_sfa/conditional-naming-processgroup/README.md @@ -0,0 +1,67 @@ +### Process Group Detection Rules and Naming + +#### Detection Rule or Naming? + +For the explanation, we're using a real example of the Infotainment application: + +!(PGNaming1)[../../../../img/PGNaming1.PNG] + +Before working with your dashboards and alerting profiles, an important task to do when working with Dynatrace is checking +the structure of your applications (process groups). You can do that clicking under *technologies* and filter using your +application Management Zone. + +In the picture above, there are two Process Groups called bon-information-prod. **If you see duplicated process groups like in** +**this case, you MUST follow this guideline** + +Next step would be to open both process groups and compare the metadata. In that way, you can identify if all process instances are +part of the same application or not. An easy way to do that is asking yourself: how many instances of my application do i have? + +If you have 4 instances in total and you're able to see 2 in one PG and other 2 in other PG it means that **they are part of the ** +**same application** + +Another situation could be that checking on the metadata, then you see that are **two different application** and Dynatrace is just naming +the process group in the same way + +*Same application* +- Problem: Dynatrace is creating two different process groups, what transalates in two separated services for the same application. Instead of +seeing all the traffic in one service, you will have it splitted and it will complicate your monitoring +- Solution: create a process group detection rule. Contact Dynatrace Expert + +*Different application* +- Problem: Dynatrace is just naming in the same way applications that are different. +- Solution: This case is less severe, since it can be fixed with a process group naming rule. + + +What about our example? +!(PGNaming2)[../../../../img/PGNaming2.PNG] +!(PGNaming3)[../../../../img/PGNaming3.PNG] + +Based on the feedback of the infotaiment team, each process group is a different application (microservice) and it's visible in the kubernetes container/workload +within the metadata of each Process Group. + +#### How to create a Process Group Detection Rule +1. Open the *conditional-naming-processgroup.yaml* file and create a rule that looks like this: +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName} +- tag: Infotainment +- skipDeployment: false +``` +The result of the rule will be renaming the PG to this: +``` +bon-information-prod ipa +bon-information-prod rsl +``` + +Other possible placeholders that you can use are for example: +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName/[^\\-]*$} +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesFullPodName/buffet-(.*?)-} +{ProcessGroup:DetectedName} - {HostGroup:Name/[^\\_]*$} +{ProcessGroup:KubernetesNamespace} +{ProcessGroup:CommandLineArgs/.*?\\-f\\s\\/www\\/(.*?)\\/generated\\/httpd\\.conf.*?} + +You can combine different ones. Check the (documentation)[link] for more \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_sfa/conditional-naming-processgroup/conditional-naming-processgroup.yaml b/BMW-Dynatrace-config/CD_sfa/conditional-naming-processgroup/conditional-naming-processgroup.yaml new file mode 100644 index 00000000..5af68e87 --- /dev/null +++ b/BMW-Dynatrace-config/CD_sfa/conditional-naming-processgroup/conditional-naming-processgroup.yaml @@ -0,0 +1,8 @@ +config: +- CDsfa: template.json + +CDsfa: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: sfa +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_sfa/conditional-naming-processgroup/template.json b/BMW-Dynatrace-config/CD_sfa/conditional-naming-processgroup/template.json new file mode 100644 index 00000000..7c039808 --- /dev/null +++ b/BMW-Dynatrace-config/CD_sfa/conditional-naming-processgroup/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "type": "PROCESS_GROUP" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_sfa/conditional-naming-service/README.md b/BMW-Dynatrace-config/CD_sfa/conditional-naming-service/README.md new file mode 100644 index 00000000..c34ef308 --- /dev/null +++ b/BMW-Dynatrace-config/CD_sfa/conditional-naming-service/README.md @@ -0,0 +1,35 @@ +### Service Naming Rules + +A typical case could be that you access to *Transaction & Services* and you find two services that are exactly the same: +*DataDownloadV1* +*DataDownloadV1* + +If you drilldown into the service and you check in the process group, you may have a PROD and a E2E for each service. + +*Note: if you see that both process group are exactly the same, please contact a Dynatrace expert to create a Process* +*Group detection rule* + +In the case the PG are PROD and E2E, then we need to create a rule that looks like this: + +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {Service:DetectedName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +- tag: Infotainment +- skipDeployment: false +``` + +The rule will get the Service Detected Name (current name) and it will extract (with a regex) the part of the kubernetes namespace after the "-", so -prod or -e2e, resulting in: +*DataDownloadV1 - prod* +*DataDownloadV1 - e2e* + +Now, services will be easy to identify. + +You can create rules based on any property/metadata. Some other placeholder's eamples: +{Service:DatabaseName} - E2E +{Service:WebServiceName} - {ProcessGroup:Kubernetes:microservice} - {ProcessGroup:Kubernetes:environment} +{Service:DetectedName} - {ProcessGroup:KubernetesContainerName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +{Service:DetectedName} - {ProcessGroup:SpringBootProfileName/[^\\-]*$} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_sfa/conditional-naming-service/conditional-naming-service.yaml b/BMW-Dynatrace-config/CD_sfa/conditional-naming-service/conditional-naming-service.yaml new file mode 100644 index 00000000..5af68e87 --- /dev/null +++ b/BMW-Dynatrace-config/CD_sfa/conditional-naming-service/conditional-naming-service.yaml @@ -0,0 +1,8 @@ +config: +- CDsfa: template.json + +CDsfa: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: sfa +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_sfa/conditional-naming-service/template.json b/BMW-Dynatrace-config/CD_sfa/conditional-naming-service/template.json new file mode 100644 index 00000000..5d4fac56 --- /dev/null +++ b/BMW-Dynatrace-config/CD_sfa/conditional-naming-service/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "type": "SERVICE" +} \ 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 index d41c4c77..5f35e5c1 100644 --- a/BMW-Dynatrace-config/CD_sfa/custom-service-java/README.md +++ b/BMW-Dynatrace-config/CD_sfa/custom-service-java/README.md @@ -1,30 +1,4 @@ -## 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 configure custom services? -## 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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Custom+Services) page to configure your custom services. \ 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 index 92e734fa..1695924c 100644 --- a/BMW-Dynatrace-config/CD_sfa/synthetic-monitor/README.md +++ b/BMW-Dynatrace-config/CD_sfa/synthetic-monitor/README.md @@ -1,37 +1,4 @@ -# Synthetic Configuration -To calculate the Availability KPI, a synthetic must be configured. +### How to configure synthetics? -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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Synthetic+Monitors) page to configure your synthetics. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_smart-access-order-service/conditional-naming-processgroup/README.md b/BMW-Dynatrace-config/CD_smart-access-order-service/conditional-naming-processgroup/README.md new file mode 100644 index 00000000..f94196a5 --- /dev/null +++ b/BMW-Dynatrace-config/CD_smart-access-order-service/conditional-naming-processgroup/README.md @@ -0,0 +1,67 @@ +### Process Group Detection Rules and Naming + +#### Detection Rule or Naming? + +For the explanation, we're using a real example of the Infotainment application: + +!(PGNaming1)[../../../../img/PGNaming1.PNG] + +Before working with your dashboards and alerting profiles, an important task to do when working with Dynatrace is checking +the structure of your applications (process groups). You can do that clicking under *technologies* and filter using your +application Management Zone. + +In the picture above, there are two Process Groups called bon-information-prod. **If you see duplicated process groups like in** +**this case, you MUST follow this guideline** + +Next step would be to open both process groups and compare the metadata. In that way, you can identify if all process instances are +part of the same application or not. An easy way to do that is asking yourself: how many instances of my application do i have? + +If you have 4 instances in total and you're able to see 2 in one PG and other 2 in other PG it means that **they are part of the ** +**same application** + +Another situation could be that checking on the metadata, then you see that are **two different application** and Dynatrace is just naming +the process group in the same way + +*Same application* +- Problem: Dynatrace is creating two different process groups, what transalates in two separated services for the same application. Instead of +seeing all the traffic in one service, you will have it splitted and it will complicate your monitoring +- Solution: create a process group detection rule. Contact Dynatrace Expert + +*Different application* +- Problem: Dynatrace is just naming in the same way applications that are different. +- Solution: This case is less severe, since it can be fixed with a process group naming rule. + + +What about our example? +!(PGNaming2)[../../../../img/PGNaming2.PNG] +!(PGNaming3)[../../../../img/PGNaming3.PNG] + +Based on the feedback of the infotaiment team, each process group is a different application (microservice) and it's visible in the kubernetes container/workload +within the metadata of each Process Group. + +#### How to create a Process Group Detection Rule +1. Open the *conditional-naming-processgroup.yaml* file and create a rule that looks like this: +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName} +- tag: Infotainment +- skipDeployment: false +``` +The result of the rule will be renaming the PG to this: +``` +bon-information-prod ipa +bon-information-prod rsl +``` + +Other possible placeholders that you can use are for example: +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName/[^\\-]*$} +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesFullPodName/buffet-(.*?)-} +{ProcessGroup:DetectedName} - {HostGroup:Name/[^\\_]*$} +{ProcessGroup:KubernetesNamespace} +{ProcessGroup:CommandLineArgs/.*?\\-f\\s\\/www\\/(.*?)\\/generated\\/httpd\\.conf.*?} + +You can combine different ones. Check the (documentation)[link] for more \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_smart-access-order-service/conditional-naming-processgroup/conditional-naming-processgroup.yaml b/BMW-Dynatrace-config/CD_smart-access-order-service/conditional-naming-processgroup/conditional-naming-processgroup.yaml new file mode 100644 index 00000000..effede9c --- /dev/null +++ b/BMW-Dynatrace-config/CD_smart-access-order-service/conditional-naming-processgroup/conditional-naming-processgroup.yaml @@ -0,0 +1,8 @@ +config: +- CDsmart-access-order-service: template.json + +CDsmart-access-order-service: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: smart-access-order-service +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_smart-access-order-service/conditional-naming-processgroup/template.json b/BMW-Dynatrace-config/CD_smart-access-order-service/conditional-naming-processgroup/template.json new file mode 100644 index 00000000..7c039808 --- /dev/null +++ b/BMW-Dynatrace-config/CD_smart-access-order-service/conditional-naming-processgroup/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "type": "PROCESS_GROUP" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_smart-access-order-service/conditional-naming-service/README.md b/BMW-Dynatrace-config/CD_smart-access-order-service/conditional-naming-service/README.md new file mode 100644 index 00000000..c34ef308 --- /dev/null +++ b/BMW-Dynatrace-config/CD_smart-access-order-service/conditional-naming-service/README.md @@ -0,0 +1,35 @@ +### Service Naming Rules + +A typical case could be that you access to *Transaction & Services* and you find two services that are exactly the same: +*DataDownloadV1* +*DataDownloadV1* + +If you drilldown into the service and you check in the process group, you may have a PROD and a E2E for each service. + +*Note: if you see that both process group are exactly the same, please contact a Dynatrace expert to create a Process* +*Group detection rule* + +In the case the PG are PROD and E2E, then we need to create a rule that looks like this: + +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {Service:DetectedName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +- tag: Infotainment +- skipDeployment: false +``` + +The rule will get the Service Detected Name (current name) and it will extract (with a regex) the part of the kubernetes namespace after the "-", so -prod or -e2e, resulting in: +*DataDownloadV1 - prod* +*DataDownloadV1 - e2e* + +Now, services will be easy to identify. + +You can create rules based on any property/metadata. Some other placeholder's eamples: +{Service:DatabaseName} - E2E +{Service:WebServiceName} - {ProcessGroup:Kubernetes:microservice} - {ProcessGroup:Kubernetes:environment} +{Service:DetectedName} - {ProcessGroup:KubernetesContainerName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +{Service:DetectedName} - {ProcessGroup:SpringBootProfileName/[^\\-]*$} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_smart-access-order-service/conditional-naming-service/conditional-naming-service.yaml b/BMW-Dynatrace-config/CD_smart-access-order-service/conditional-naming-service/conditional-naming-service.yaml new file mode 100644 index 00000000..effede9c --- /dev/null +++ b/BMW-Dynatrace-config/CD_smart-access-order-service/conditional-naming-service/conditional-naming-service.yaml @@ -0,0 +1,8 @@ +config: +- CDsmart-access-order-service: template.json + +CDsmart-access-order-service: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: smart-access-order-service +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_smart-access-order-service/conditional-naming-service/template.json b/BMW-Dynatrace-config/CD_smart-access-order-service/conditional-naming-service/template.json new file mode 100644 index 00000000..5d4fac56 --- /dev/null +++ b/BMW-Dynatrace-config/CD_smart-access-order-service/conditional-naming-service/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "type": "SERVICE" +} \ 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 index d41c4c77..5f35e5c1 100644 --- 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 @@ -1,30 +1,4 @@ -## 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 configure custom services? -## 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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Custom+Services) page to configure your custom services. \ 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 index 92e734fa..1695924c 100644 --- 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 @@ -1,37 +1,4 @@ -# Synthetic Configuration -To calculate the Availability KPI, a synthetic must be configured. +### How to configure synthetics? -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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Synthetic+Monitors) page to configure your synthetics. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_sms-email-adapter-service/conditional-naming-processgroup/README.md b/BMW-Dynatrace-config/CD_sms-email-adapter-service/conditional-naming-processgroup/README.md new file mode 100644 index 00000000..f94196a5 --- /dev/null +++ b/BMW-Dynatrace-config/CD_sms-email-adapter-service/conditional-naming-processgroup/README.md @@ -0,0 +1,67 @@ +### Process Group Detection Rules and Naming + +#### Detection Rule or Naming? + +For the explanation, we're using a real example of the Infotainment application: + +!(PGNaming1)[../../../../img/PGNaming1.PNG] + +Before working with your dashboards and alerting profiles, an important task to do when working with Dynatrace is checking +the structure of your applications (process groups). You can do that clicking under *technologies* and filter using your +application Management Zone. + +In the picture above, there are two Process Groups called bon-information-prod. **If you see duplicated process groups like in** +**this case, you MUST follow this guideline** + +Next step would be to open both process groups and compare the metadata. In that way, you can identify if all process instances are +part of the same application or not. An easy way to do that is asking yourself: how many instances of my application do i have? + +If you have 4 instances in total and you're able to see 2 in one PG and other 2 in other PG it means that **they are part of the ** +**same application** + +Another situation could be that checking on the metadata, then you see that are **two different application** and Dynatrace is just naming +the process group in the same way + +*Same application* +- Problem: Dynatrace is creating two different process groups, what transalates in two separated services for the same application. Instead of +seeing all the traffic in one service, you will have it splitted and it will complicate your monitoring +- Solution: create a process group detection rule. Contact Dynatrace Expert + +*Different application* +- Problem: Dynatrace is just naming in the same way applications that are different. +- Solution: This case is less severe, since it can be fixed with a process group naming rule. + + +What about our example? +!(PGNaming2)[../../../../img/PGNaming2.PNG] +!(PGNaming3)[../../../../img/PGNaming3.PNG] + +Based on the feedback of the infotaiment team, each process group is a different application (microservice) and it's visible in the kubernetes container/workload +within the metadata of each Process Group. + +#### How to create a Process Group Detection Rule +1. Open the *conditional-naming-processgroup.yaml* file and create a rule that looks like this: +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName} +- tag: Infotainment +- skipDeployment: false +``` +The result of the rule will be renaming the PG to this: +``` +bon-information-prod ipa +bon-information-prod rsl +``` + +Other possible placeholders that you can use are for example: +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName/[^\\-]*$} +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesFullPodName/buffet-(.*?)-} +{ProcessGroup:DetectedName} - {HostGroup:Name/[^\\_]*$} +{ProcessGroup:KubernetesNamespace} +{ProcessGroup:CommandLineArgs/.*?\\-f\\s\\/www\\/(.*?)\\/generated\\/httpd\\.conf.*?} + +You can combine different ones. Check the (documentation)[link] for more \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_sms-email-adapter-service/conditional-naming-processgroup/conditional-naming-processgroup.yaml b/BMW-Dynatrace-config/CD_sms-email-adapter-service/conditional-naming-processgroup/conditional-naming-processgroup.yaml new file mode 100644 index 00000000..6db2869f --- /dev/null +++ b/BMW-Dynatrace-config/CD_sms-email-adapter-service/conditional-naming-processgroup/conditional-naming-processgroup.yaml @@ -0,0 +1,8 @@ +config: +- CDsms-email-adapter-service: template.json + +CDsms-email-adapter-service: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: sms-email-adapter-service +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_sms-email-adapter-service/conditional-naming-processgroup/template.json b/BMW-Dynatrace-config/CD_sms-email-adapter-service/conditional-naming-processgroup/template.json new file mode 100644 index 00000000..7c039808 --- /dev/null +++ b/BMW-Dynatrace-config/CD_sms-email-adapter-service/conditional-naming-processgroup/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "type": "PROCESS_GROUP" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_sms-email-adapter-service/conditional-naming-service/README.md b/BMW-Dynatrace-config/CD_sms-email-adapter-service/conditional-naming-service/README.md new file mode 100644 index 00000000..c34ef308 --- /dev/null +++ b/BMW-Dynatrace-config/CD_sms-email-adapter-service/conditional-naming-service/README.md @@ -0,0 +1,35 @@ +### Service Naming Rules + +A typical case could be that you access to *Transaction & Services* and you find two services that are exactly the same: +*DataDownloadV1* +*DataDownloadV1* + +If you drilldown into the service and you check in the process group, you may have a PROD and a E2E for each service. + +*Note: if you see that both process group are exactly the same, please contact a Dynatrace expert to create a Process* +*Group detection rule* + +In the case the PG are PROD and E2E, then we need to create a rule that looks like this: + +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {Service:DetectedName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +- tag: Infotainment +- skipDeployment: false +``` + +The rule will get the Service Detected Name (current name) and it will extract (with a regex) the part of the kubernetes namespace after the "-", so -prod or -e2e, resulting in: +*DataDownloadV1 - prod* +*DataDownloadV1 - e2e* + +Now, services will be easy to identify. + +You can create rules based on any property/metadata. Some other placeholder's eamples: +{Service:DatabaseName} - E2E +{Service:WebServiceName} - {ProcessGroup:Kubernetes:microservice} - {ProcessGroup:Kubernetes:environment} +{Service:DetectedName} - {ProcessGroup:KubernetesContainerName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +{Service:DetectedName} - {ProcessGroup:SpringBootProfileName/[^\\-]*$} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_sms-email-adapter-service/conditional-naming-service/conditional-naming-service.yaml b/BMW-Dynatrace-config/CD_sms-email-adapter-service/conditional-naming-service/conditional-naming-service.yaml new file mode 100644 index 00000000..6db2869f --- /dev/null +++ b/BMW-Dynatrace-config/CD_sms-email-adapter-service/conditional-naming-service/conditional-naming-service.yaml @@ -0,0 +1,8 @@ +config: +- CDsms-email-adapter-service: template.json + +CDsms-email-adapter-service: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: sms-email-adapter-service +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_sms-email-adapter-service/conditional-naming-service/template.json b/BMW-Dynatrace-config/CD_sms-email-adapter-service/conditional-naming-service/template.json new file mode 100644 index 00000000..5d4fac56 --- /dev/null +++ b/BMW-Dynatrace-config/CD_sms-email-adapter-service/conditional-naming-service/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "type": "SERVICE" +} \ 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 index d41c4c77..5f35e5c1 100644 --- 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 @@ -1,30 +1,4 @@ -## 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 configure custom services? -## 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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Custom+Services) page to configure your custom services. \ 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 index 92e734fa..1695924c 100644 --- 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 @@ -1,37 +1,4 @@ -# Synthetic Configuration -To calculate the Availability KPI, a synthetic must be configured. +### How to configure synthetics? -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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Synthetic+Monitors) page to configure your synthetics. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_srmanager/conditional-naming-processgroup/README.md b/BMW-Dynatrace-config/CD_srmanager/conditional-naming-processgroup/README.md new file mode 100644 index 00000000..f94196a5 --- /dev/null +++ b/BMW-Dynatrace-config/CD_srmanager/conditional-naming-processgroup/README.md @@ -0,0 +1,67 @@ +### Process Group Detection Rules and Naming + +#### Detection Rule or Naming? + +For the explanation, we're using a real example of the Infotainment application: + +!(PGNaming1)[../../../../img/PGNaming1.PNG] + +Before working with your dashboards and alerting profiles, an important task to do when working with Dynatrace is checking +the structure of your applications (process groups). You can do that clicking under *technologies* and filter using your +application Management Zone. + +In the picture above, there are two Process Groups called bon-information-prod. **If you see duplicated process groups like in** +**this case, you MUST follow this guideline** + +Next step would be to open both process groups and compare the metadata. In that way, you can identify if all process instances are +part of the same application or not. An easy way to do that is asking yourself: how many instances of my application do i have? + +If you have 4 instances in total and you're able to see 2 in one PG and other 2 in other PG it means that **they are part of the ** +**same application** + +Another situation could be that checking on the metadata, then you see that are **two different application** and Dynatrace is just naming +the process group in the same way + +*Same application* +- Problem: Dynatrace is creating two different process groups, what transalates in two separated services for the same application. Instead of +seeing all the traffic in one service, you will have it splitted and it will complicate your monitoring +- Solution: create a process group detection rule. Contact Dynatrace Expert + +*Different application* +- Problem: Dynatrace is just naming in the same way applications that are different. +- Solution: This case is less severe, since it can be fixed with a process group naming rule. + + +What about our example? +!(PGNaming2)[../../../../img/PGNaming2.PNG] +!(PGNaming3)[../../../../img/PGNaming3.PNG] + +Based on the feedback of the infotaiment team, each process group is a different application (microservice) and it's visible in the kubernetes container/workload +within the metadata of each Process Group. + +#### How to create a Process Group Detection Rule +1. Open the *conditional-naming-processgroup.yaml* file and create a rule that looks like this: +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName} +- tag: Infotainment +- skipDeployment: false +``` +The result of the rule will be renaming the PG to this: +``` +bon-information-prod ipa +bon-information-prod rsl +``` + +Other possible placeholders that you can use are for example: +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName/[^\\-]*$} +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesFullPodName/buffet-(.*?)-} +{ProcessGroup:DetectedName} - {HostGroup:Name/[^\\_]*$} +{ProcessGroup:KubernetesNamespace} +{ProcessGroup:CommandLineArgs/.*?\\-f\\s\\/www\\/(.*?)\\/generated\\/httpd\\.conf.*?} + +You can combine different ones. Check the (documentation)[link] for more \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_srmanager/conditional-naming-processgroup/conditional-naming-processgroup.yaml b/BMW-Dynatrace-config/CD_srmanager/conditional-naming-processgroup/conditional-naming-processgroup.yaml new file mode 100644 index 00000000..5e0c0334 --- /dev/null +++ b/BMW-Dynatrace-config/CD_srmanager/conditional-naming-processgroup/conditional-naming-processgroup.yaml @@ -0,0 +1,8 @@ +config: +- CDsrmanager: template.json + +CDsrmanager: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: srmanager +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_srmanager/conditional-naming-processgroup/template.json b/BMW-Dynatrace-config/CD_srmanager/conditional-naming-processgroup/template.json new file mode 100644 index 00000000..7c039808 --- /dev/null +++ b/BMW-Dynatrace-config/CD_srmanager/conditional-naming-processgroup/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "type": "PROCESS_GROUP" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_srmanager/conditional-naming-service/README.md b/BMW-Dynatrace-config/CD_srmanager/conditional-naming-service/README.md new file mode 100644 index 00000000..c34ef308 --- /dev/null +++ b/BMW-Dynatrace-config/CD_srmanager/conditional-naming-service/README.md @@ -0,0 +1,35 @@ +### Service Naming Rules + +A typical case could be that you access to *Transaction & Services* and you find two services that are exactly the same: +*DataDownloadV1* +*DataDownloadV1* + +If you drilldown into the service and you check in the process group, you may have a PROD and a E2E for each service. + +*Note: if you see that both process group are exactly the same, please contact a Dynatrace expert to create a Process* +*Group detection rule* + +In the case the PG are PROD and E2E, then we need to create a rule that looks like this: + +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {Service:DetectedName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +- tag: Infotainment +- skipDeployment: false +``` + +The rule will get the Service Detected Name (current name) and it will extract (with a regex) the part of the kubernetes namespace after the "-", so -prod or -e2e, resulting in: +*DataDownloadV1 - prod* +*DataDownloadV1 - e2e* + +Now, services will be easy to identify. + +You can create rules based on any property/metadata. Some other placeholder's eamples: +{Service:DatabaseName} - E2E +{Service:WebServiceName} - {ProcessGroup:Kubernetes:microservice} - {ProcessGroup:Kubernetes:environment} +{Service:DetectedName} - {ProcessGroup:KubernetesContainerName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +{Service:DetectedName} - {ProcessGroup:SpringBootProfileName/[^\\-]*$} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_srmanager/conditional-naming-service/conditional-naming-service.yaml b/BMW-Dynatrace-config/CD_srmanager/conditional-naming-service/conditional-naming-service.yaml new file mode 100644 index 00000000..5e0c0334 --- /dev/null +++ b/BMW-Dynatrace-config/CD_srmanager/conditional-naming-service/conditional-naming-service.yaml @@ -0,0 +1,8 @@ +config: +- CDsrmanager: template.json + +CDsrmanager: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: srmanager +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_srmanager/conditional-naming-service/template.json b/BMW-Dynatrace-config/CD_srmanager/conditional-naming-service/template.json new file mode 100644 index 00000000..5d4fac56 --- /dev/null +++ b/BMW-Dynatrace-config/CD_srmanager/conditional-naming-service/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "type": "SERVICE" +} \ 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 index d41c4c77..5f35e5c1 100644 --- a/BMW-Dynatrace-config/CD_srmanager/custom-service-java/README.md +++ b/BMW-Dynatrace-config/CD_srmanager/custom-service-java/README.md @@ -1,30 +1,4 @@ -## 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 configure custom services? -## 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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Custom+Services) page to configure your custom services. \ 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 index 92e734fa..1695924c 100644 --- a/BMW-Dynatrace-config/CD_srmanager/synthetic-monitor/README.md +++ b/BMW-Dynatrace-config/CD_srmanager/synthetic-monitor/README.md @@ -1,37 +1,4 @@ -# Synthetic Configuration -To calculate the Availability KPI, a synthetic must be configured. +### How to configure synthetics? -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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Synthetic+Monitors) page to configure your synthetics. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_stm/conditional-naming-processgroup/README.md b/BMW-Dynatrace-config/CD_stm/conditional-naming-processgroup/README.md new file mode 100644 index 00000000..f94196a5 --- /dev/null +++ b/BMW-Dynatrace-config/CD_stm/conditional-naming-processgroup/README.md @@ -0,0 +1,67 @@ +### Process Group Detection Rules and Naming + +#### Detection Rule or Naming? + +For the explanation, we're using a real example of the Infotainment application: + +!(PGNaming1)[../../../../img/PGNaming1.PNG] + +Before working with your dashboards and alerting profiles, an important task to do when working with Dynatrace is checking +the structure of your applications (process groups). You can do that clicking under *technologies* and filter using your +application Management Zone. + +In the picture above, there are two Process Groups called bon-information-prod. **If you see duplicated process groups like in** +**this case, you MUST follow this guideline** + +Next step would be to open both process groups and compare the metadata. In that way, you can identify if all process instances are +part of the same application or not. An easy way to do that is asking yourself: how many instances of my application do i have? + +If you have 4 instances in total and you're able to see 2 in one PG and other 2 in other PG it means that **they are part of the ** +**same application** + +Another situation could be that checking on the metadata, then you see that are **two different application** and Dynatrace is just naming +the process group in the same way + +*Same application* +- Problem: Dynatrace is creating two different process groups, what transalates in two separated services for the same application. Instead of +seeing all the traffic in one service, you will have it splitted and it will complicate your monitoring +- Solution: create a process group detection rule. Contact Dynatrace Expert + +*Different application* +- Problem: Dynatrace is just naming in the same way applications that are different. +- Solution: This case is less severe, since it can be fixed with a process group naming rule. + + +What about our example? +!(PGNaming2)[../../../../img/PGNaming2.PNG] +!(PGNaming3)[../../../../img/PGNaming3.PNG] + +Based on the feedback of the infotaiment team, each process group is a different application (microservice) and it's visible in the kubernetes container/workload +within the metadata of each Process Group. + +#### How to create a Process Group Detection Rule +1. Open the *conditional-naming-processgroup.yaml* file and create a rule that looks like this: +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName} +- tag: Infotainment +- skipDeployment: false +``` +The result of the rule will be renaming the PG to this: +``` +bon-information-prod ipa +bon-information-prod rsl +``` + +Other possible placeholders that you can use are for example: +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName/[^\\-]*$} +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesFullPodName/buffet-(.*?)-} +{ProcessGroup:DetectedName} - {HostGroup:Name/[^\\_]*$} +{ProcessGroup:KubernetesNamespace} +{ProcessGroup:CommandLineArgs/.*?\\-f\\s\\/www\\/(.*?)\\/generated\\/httpd\\.conf.*?} + +You can combine different ones. Check the (documentation)[link] for more \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_stm/conditional-naming-processgroup/conditional-naming-processgroup.yaml b/BMW-Dynatrace-config/CD_stm/conditional-naming-processgroup/conditional-naming-processgroup.yaml new file mode 100644 index 00000000..fb830d1b --- /dev/null +++ b/BMW-Dynatrace-config/CD_stm/conditional-naming-processgroup/conditional-naming-processgroup.yaml @@ -0,0 +1,8 @@ +config: +- CDstm: template.json + +CDstm: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: stm +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_stm/conditional-naming-processgroup/template.json b/BMW-Dynatrace-config/CD_stm/conditional-naming-processgroup/template.json new file mode 100644 index 00000000..7c039808 --- /dev/null +++ b/BMW-Dynatrace-config/CD_stm/conditional-naming-processgroup/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "type": "PROCESS_GROUP" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_stm/conditional-naming-service/README.md b/BMW-Dynatrace-config/CD_stm/conditional-naming-service/README.md new file mode 100644 index 00000000..c34ef308 --- /dev/null +++ b/BMW-Dynatrace-config/CD_stm/conditional-naming-service/README.md @@ -0,0 +1,35 @@ +### Service Naming Rules + +A typical case could be that you access to *Transaction & Services* and you find two services that are exactly the same: +*DataDownloadV1* +*DataDownloadV1* + +If you drilldown into the service and you check in the process group, you may have a PROD and a E2E for each service. + +*Note: if you see that both process group are exactly the same, please contact a Dynatrace expert to create a Process* +*Group detection rule* + +In the case the PG are PROD and E2E, then we need to create a rule that looks like this: + +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {Service:DetectedName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +- tag: Infotainment +- skipDeployment: false +``` + +The rule will get the Service Detected Name (current name) and it will extract (with a regex) the part of the kubernetes namespace after the "-", so -prod or -e2e, resulting in: +*DataDownloadV1 - prod* +*DataDownloadV1 - e2e* + +Now, services will be easy to identify. + +You can create rules based on any property/metadata. Some other placeholder's eamples: +{Service:DatabaseName} - E2E +{Service:WebServiceName} - {ProcessGroup:Kubernetes:microservice} - {ProcessGroup:Kubernetes:environment} +{Service:DetectedName} - {ProcessGroup:KubernetesContainerName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +{Service:DetectedName} - {ProcessGroup:SpringBootProfileName/[^\\-]*$} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_stm/conditional-naming-service/conditional-naming-service.yaml b/BMW-Dynatrace-config/CD_stm/conditional-naming-service/conditional-naming-service.yaml new file mode 100644 index 00000000..fb830d1b --- /dev/null +++ b/BMW-Dynatrace-config/CD_stm/conditional-naming-service/conditional-naming-service.yaml @@ -0,0 +1,8 @@ +config: +- CDstm: template.json + +CDstm: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: stm +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_stm/conditional-naming-service/template.json b/BMW-Dynatrace-config/CD_stm/conditional-naming-service/template.json new file mode 100644 index 00000000..5d4fac56 --- /dev/null +++ b/BMW-Dynatrace-config/CD_stm/conditional-naming-service/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "type": "SERVICE" +} \ 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 index d41c4c77..5f35e5c1 100644 --- a/BMW-Dynatrace-config/CD_stm/custom-service-java/README.md +++ b/BMW-Dynatrace-config/CD_stm/custom-service-java/README.md @@ -1,30 +1,4 @@ -## 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 configure custom services? -## 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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Custom+Services) page to configure your custom services. \ 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 index 92e734fa..1695924c 100644 --- a/BMW-Dynatrace-config/CD_stm/synthetic-monitor/README.md +++ b/BMW-Dynatrace-config/CD_stm/synthetic-monitor/README.md @@ -1,37 +1,4 @@ -# Synthetic Configuration -To calculate the Availability KPI, a synthetic must be configured. +### How to configure synthetics? -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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Synthetic+Monitors) page to configure your synthetics. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_svcinfo/conditional-naming-processgroup/README.md b/BMW-Dynatrace-config/CD_svcinfo/conditional-naming-processgroup/README.md new file mode 100644 index 00000000..f94196a5 --- /dev/null +++ b/BMW-Dynatrace-config/CD_svcinfo/conditional-naming-processgroup/README.md @@ -0,0 +1,67 @@ +### Process Group Detection Rules and Naming + +#### Detection Rule or Naming? + +For the explanation, we're using a real example of the Infotainment application: + +!(PGNaming1)[../../../../img/PGNaming1.PNG] + +Before working with your dashboards and alerting profiles, an important task to do when working with Dynatrace is checking +the structure of your applications (process groups). You can do that clicking under *technologies* and filter using your +application Management Zone. + +In the picture above, there are two Process Groups called bon-information-prod. **If you see duplicated process groups like in** +**this case, you MUST follow this guideline** + +Next step would be to open both process groups and compare the metadata. In that way, you can identify if all process instances are +part of the same application or not. An easy way to do that is asking yourself: how many instances of my application do i have? + +If you have 4 instances in total and you're able to see 2 in one PG and other 2 in other PG it means that **they are part of the ** +**same application** + +Another situation could be that checking on the metadata, then you see that are **two different application** and Dynatrace is just naming +the process group in the same way + +*Same application* +- Problem: Dynatrace is creating two different process groups, what transalates in two separated services for the same application. Instead of +seeing all the traffic in one service, you will have it splitted and it will complicate your monitoring +- Solution: create a process group detection rule. Contact Dynatrace Expert + +*Different application* +- Problem: Dynatrace is just naming in the same way applications that are different. +- Solution: This case is less severe, since it can be fixed with a process group naming rule. + + +What about our example? +!(PGNaming2)[../../../../img/PGNaming2.PNG] +!(PGNaming3)[../../../../img/PGNaming3.PNG] + +Based on the feedback of the infotaiment team, each process group is a different application (microservice) and it's visible in the kubernetes container/workload +within the metadata of each Process Group. + +#### How to create a Process Group Detection Rule +1. Open the *conditional-naming-processgroup.yaml* file and create a rule that looks like this: +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName} +- tag: Infotainment +- skipDeployment: false +``` +The result of the rule will be renaming the PG to this: +``` +bon-information-prod ipa +bon-information-prod rsl +``` + +Other possible placeholders that you can use are for example: +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName/[^\\-]*$} +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesFullPodName/buffet-(.*?)-} +{ProcessGroup:DetectedName} - {HostGroup:Name/[^\\_]*$} +{ProcessGroup:KubernetesNamespace} +{ProcessGroup:CommandLineArgs/.*?\\-f\\s\\/www\\/(.*?)\\/generated\\/httpd\\.conf.*?} + +You can combine different ones. Check the (documentation)[link] for more \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_svcinfo/conditional-naming-processgroup/conditional-naming-processgroup.yaml b/BMW-Dynatrace-config/CD_svcinfo/conditional-naming-processgroup/conditional-naming-processgroup.yaml new file mode 100644 index 00000000..bc9697ce --- /dev/null +++ b/BMW-Dynatrace-config/CD_svcinfo/conditional-naming-processgroup/conditional-naming-processgroup.yaml @@ -0,0 +1,8 @@ +config: +- CDsvcinfo: template.json + +CDsvcinfo: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: svcinfo +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_svcinfo/conditional-naming-processgroup/template.json b/BMW-Dynatrace-config/CD_svcinfo/conditional-naming-processgroup/template.json new file mode 100644 index 00000000..7c039808 --- /dev/null +++ b/BMW-Dynatrace-config/CD_svcinfo/conditional-naming-processgroup/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "type": "PROCESS_GROUP" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_svcinfo/conditional-naming-service/README.md b/BMW-Dynatrace-config/CD_svcinfo/conditional-naming-service/README.md new file mode 100644 index 00000000..c34ef308 --- /dev/null +++ b/BMW-Dynatrace-config/CD_svcinfo/conditional-naming-service/README.md @@ -0,0 +1,35 @@ +### Service Naming Rules + +A typical case could be that you access to *Transaction & Services* and you find two services that are exactly the same: +*DataDownloadV1* +*DataDownloadV1* + +If you drilldown into the service and you check in the process group, you may have a PROD and a E2E for each service. + +*Note: if you see that both process group are exactly the same, please contact a Dynatrace expert to create a Process* +*Group detection rule* + +In the case the PG are PROD and E2E, then we need to create a rule that looks like this: + +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {Service:DetectedName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +- tag: Infotainment +- skipDeployment: false +``` + +The rule will get the Service Detected Name (current name) and it will extract (with a regex) the part of the kubernetes namespace after the "-", so -prod or -e2e, resulting in: +*DataDownloadV1 - prod* +*DataDownloadV1 - e2e* + +Now, services will be easy to identify. + +You can create rules based on any property/metadata. Some other placeholder's eamples: +{Service:DatabaseName} - E2E +{Service:WebServiceName} - {ProcessGroup:Kubernetes:microservice} - {ProcessGroup:Kubernetes:environment} +{Service:DetectedName} - {ProcessGroup:KubernetesContainerName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +{Service:DetectedName} - {ProcessGroup:SpringBootProfileName/[^\\-]*$} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_svcinfo/conditional-naming-service/conditional-naming-service.yaml b/BMW-Dynatrace-config/CD_svcinfo/conditional-naming-service/conditional-naming-service.yaml new file mode 100644 index 00000000..bc9697ce --- /dev/null +++ b/BMW-Dynatrace-config/CD_svcinfo/conditional-naming-service/conditional-naming-service.yaml @@ -0,0 +1,8 @@ +config: +- CDsvcinfo: template.json + +CDsvcinfo: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: svcinfo +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_svcinfo/conditional-naming-service/template.json b/BMW-Dynatrace-config/CD_svcinfo/conditional-naming-service/template.json new file mode 100644 index 00000000..5d4fac56 --- /dev/null +++ b/BMW-Dynatrace-config/CD_svcinfo/conditional-naming-service/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "type": "SERVICE" +} \ 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 index d41c4c77..5f35e5c1 100644 --- a/BMW-Dynatrace-config/CD_svcinfo/custom-service-java/README.md +++ b/BMW-Dynatrace-config/CD_svcinfo/custom-service-java/README.md @@ -1,30 +1,4 @@ -## 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 configure custom services? -## 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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Custom+Services) page to configure your custom services. \ 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 index 92e734fa..1695924c 100644 --- a/BMW-Dynatrace-config/CD_svcinfo/synthetic-monitor/README.md +++ b/BMW-Dynatrace-config/CD_svcinfo/synthetic-monitor/README.md @@ -1,37 +1,4 @@ -# Synthetic Configuration -To calculate the Availability KPI, a synthetic must be configured. +### How to configure synthetics? -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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Synthetic+Monitors) page to configure your synthetics. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_timer-service/conditional-naming-processgroup/README.md b/BMW-Dynatrace-config/CD_timer-service/conditional-naming-processgroup/README.md new file mode 100644 index 00000000..f94196a5 --- /dev/null +++ b/BMW-Dynatrace-config/CD_timer-service/conditional-naming-processgroup/README.md @@ -0,0 +1,67 @@ +### Process Group Detection Rules and Naming + +#### Detection Rule or Naming? + +For the explanation, we're using a real example of the Infotainment application: + +!(PGNaming1)[../../../../img/PGNaming1.PNG] + +Before working with your dashboards and alerting profiles, an important task to do when working with Dynatrace is checking +the structure of your applications (process groups). You can do that clicking under *technologies* and filter using your +application Management Zone. + +In the picture above, there are two Process Groups called bon-information-prod. **If you see duplicated process groups like in** +**this case, you MUST follow this guideline** + +Next step would be to open both process groups and compare the metadata. In that way, you can identify if all process instances are +part of the same application or not. An easy way to do that is asking yourself: how many instances of my application do i have? + +If you have 4 instances in total and you're able to see 2 in one PG and other 2 in other PG it means that **they are part of the ** +**same application** + +Another situation could be that checking on the metadata, then you see that are **two different application** and Dynatrace is just naming +the process group in the same way + +*Same application* +- Problem: Dynatrace is creating two different process groups, what transalates in two separated services for the same application. Instead of +seeing all the traffic in one service, you will have it splitted and it will complicate your monitoring +- Solution: create a process group detection rule. Contact Dynatrace Expert + +*Different application* +- Problem: Dynatrace is just naming in the same way applications that are different. +- Solution: This case is less severe, since it can be fixed with a process group naming rule. + + +What about our example? +!(PGNaming2)[../../../../img/PGNaming2.PNG] +!(PGNaming3)[../../../../img/PGNaming3.PNG] + +Based on the feedback of the infotaiment team, each process group is a different application (microservice) and it's visible in the kubernetes container/workload +within the metadata of each Process Group. + +#### How to create a Process Group Detection Rule +1. Open the *conditional-naming-processgroup.yaml* file and create a rule that looks like this: +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName} +- tag: Infotainment +- skipDeployment: false +``` +The result of the rule will be renaming the PG to this: +``` +bon-information-prod ipa +bon-information-prod rsl +``` + +Other possible placeholders that you can use are for example: +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName/[^\\-]*$} +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesFullPodName/buffet-(.*?)-} +{ProcessGroup:DetectedName} - {HostGroup:Name/[^\\_]*$} +{ProcessGroup:KubernetesNamespace} +{ProcessGroup:CommandLineArgs/.*?\\-f\\s\\/www\\/(.*?)\\/generated\\/httpd\\.conf.*?} + +You can combine different ones. Check the (documentation)[link] for more \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_timer-service/conditional-naming-processgroup/conditional-naming-processgroup.yaml b/BMW-Dynatrace-config/CD_timer-service/conditional-naming-processgroup/conditional-naming-processgroup.yaml new file mode 100644 index 00000000..3eb1c516 --- /dev/null +++ b/BMW-Dynatrace-config/CD_timer-service/conditional-naming-processgroup/conditional-naming-processgroup.yaml @@ -0,0 +1,8 @@ +config: +- CDtimer-service: template.json + +CDtimer-service: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: timer-service +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_timer-service/conditional-naming-processgroup/template.json b/BMW-Dynatrace-config/CD_timer-service/conditional-naming-processgroup/template.json new file mode 100644 index 00000000..7c039808 --- /dev/null +++ b/BMW-Dynatrace-config/CD_timer-service/conditional-naming-processgroup/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "type": "PROCESS_GROUP" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_timer-service/conditional-naming-service/README.md b/BMW-Dynatrace-config/CD_timer-service/conditional-naming-service/README.md new file mode 100644 index 00000000..c34ef308 --- /dev/null +++ b/BMW-Dynatrace-config/CD_timer-service/conditional-naming-service/README.md @@ -0,0 +1,35 @@ +### Service Naming Rules + +A typical case could be that you access to *Transaction & Services* and you find two services that are exactly the same: +*DataDownloadV1* +*DataDownloadV1* + +If you drilldown into the service and you check in the process group, you may have a PROD and a E2E for each service. + +*Note: if you see that both process group are exactly the same, please contact a Dynatrace expert to create a Process* +*Group detection rule* + +In the case the PG are PROD and E2E, then we need to create a rule that looks like this: + +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {Service:DetectedName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +- tag: Infotainment +- skipDeployment: false +``` + +The rule will get the Service Detected Name (current name) and it will extract (with a regex) the part of the kubernetes namespace after the "-", so -prod or -e2e, resulting in: +*DataDownloadV1 - prod* +*DataDownloadV1 - e2e* + +Now, services will be easy to identify. + +You can create rules based on any property/metadata. Some other placeholder's eamples: +{Service:DatabaseName} - E2E +{Service:WebServiceName} - {ProcessGroup:Kubernetes:microservice} - {ProcessGroup:Kubernetes:environment} +{Service:DetectedName} - {ProcessGroup:KubernetesContainerName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +{Service:DetectedName} - {ProcessGroup:SpringBootProfileName/[^\\-]*$} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_timer-service/conditional-naming-service/conditional-naming-service.yaml b/BMW-Dynatrace-config/CD_timer-service/conditional-naming-service/conditional-naming-service.yaml new file mode 100644 index 00000000..3eb1c516 --- /dev/null +++ b/BMW-Dynatrace-config/CD_timer-service/conditional-naming-service/conditional-naming-service.yaml @@ -0,0 +1,8 @@ +config: +- CDtimer-service: template.json + +CDtimer-service: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: timer-service +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_timer-service/conditional-naming-service/template.json b/BMW-Dynatrace-config/CD_timer-service/conditional-naming-service/template.json new file mode 100644 index 00000000..5d4fac56 --- /dev/null +++ b/BMW-Dynatrace-config/CD_timer-service/conditional-naming-service/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "type": "SERVICE" +} \ 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 index d41c4c77..5f35e5c1 100644 --- a/BMW-Dynatrace-config/CD_timer-service/custom-service-java/README.md +++ b/BMW-Dynatrace-config/CD_timer-service/custom-service-java/README.md @@ -1,30 +1,4 @@ -## 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 configure custom services? -## 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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Custom+Services) page to configure your custom services. \ 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 index 92e734fa..1695924c 100644 --- a/BMW-Dynatrace-config/CD_timer-service/synthetic-monitor/README.md +++ b/BMW-Dynatrace-config/CD_timer-service/synthetic-monitor/README.md @@ -1,37 +1,4 @@ -# Synthetic Configuration -To calculate the Availability KPI, a synthetic must be configured. +### How to configure synthetics? -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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Synthetic+Monitors) page to configure your synthetics. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_timers-processor/conditional-naming-processgroup/README.md b/BMW-Dynatrace-config/CD_timers-processor/conditional-naming-processgroup/README.md new file mode 100644 index 00000000..f94196a5 --- /dev/null +++ b/BMW-Dynatrace-config/CD_timers-processor/conditional-naming-processgroup/README.md @@ -0,0 +1,67 @@ +### Process Group Detection Rules and Naming + +#### Detection Rule or Naming? + +For the explanation, we're using a real example of the Infotainment application: + +!(PGNaming1)[../../../../img/PGNaming1.PNG] + +Before working with your dashboards and alerting profiles, an important task to do when working with Dynatrace is checking +the structure of your applications (process groups). You can do that clicking under *technologies* and filter using your +application Management Zone. + +In the picture above, there are two Process Groups called bon-information-prod. **If you see duplicated process groups like in** +**this case, you MUST follow this guideline** + +Next step would be to open both process groups and compare the metadata. In that way, you can identify if all process instances are +part of the same application or not. An easy way to do that is asking yourself: how many instances of my application do i have? + +If you have 4 instances in total and you're able to see 2 in one PG and other 2 in other PG it means that **they are part of the ** +**same application** + +Another situation could be that checking on the metadata, then you see that are **two different application** and Dynatrace is just naming +the process group in the same way + +*Same application* +- Problem: Dynatrace is creating two different process groups, what transalates in two separated services for the same application. Instead of +seeing all the traffic in one service, you will have it splitted and it will complicate your monitoring +- Solution: create a process group detection rule. Contact Dynatrace Expert + +*Different application* +- Problem: Dynatrace is just naming in the same way applications that are different. +- Solution: This case is less severe, since it can be fixed with a process group naming rule. + + +What about our example? +!(PGNaming2)[../../../../img/PGNaming2.PNG] +!(PGNaming3)[../../../../img/PGNaming3.PNG] + +Based on the feedback of the infotaiment team, each process group is a different application (microservice) and it's visible in the kubernetes container/workload +within the metadata of each Process Group. + +#### How to create a Process Group Detection Rule +1. Open the *conditional-naming-processgroup.yaml* file and create a rule that looks like this: +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName} +- tag: Infotainment +- skipDeployment: false +``` +The result of the rule will be renaming the PG to this: +``` +bon-information-prod ipa +bon-information-prod rsl +``` + +Other possible placeholders that you can use are for example: +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName/[^\\-]*$} +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesFullPodName/buffet-(.*?)-} +{ProcessGroup:DetectedName} - {HostGroup:Name/[^\\_]*$} +{ProcessGroup:KubernetesNamespace} +{ProcessGroup:CommandLineArgs/.*?\\-f\\s\\/www\\/(.*?)\\/generated\\/httpd\\.conf.*?} + +You can combine different ones. Check the (documentation)[link] for more \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_timers-processor/conditional-naming-processgroup/conditional-naming-processgroup.yaml b/BMW-Dynatrace-config/CD_timers-processor/conditional-naming-processgroup/conditional-naming-processgroup.yaml new file mode 100644 index 00000000..05f8ded4 --- /dev/null +++ b/BMW-Dynatrace-config/CD_timers-processor/conditional-naming-processgroup/conditional-naming-processgroup.yaml @@ -0,0 +1,8 @@ +config: +- CDtimers-processor: template.json + +CDtimers-processor: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: timers-processor +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_timers-processor/conditional-naming-processgroup/template.json b/BMW-Dynatrace-config/CD_timers-processor/conditional-naming-processgroup/template.json new file mode 100644 index 00000000..7c039808 --- /dev/null +++ b/BMW-Dynatrace-config/CD_timers-processor/conditional-naming-processgroup/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "type": "PROCESS_GROUP" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_timers-processor/conditional-naming-service/README.md b/BMW-Dynatrace-config/CD_timers-processor/conditional-naming-service/README.md new file mode 100644 index 00000000..c34ef308 --- /dev/null +++ b/BMW-Dynatrace-config/CD_timers-processor/conditional-naming-service/README.md @@ -0,0 +1,35 @@ +### Service Naming Rules + +A typical case could be that you access to *Transaction & Services* and you find two services that are exactly the same: +*DataDownloadV1* +*DataDownloadV1* + +If you drilldown into the service and you check in the process group, you may have a PROD and a E2E for each service. + +*Note: if you see that both process group are exactly the same, please contact a Dynatrace expert to create a Process* +*Group detection rule* + +In the case the PG are PROD and E2E, then we need to create a rule that looks like this: + +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {Service:DetectedName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +- tag: Infotainment +- skipDeployment: false +``` + +The rule will get the Service Detected Name (current name) and it will extract (with a regex) the part of the kubernetes namespace after the "-", so -prod or -e2e, resulting in: +*DataDownloadV1 - prod* +*DataDownloadV1 - e2e* + +Now, services will be easy to identify. + +You can create rules based on any property/metadata. Some other placeholder's eamples: +{Service:DatabaseName} - E2E +{Service:WebServiceName} - {ProcessGroup:Kubernetes:microservice} - {ProcessGroup:Kubernetes:environment} +{Service:DetectedName} - {ProcessGroup:KubernetesContainerName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +{Service:DetectedName} - {ProcessGroup:SpringBootProfileName/[^\\-]*$} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_timers-processor/conditional-naming-service/conditional-naming-service.yaml b/BMW-Dynatrace-config/CD_timers-processor/conditional-naming-service/conditional-naming-service.yaml new file mode 100644 index 00000000..05f8ded4 --- /dev/null +++ b/BMW-Dynatrace-config/CD_timers-processor/conditional-naming-service/conditional-naming-service.yaml @@ -0,0 +1,8 @@ +config: +- CDtimers-processor: template.json + +CDtimers-processor: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: timers-processor +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_timers-processor/conditional-naming-service/template.json b/BMW-Dynatrace-config/CD_timers-processor/conditional-naming-service/template.json new file mode 100644 index 00000000..5d4fac56 --- /dev/null +++ b/BMW-Dynatrace-config/CD_timers-processor/conditional-naming-service/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "type": "SERVICE" +} \ 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 index d41c4c77..5f35e5c1 100644 --- a/BMW-Dynatrace-config/CD_timers-processor/custom-service-java/README.md +++ b/BMW-Dynatrace-config/CD_timers-processor/custom-service-java/README.md @@ -1,30 +1,4 @@ -## 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 configure custom services? -## 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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Custom+Services) page to configure your custom services. \ 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 index 92e734fa..1695924c 100644 --- a/BMW-Dynatrace-config/CD_timers-processor/synthetic-monitor/README.md +++ b/BMW-Dynatrace-config/CD_timers-processor/synthetic-monitor/README.md @@ -1,37 +1,4 @@ -# Synthetic Configuration -To calculate the Availability KPI, a synthetic must be configured. +### How to configure synthetics? -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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Synthetic+Monitors) page to configure your synthetics. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_token-exchanger-service/conditional-naming-processgroup/README.md b/BMW-Dynatrace-config/CD_token-exchanger-service/conditional-naming-processgroup/README.md new file mode 100644 index 00000000..f94196a5 --- /dev/null +++ b/BMW-Dynatrace-config/CD_token-exchanger-service/conditional-naming-processgroup/README.md @@ -0,0 +1,67 @@ +### Process Group Detection Rules and Naming + +#### Detection Rule or Naming? + +For the explanation, we're using a real example of the Infotainment application: + +!(PGNaming1)[../../../../img/PGNaming1.PNG] + +Before working with your dashboards and alerting profiles, an important task to do when working with Dynatrace is checking +the structure of your applications (process groups). You can do that clicking under *technologies* and filter using your +application Management Zone. + +In the picture above, there are two Process Groups called bon-information-prod. **If you see duplicated process groups like in** +**this case, you MUST follow this guideline** + +Next step would be to open both process groups and compare the metadata. In that way, you can identify if all process instances are +part of the same application or not. An easy way to do that is asking yourself: how many instances of my application do i have? + +If you have 4 instances in total and you're able to see 2 in one PG and other 2 in other PG it means that **they are part of the ** +**same application** + +Another situation could be that checking on the metadata, then you see that are **two different application** and Dynatrace is just naming +the process group in the same way + +*Same application* +- Problem: Dynatrace is creating two different process groups, what transalates in two separated services for the same application. Instead of +seeing all the traffic in one service, you will have it splitted and it will complicate your monitoring +- Solution: create a process group detection rule. Contact Dynatrace Expert + +*Different application* +- Problem: Dynatrace is just naming in the same way applications that are different. +- Solution: This case is less severe, since it can be fixed with a process group naming rule. + + +What about our example? +!(PGNaming2)[../../../../img/PGNaming2.PNG] +!(PGNaming3)[../../../../img/PGNaming3.PNG] + +Based on the feedback of the infotaiment team, each process group is a different application (microservice) and it's visible in the kubernetes container/workload +within the metadata of each Process Group. + +#### How to create a Process Group Detection Rule +1. Open the *conditional-naming-processgroup.yaml* file and create a rule that looks like this: +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName} +- tag: Infotainment +- skipDeployment: false +``` +The result of the rule will be renaming the PG to this: +``` +bon-information-prod ipa +bon-information-prod rsl +``` + +Other possible placeholders that you can use are for example: +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName/[^\\-]*$} +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesFullPodName/buffet-(.*?)-} +{ProcessGroup:DetectedName} - {HostGroup:Name/[^\\_]*$} +{ProcessGroup:KubernetesNamespace} +{ProcessGroup:CommandLineArgs/.*?\\-f\\s\\/www\\/(.*?)\\/generated\\/httpd\\.conf.*?} + +You can combine different ones. Check the (documentation)[link] for more \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_token-exchanger-service/conditional-naming-processgroup/conditional-naming-processgroup.yaml b/BMW-Dynatrace-config/CD_token-exchanger-service/conditional-naming-processgroup/conditional-naming-processgroup.yaml new file mode 100644 index 00000000..66eb8f76 --- /dev/null +++ b/BMW-Dynatrace-config/CD_token-exchanger-service/conditional-naming-processgroup/conditional-naming-processgroup.yaml @@ -0,0 +1,8 @@ +config: +- CDtoken-exchanger-service: template.json + +CDtoken-exchanger-service: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: token-exchanger-service +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_token-exchanger-service/conditional-naming-processgroup/template.json b/BMW-Dynatrace-config/CD_token-exchanger-service/conditional-naming-processgroup/template.json new file mode 100644 index 00000000..7c039808 --- /dev/null +++ b/BMW-Dynatrace-config/CD_token-exchanger-service/conditional-naming-processgroup/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "type": "PROCESS_GROUP" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_token-exchanger-service/conditional-naming-service/README.md b/BMW-Dynatrace-config/CD_token-exchanger-service/conditional-naming-service/README.md new file mode 100644 index 00000000..c34ef308 --- /dev/null +++ b/BMW-Dynatrace-config/CD_token-exchanger-service/conditional-naming-service/README.md @@ -0,0 +1,35 @@ +### Service Naming Rules + +A typical case could be that you access to *Transaction & Services* and you find two services that are exactly the same: +*DataDownloadV1* +*DataDownloadV1* + +If you drilldown into the service and you check in the process group, you may have a PROD and a E2E for each service. + +*Note: if you see that both process group are exactly the same, please contact a Dynatrace expert to create a Process* +*Group detection rule* + +In the case the PG are PROD and E2E, then we need to create a rule that looks like this: + +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {Service:DetectedName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +- tag: Infotainment +- skipDeployment: false +``` + +The rule will get the Service Detected Name (current name) and it will extract (with a regex) the part of the kubernetes namespace after the "-", so -prod or -e2e, resulting in: +*DataDownloadV1 - prod* +*DataDownloadV1 - e2e* + +Now, services will be easy to identify. + +You can create rules based on any property/metadata. Some other placeholder's eamples: +{Service:DatabaseName} - E2E +{Service:WebServiceName} - {ProcessGroup:Kubernetes:microservice} - {ProcessGroup:Kubernetes:environment} +{Service:DetectedName} - {ProcessGroup:KubernetesContainerName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +{Service:DetectedName} - {ProcessGroup:SpringBootProfileName/[^\\-]*$} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_token-exchanger-service/conditional-naming-service/conditional-naming-service.yaml b/BMW-Dynatrace-config/CD_token-exchanger-service/conditional-naming-service/conditional-naming-service.yaml new file mode 100644 index 00000000..66eb8f76 --- /dev/null +++ b/BMW-Dynatrace-config/CD_token-exchanger-service/conditional-naming-service/conditional-naming-service.yaml @@ -0,0 +1,8 @@ +config: +- CDtoken-exchanger-service: template.json + +CDtoken-exchanger-service: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: token-exchanger-service +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_token-exchanger-service/conditional-naming-service/template.json b/BMW-Dynatrace-config/CD_token-exchanger-service/conditional-naming-service/template.json new file mode 100644 index 00000000..5d4fac56 --- /dev/null +++ b/BMW-Dynatrace-config/CD_token-exchanger-service/conditional-naming-service/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "type": "SERVICE" +} \ 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 index d41c4c77..5f35e5c1 100644 --- 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 @@ -1,30 +1,4 @@ -## 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 configure custom services? -## 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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Custom+Services) page to configure your custom services. \ 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 index 92e734fa..1695924c 100644 --- a/BMW-Dynatrace-config/CD_token-exchanger-service/synthetic-monitor/README.md +++ b/BMW-Dynatrace-config/CD_token-exchanger-service/synthetic-monitor/README.md @@ -1,37 +1,4 @@ -# Synthetic Configuration -To calculate the Availability KPI, a synthetic must be configured. +### How to configure synthetics? -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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Synthetic+Monitors) page to configure your synthetics. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_tol-mgu/conditional-naming-processgroup/README.md b/BMW-Dynatrace-config/CD_tol-mgu/conditional-naming-processgroup/README.md new file mode 100644 index 00000000..f94196a5 --- /dev/null +++ b/BMW-Dynatrace-config/CD_tol-mgu/conditional-naming-processgroup/README.md @@ -0,0 +1,67 @@ +### Process Group Detection Rules and Naming + +#### Detection Rule or Naming? + +For the explanation, we're using a real example of the Infotainment application: + +!(PGNaming1)[../../../../img/PGNaming1.PNG] + +Before working with your dashboards and alerting profiles, an important task to do when working with Dynatrace is checking +the structure of your applications (process groups). You can do that clicking under *technologies* and filter using your +application Management Zone. + +In the picture above, there are two Process Groups called bon-information-prod. **If you see duplicated process groups like in** +**this case, you MUST follow this guideline** + +Next step would be to open both process groups and compare the metadata. In that way, you can identify if all process instances are +part of the same application or not. An easy way to do that is asking yourself: how many instances of my application do i have? + +If you have 4 instances in total and you're able to see 2 in one PG and other 2 in other PG it means that **they are part of the ** +**same application** + +Another situation could be that checking on the metadata, then you see that are **two different application** and Dynatrace is just naming +the process group in the same way + +*Same application* +- Problem: Dynatrace is creating two different process groups, what transalates in two separated services for the same application. Instead of +seeing all the traffic in one service, you will have it splitted and it will complicate your monitoring +- Solution: create a process group detection rule. Contact Dynatrace Expert + +*Different application* +- Problem: Dynatrace is just naming in the same way applications that are different. +- Solution: This case is less severe, since it can be fixed with a process group naming rule. + + +What about our example? +!(PGNaming2)[../../../../img/PGNaming2.PNG] +!(PGNaming3)[../../../../img/PGNaming3.PNG] + +Based on the feedback of the infotaiment team, each process group is a different application (microservice) and it's visible in the kubernetes container/workload +within the metadata of each Process Group. + +#### How to create a Process Group Detection Rule +1. Open the *conditional-naming-processgroup.yaml* file and create a rule that looks like this: +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName} +- tag: Infotainment +- skipDeployment: false +``` +The result of the rule will be renaming the PG to this: +``` +bon-information-prod ipa +bon-information-prod rsl +``` + +Other possible placeholders that you can use are for example: +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName/[^\\-]*$} +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesFullPodName/buffet-(.*?)-} +{ProcessGroup:DetectedName} - {HostGroup:Name/[^\\_]*$} +{ProcessGroup:KubernetesNamespace} +{ProcessGroup:CommandLineArgs/.*?\\-f\\s\\/www\\/(.*?)\\/generated\\/httpd\\.conf.*?} + +You can combine different ones. Check the (documentation)[link] for more \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_tol-mgu/conditional-naming-processgroup/conditional-naming-processgroup.yaml b/BMW-Dynatrace-config/CD_tol-mgu/conditional-naming-processgroup/conditional-naming-processgroup.yaml new file mode 100644 index 00000000..00067d27 --- /dev/null +++ b/BMW-Dynatrace-config/CD_tol-mgu/conditional-naming-processgroup/conditional-naming-processgroup.yaml @@ -0,0 +1,8 @@ +config: +- CDtol-mgu: template.json + +CDtol-mgu: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: tol-mgu +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_tol-mgu/conditional-naming-processgroup/template.json b/BMW-Dynatrace-config/CD_tol-mgu/conditional-naming-processgroup/template.json new file mode 100644 index 00000000..7c039808 --- /dev/null +++ b/BMW-Dynatrace-config/CD_tol-mgu/conditional-naming-processgroup/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "type": "PROCESS_GROUP" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_tol-mgu/conditional-naming-service/README.md b/BMW-Dynatrace-config/CD_tol-mgu/conditional-naming-service/README.md new file mode 100644 index 00000000..c34ef308 --- /dev/null +++ b/BMW-Dynatrace-config/CD_tol-mgu/conditional-naming-service/README.md @@ -0,0 +1,35 @@ +### Service Naming Rules + +A typical case could be that you access to *Transaction & Services* and you find two services that are exactly the same: +*DataDownloadV1* +*DataDownloadV1* + +If you drilldown into the service and you check in the process group, you may have a PROD and a E2E for each service. + +*Note: if you see that both process group are exactly the same, please contact a Dynatrace expert to create a Process* +*Group detection rule* + +In the case the PG are PROD and E2E, then we need to create a rule that looks like this: + +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {Service:DetectedName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +- tag: Infotainment +- skipDeployment: false +``` + +The rule will get the Service Detected Name (current name) and it will extract (with a regex) the part of the kubernetes namespace after the "-", so -prod or -e2e, resulting in: +*DataDownloadV1 - prod* +*DataDownloadV1 - e2e* + +Now, services will be easy to identify. + +You can create rules based on any property/metadata. Some other placeholder's eamples: +{Service:DatabaseName} - E2E +{Service:WebServiceName} - {ProcessGroup:Kubernetes:microservice} - {ProcessGroup:Kubernetes:environment} +{Service:DetectedName} - {ProcessGroup:KubernetesContainerName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +{Service:DetectedName} - {ProcessGroup:SpringBootProfileName/[^\\-]*$} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_tol-mgu/conditional-naming-service/conditional-naming-service.yaml b/BMW-Dynatrace-config/CD_tol-mgu/conditional-naming-service/conditional-naming-service.yaml new file mode 100644 index 00000000..00067d27 --- /dev/null +++ b/BMW-Dynatrace-config/CD_tol-mgu/conditional-naming-service/conditional-naming-service.yaml @@ -0,0 +1,8 @@ +config: +- CDtol-mgu: template.json + +CDtol-mgu: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: tol-mgu +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_tol-mgu/conditional-naming-service/template.json b/BMW-Dynatrace-config/CD_tol-mgu/conditional-naming-service/template.json new file mode 100644 index 00000000..5d4fac56 --- /dev/null +++ b/BMW-Dynatrace-config/CD_tol-mgu/conditional-naming-service/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "type": "SERVICE" +} \ 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 index d41c4c77..5f35e5c1 100644 --- a/BMW-Dynatrace-config/CD_tol-mgu/custom-service-java/README.md +++ b/BMW-Dynatrace-config/CD_tol-mgu/custom-service-java/README.md @@ -1,30 +1,4 @@ -## 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 configure custom services? -## 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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Custom+Services) page to configure your custom services. \ 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 index 92e734fa..1695924c 100644 --- a/BMW-Dynatrace-config/CD_tol-mgu/synthetic-monitor/README.md +++ b/BMW-Dynatrace-config/CD_tol-mgu/synthetic-monitor/README.md @@ -1,37 +1,4 @@ -# Synthetic Configuration -To calculate the Availability KPI, a synthetic must be configured. +### How to configure synthetics? -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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Synthetic+Monitors) page to configure your synthetics. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_tol-tssb/conditional-naming-processgroup/README.md b/BMW-Dynatrace-config/CD_tol-tssb/conditional-naming-processgroup/README.md new file mode 100644 index 00000000..f94196a5 --- /dev/null +++ b/BMW-Dynatrace-config/CD_tol-tssb/conditional-naming-processgroup/README.md @@ -0,0 +1,67 @@ +### Process Group Detection Rules and Naming + +#### Detection Rule or Naming? + +For the explanation, we're using a real example of the Infotainment application: + +!(PGNaming1)[../../../../img/PGNaming1.PNG] + +Before working with your dashboards and alerting profiles, an important task to do when working with Dynatrace is checking +the structure of your applications (process groups). You can do that clicking under *technologies* and filter using your +application Management Zone. + +In the picture above, there are two Process Groups called bon-information-prod. **If you see duplicated process groups like in** +**this case, you MUST follow this guideline** + +Next step would be to open both process groups and compare the metadata. In that way, you can identify if all process instances are +part of the same application or not. An easy way to do that is asking yourself: how many instances of my application do i have? + +If you have 4 instances in total and you're able to see 2 in one PG and other 2 in other PG it means that **they are part of the ** +**same application** + +Another situation could be that checking on the metadata, then you see that are **two different application** and Dynatrace is just naming +the process group in the same way + +*Same application* +- Problem: Dynatrace is creating two different process groups, what transalates in two separated services for the same application. Instead of +seeing all the traffic in one service, you will have it splitted and it will complicate your monitoring +- Solution: create a process group detection rule. Contact Dynatrace Expert + +*Different application* +- Problem: Dynatrace is just naming in the same way applications that are different. +- Solution: This case is less severe, since it can be fixed with a process group naming rule. + + +What about our example? +!(PGNaming2)[../../../../img/PGNaming2.PNG] +!(PGNaming3)[../../../../img/PGNaming3.PNG] + +Based on the feedback of the infotaiment team, each process group is a different application (microservice) and it's visible in the kubernetes container/workload +within the metadata of each Process Group. + +#### How to create a Process Group Detection Rule +1. Open the *conditional-naming-processgroup.yaml* file and create a rule that looks like this: +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName} +- tag: Infotainment +- skipDeployment: false +``` +The result of the rule will be renaming the PG to this: +``` +bon-information-prod ipa +bon-information-prod rsl +``` + +Other possible placeholders that you can use are for example: +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName/[^\\-]*$} +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesFullPodName/buffet-(.*?)-} +{ProcessGroup:DetectedName} - {HostGroup:Name/[^\\_]*$} +{ProcessGroup:KubernetesNamespace} +{ProcessGroup:CommandLineArgs/.*?\\-f\\s\\/www\\/(.*?)\\/generated\\/httpd\\.conf.*?} + +You can combine different ones. Check the (documentation)[link] for more \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_tol-tssb/conditional-naming-processgroup/conditional-naming-processgroup.yaml b/BMW-Dynatrace-config/CD_tol-tssb/conditional-naming-processgroup/conditional-naming-processgroup.yaml new file mode 100644 index 00000000..7177f1e2 --- /dev/null +++ b/BMW-Dynatrace-config/CD_tol-tssb/conditional-naming-processgroup/conditional-naming-processgroup.yaml @@ -0,0 +1,8 @@ +config: +- CDtol-tssb: template.json + +CDtol-tssb: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: tol-tssb +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_tol-tssb/conditional-naming-processgroup/template.json b/BMW-Dynatrace-config/CD_tol-tssb/conditional-naming-processgroup/template.json new file mode 100644 index 00000000..7c039808 --- /dev/null +++ b/BMW-Dynatrace-config/CD_tol-tssb/conditional-naming-processgroup/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "type": "PROCESS_GROUP" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_tol-tssb/conditional-naming-service/README.md b/BMW-Dynatrace-config/CD_tol-tssb/conditional-naming-service/README.md new file mode 100644 index 00000000..c34ef308 --- /dev/null +++ b/BMW-Dynatrace-config/CD_tol-tssb/conditional-naming-service/README.md @@ -0,0 +1,35 @@ +### Service Naming Rules + +A typical case could be that you access to *Transaction & Services* and you find two services that are exactly the same: +*DataDownloadV1* +*DataDownloadV1* + +If you drilldown into the service and you check in the process group, you may have a PROD and a E2E for each service. + +*Note: if you see that both process group are exactly the same, please contact a Dynatrace expert to create a Process* +*Group detection rule* + +In the case the PG are PROD and E2E, then we need to create a rule that looks like this: + +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {Service:DetectedName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +- tag: Infotainment +- skipDeployment: false +``` + +The rule will get the Service Detected Name (current name) and it will extract (with a regex) the part of the kubernetes namespace after the "-", so -prod or -e2e, resulting in: +*DataDownloadV1 - prod* +*DataDownloadV1 - e2e* + +Now, services will be easy to identify. + +You can create rules based on any property/metadata. Some other placeholder's eamples: +{Service:DatabaseName} - E2E +{Service:WebServiceName} - {ProcessGroup:Kubernetes:microservice} - {ProcessGroup:Kubernetes:environment} +{Service:DetectedName} - {ProcessGroup:KubernetesContainerName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +{Service:DetectedName} - {ProcessGroup:SpringBootProfileName/[^\\-]*$} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_tol-tssb/conditional-naming-service/conditional-naming-service.yaml b/BMW-Dynatrace-config/CD_tol-tssb/conditional-naming-service/conditional-naming-service.yaml new file mode 100644 index 00000000..7177f1e2 --- /dev/null +++ b/BMW-Dynatrace-config/CD_tol-tssb/conditional-naming-service/conditional-naming-service.yaml @@ -0,0 +1,8 @@ +config: +- CDtol-tssb: template.json + +CDtol-tssb: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: tol-tssb +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_tol-tssb/conditional-naming-service/template.json b/BMW-Dynatrace-config/CD_tol-tssb/conditional-naming-service/template.json new file mode 100644 index 00000000..5d4fac56 --- /dev/null +++ b/BMW-Dynatrace-config/CD_tol-tssb/conditional-naming-service/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "type": "SERVICE" +} \ 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 index d41c4c77..5f35e5c1 100644 --- a/BMW-Dynatrace-config/CD_tol-tssb/custom-service-java/README.md +++ b/BMW-Dynatrace-config/CD_tol-tssb/custom-service-java/README.md @@ -1,30 +1,4 @@ -## 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 configure custom services? -## 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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Custom+Services) page to configure your custom services. \ 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 index 92e734fa..1695924c 100644 --- a/BMW-Dynatrace-config/CD_tol-tssb/synthetic-monitor/README.md +++ b/BMW-Dynatrace-config/CD_tol-tssb/synthetic-monitor/README.md @@ -1,37 +1,4 @@ -# Synthetic Configuration -To calculate the Availability KPI, a synthetic must be configured. +### How to configure synthetics? -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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Synthetic+Monitors) page to configure your synthetics. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_tol/conditional-naming-processgroup/README.md b/BMW-Dynatrace-config/CD_tol/conditional-naming-processgroup/README.md new file mode 100644 index 00000000..f94196a5 --- /dev/null +++ b/BMW-Dynatrace-config/CD_tol/conditional-naming-processgroup/README.md @@ -0,0 +1,67 @@ +### Process Group Detection Rules and Naming + +#### Detection Rule or Naming? + +For the explanation, we're using a real example of the Infotainment application: + +!(PGNaming1)[../../../../img/PGNaming1.PNG] + +Before working with your dashboards and alerting profiles, an important task to do when working with Dynatrace is checking +the structure of your applications (process groups). You can do that clicking under *technologies* and filter using your +application Management Zone. + +In the picture above, there are two Process Groups called bon-information-prod. **If you see duplicated process groups like in** +**this case, you MUST follow this guideline** + +Next step would be to open both process groups and compare the metadata. In that way, you can identify if all process instances are +part of the same application or not. An easy way to do that is asking yourself: how many instances of my application do i have? + +If you have 4 instances in total and you're able to see 2 in one PG and other 2 in other PG it means that **they are part of the ** +**same application** + +Another situation could be that checking on the metadata, then you see that are **two different application** and Dynatrace is just naming +the process group in the same way + +*Same application* +- Problem: Dynatrace is creating two different process groups, what transalates in two separated services for the same application. Instead of +seeing all the traffic in one service, you will have it splitted and it will complicate your monitoring +- Solution: create a process group detection rule. Contact Dynatrace Expert + +*Different application* +- Problem: Dynatrace is just naming in the same way applications that are different. +- Solution: This case is less severe, since it can be fixed with a process group naming rule. + + +What about our example? +!(PGNaming2)[../../../../img/PGNaming2.PNG] +!(PGNaming3)[../../../../img/PGNaming3.PNG] + +Based on the feedback of the infotaiment team, each process group is a different application (microservice) and it's visible in the kubernetes container/workload +within the metadata of each Process Group. + +#### How to create a Process Group Detection Rule +1. Open the *conditional-naming-processgroup.yaml* file and create a rule that looks like this: +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName} +- tag: Infotainment +- skipDeployment: false +``` +The result of the rule will be renaming the PG to this: +``` +bon-information-prod ipa +bon-information-prod rsl +``` + +Other possible placeholders that you can use are for example: +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName/[^\\-]*$} +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesFullPodName/buffet-(.*?)-} +{ProcessGroup:DetectedName} - {HostGroup:Name/[^\\_]*$} +{ProcessGroup:KubernetesNamespace} +{ProcessGroup:CommandLineArgs/.*?\\-f\\s\\/www\\/(.*?)\\/generated\\/httpd\\.conf.*?} + +You can combine different ones. Check the (documentation)[link] for more \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_tol/conditional-naming-processgroup/conditional-naming-processgroup.yaml b/BMW-Dynatrace-config/CD_tol/conditional-naming-processgroup/conditional-naming-processgroup.yaml new file mode 100644 index 00000000..4b56f6fa --- /dev/null +++ b/BMW-Dynatrace-config/CD_tol/conditional-naming-processgroup/conditional-naming-processgroup.yaml @@ -0,0 +1,8 @@ +config: +- CDtol: template.json + +CDtol: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: tol +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_tol/conditional-naming-processgroup/template.json b/BMW-Dynatrace-config/CD_tol/conditional-naming-processgroup/template.json new file mode 100644 index 00000000..7c039808 --- /dev/null +++ b/BMW-Dynatrace-config/CD_tol/conditional-naming-processgroup/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "type": "PROCESS_GROUP" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_tol/conditional-naming-service/README.md b/BMW-Dynatrace-config/CD_tol/conditional-naming-service/README.md new file mode 100644 index 00000000..c34ef308 --- /dev/null +++ b/BMW-Dynatrace-config/CD_tol/conditional-naming-service/README.md @@ -0,0 +1,35 @@ +### Service Naming Rules + +A typical case could be that you access to *Transaction & Services* and you find two services that are exactly the same: +*DataDownloadV1* +*DataDownloadV1* + +If you drilldown into the service and you check in the process group, you may have a PROD and a E2E for each service. + +*Note: if you see that both process group are exactly the same, please contact a Dynatrace expert to create a Process* +*Group detection rule* + +In the case the PG are PROD and E2E, then we need to create a rule that looks like this: + +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {Service:DetectedName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +- tag: Infotainment +- skipDeployment: false +``` + +The rule will get the Service Detected Name (current name) and it will extract (with a regex) the part of the kubernetes namespace after the "-", so -prod or -e2e, resulting in: +*DataDownloadV1 - prod* +*DataDownloadV1 - e2e* + +Now, services will be easy to identify. + +You can create rules based on any property/metadata. Some other placeholder's eamples: +{Service:DatabaseName} - E2E +{Service:WebServiceName} - {ProcessGroup:Kubernetes:microservice} - {ProcessGroup:Kubernetes:environment} +{Service:DetectedName} - {ProcessGroup:KubernetesContainerName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +{Service:DetectedName} - {ProcessGroup:SpringBootProfileName/[^\\-]*$} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_tol/conditional-naming-service/conditional-naming-service.yaml b/BMW-Dynatrace-config/CD_tol/conditional-naming-service/conditional-naming-service.yaml new file mode 100644 index 00000000..4b56f6fa --- /dev/null +++ b/BMW-Dynatrace-config/CD_tol/conditional-naming-service/conditional-naming-service.yaml @@ -0,0 +1,8 @@ +config: +- CDtol: template.json + +CDtol: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: tol +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_tol/conditional-naming-service/template.json b/BMW-Dynatrace-config/CD_tol/conditional-naming-service/template.json new file mode 100644 index 00000000..5d4fac56 --- /dev/null +++ b/BMW-Dynatrace-config/CD_tol/conditional-naming-service/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "type": "SERVICE" +} \ 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 index d41c4c77..5f35e5c1 100644 --- a/BMW-Dynatrace-config/CD_tol/custom-service-java/README.md +++ b/BMW-Dynatrace-config/CD_tol/custom-service-java/README.md @@ -1,30 +1,4 @@ -## 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 configure custom services? -## 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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Custom+Services) page to configure your custom services. \ 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 index 92e734fa..1695924c 100644 --- a/BMW-Dynatrace-config/CD_tol/synthetic-monitor/README.md +++ b/BMW-Dynatrace-config/CD_tol/synthetic-monitor/README.md @@ -1,37 +1,4 @@ -# Synthetic Configuration -To calculate the Availability KPI, a synthetic must be configured. +### How to configure synthetics? -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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Synthetic+Monitors) page to configure your synthetics. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_trip-change-processor/conditional-naming-processgroup/README.md b/BMW-Dynatrace-config/CD_trip-change-processor/conditional-naming-processgroup/README.md new file mode 100644 index 00000000..f94196a5 --- /dev/null +++ b/BMW-Dynatrace-config/CD_trip-change-processor/conditional-naming-processgroup/README.md @@ -0,0 +1,67 @@ +### Process Group Detection Rules and Naming + +#### Detection Rule or Naming? + +For the explanation, we're using a real example of the Infotainment application: + +!(PGNaming1)[../../../../img/PGNaming1.PNG] + +Before working with your dashboards and alerting profiles, an important task to do when working with Dynatrace is checking +the structure of your applications (process groups). You can do that clicking under *technologies* and filter using your +application Management Zone. + +In the picture above, there are two Process Groups called bon-information-prod. **If you see duplicated process groups like in** +**this case, you MUST follow this guideline** + +Next step would be to open both process groups and compare the metadata. In that way, you can identify if all process instances are +part of the same application or not. An easy way to do that is asking yourself: how many instances of my application do i have? + +If you have 4 instances in total and you're able to see 2 in one PG and other 2 in other PG it means that **they are part of the ** +**same application** + +Another situation could be that checking on the metadata, then you see that are **two different application** and Dynatrace is just naming +the process group in the same way + +*Same application* +- Problem: Dynatrace is creating two different process groups, what transalates in two separated services for the same application. Instead of +seeing all the traffic in one service, you will have it splitted and it will complicate your monitoring +- Solution: create a process group detection rule. Contact Dynatrace Expert + +*Different application* +- Problem: Dynatrace is just naming in the same way applications that are different. +- Solution: This case is less severe, since it can be fixed with a process group naming rule. + + +What about our example? +!(PGNaming2)[../../../../img/PGNaming2.PNG] +!(PGNaming3)[../../../../img/PGNaming3.PNG] + +Based on the feedback of the infotaiment team, each process group is a different application (microservice) and it's visible in the kubernetes container/workload +within the metadata of each Process Group. + +#### How to create a Process Group Detection Rule +1. Open the *conditional-naming-processgroup.yaml* file and create a rule that looks like this: +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName} +- tag: Infotainment +- skipDeployment: false +``` +The result of the rule will be renaming the PG to this: +``` +bon-information-prod ipa +bon-information-prod rsl +``` + +Other possible placeholders that you can use are for example: +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName/[^\\-]*$} +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesFullPodName/buffet-(.*?)-} +{ProcessGroup:DetectedName} - {HostGroup:Name/[^\\_]*$} +{ProcessGroup:KubernetesNamespace} +{ProcessGroup:CommandLineArgs/.*?\\-f\\s\\/www\\/(.*?)\\/generated\\/httpd\\.conf.*?} + +You can combine different ones. Check the (documentation)[link] for more \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_trip-change-processor/conditional-naming-processgroup/conditional-naming-processgroup.yaml b/BMW-Dynatrace-config/CD_trip-change-processor/conditional-naming-processgroup/conditional-naming-processgroup.yaml new file mode 100644 index 00000000..d11a3951 --- /dev/null +++ b/BMW-Dynatrace-config/CD_trip-change-processor/conditional-naming-processgroup/conditional-naming-processgroup.yaml @@ -0,0 +1,8 @@ +config: +- CDtrip-change-processor: template.json + +CDtrip-change-processor: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: trip-change-processor +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_trip-change-processor/conditional-naming-processgroup/template.json b/BMW-Dynatrace-config/CD_trip-change-processor/conditional-naming-processgroup/template.json new file mode 100644 index 00000000..7c039808 --- /dev/null +++ b/BMW-Dynatrace-config/CD_trip-change-processor/conditional-naming-processgroup/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "type": "PROCESS_GROUP" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_trip-change-processor/conditional-naming-service/README.md b/BMW-Dynatrace-config/CD_trip-change-processor/conditional-naming-service/README.md new file mode 100644 index 00000000..c34ef308 --- /dev/null +++ b/BMW-Dynatrace-config/CD_trip-change-processor/conditional-naming-service/README.md @@ -0,0 +1,35 @@ +### Service Naming Rules + +A typical case could be that you access to *Transaction & Services* and you find two services that are exactly the same: +*DataDownloadV1* +*DataDownloadV1* + +If you drilldown into the service and you check in the process group, you may have a PROD and a E2E for each service. + +*Note: if you see that both process group are exactly the same, please contact a Dynatrace expert to create a Process* +*Group detection rule* + +In the case the PG are PROD and E2E, then we need to create a rule that looks like this: + +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {Service:DetectedName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +- tag: Infotainment +- skipDeployment: false +``` + +The rule will get the Service Detected Name (current name) and it will extract (with a regex) the part of the kubernetes namespace after the "-", so -prod or -e2e, resulting in: +*DataDownloadV1 - prod* +*DataDownloadV1 - e2e* + +Now, services will be easy to identify. + +You can create rules based on any property/metadata. Some other placeholder's eamples: +{Service:DatabaseName} - E2E +{Service:WebServiceName} - {ProcessGroup:Kubernetes:microservice} - {ProcessGroup:Kubernetes:environment} +{Service:DetectedName} - {ProcessGroup:KubernetesContainerName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +{Service:DetectedName} - {ProcessGroup:SpringBootProfileName/[^\\-]*$} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_trip-change-processor/conditional-naming-service/conditional-naming-service.yaml b/BMW-Dynatrace-config/CD_trip-change-processor/conditional-naming-service/conditional-naming-service.yaml new file mode 100644 index 00000000..d11a3951 --- /dev/null +++ b/BMW-Dynatrace-config/CD_trip-change-processor/conditional-naming-service/conditional-naming-service.yaml @@ -0,0 +1,8 @@ +config: +- CDtrip-change-processor: template.json + +CDtrip-change-processor: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: trip-change-processor +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_trip-change-processor/conditional-naming-service/template.json b/BMW-Dynatrace-config/CD_trip-change-processor/conditional-naming-service/template.json new file mode 100644 index 00000000..5d4fac56 --- /dev/null +++ b/BMW-Dynatrace-config/CD_trip-change-processor/conditional-naming-service/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "type": "SERVICE" +} \ 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 index d41c4c77..5f35e5c1 100644 --- 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 @@ -1,30 +1,4 @@ -## 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 configure custom services? -## 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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Custom+Services) page to configure your custom services. \ 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 index 92e734fa..1695924c 100644 --- a/BMW-Dynatrace-config/CD_trip-change-processor/synthetic-monitor/README.md +++ b/BMW-Dynatrace-config/CD_trip-change-processor/synthetic-monitor/README.md @@ -1,37 +1,4 @@ -# Synthetic Configuration -To calculate the Availability KPI, a synthetic must be configured. +### How to configure synthetics? -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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Synthetic+Monitors) page to configure your synthetics. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_trip-cleanup-app-service/conditional-naming-processgroup/README.md b/BMW-Dynatrace-config/CD_trip-cleanup-app-service/conditional-naming-processgroup/README.md new file mode 100644 index 00000000..f94196a5 --- /dev/null +++ b/BMW-Dynatrace-config/CD_trip-cleanup-app-service/conditional-naming-processgroup/README.md @@ -0,0 +1,67 @@ +### Process Group Detection Rules and Naming + +#### Detection Rule or Naming? + +For the explanation, we're using a real example of the Infotainment application: + +!(PGNaming1)[../../../../img/PGNaming1.PNG] + +Before working with your dashboards and alerting profiles, an important task to do when working with Dynatrace is checking +the structure of your applications (process groups). You can do that clicking under *technologies* and filter using your +application Management Zone. + +In the picture above, there are two Process Groups called bon-information-prod. **If you see duplicated process groups like in** +**this case, you MUST follow this guideline** + +Next step would be to open both process groups and compare the metadata. In that way, you can identify if all process instances are +part of the same application or not. An easy way to do that is asking yourself: how many instances of my application do i have? + +If you have 4 instances in total and you're able to see 2 in one PG and other 2 in other PG it means that **they are part of the ** +**same application** + +Another situation could be that checking on the metadata, then you see that are **two different application** and Dynatrace is just naming +the process group in the same way + +*Same application* +- Problem: Dynatrace is creating two different process groups, what transalates in two separated services for the same application. Instead of +seeing all the traffic in one service, you will have it splitted and it will complicate your monitoring +- Solution: create a process group detection rule. Contact Dynatrace Expert + +*Different application* +- Problem: Dynatrace is just naming in the same way applications that are different. +- Solution: This case is less severe, since it can be fixed with a process group naming rule. + + +What about our example? +!(PGNaming2)[../../../../img/PGNaming2.PNG] +!(PGNaming3)[../../../../img/PGNaming3.PNG] + +Based on the feedback of the infotaiment team, each process group is a different application (microservice) and it's visible in the kubernetes container/workload +within the metadata of each Process Group. + +#### How to create a Process Group Detection Rule +1. Open the *conditional-naming-processgroup.yaml* file and create a rule that looks like this: +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName} +- tag: Infotainment +- skipDeployment: false +``` +The result of the rule will be renaming the PG to this: +``` +bon-information-prod ipa +bon-information-prod rsl +``` + +Other possible placeholders that you can use are for example: +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName/[^\\-]*$} +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesFullPodName/buffet-(.*?)-} +{ProcessGroup:DetectedName} - {HostGroup:Name/[^\\_]*$} +{ProcessGroup:KubernetesNamespace} +{ProcessGroup:CommandLineArgs/.*?\\-f\\s\\/www\\/(.*?)\\/generated\\/httpd\\.conf.*?} + +You can combine different ones. Check the (documentation)[link] for more \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_trip-cleanup-app-service/conditional-naming-processgroup/conditional-naming-processgroup.yaml b/BMW-Dynatrace-config/CD_trip-cleanup-app-service/conditional-naming-processgroup/conditional-naming-processgroup.yaml new file mode 100644 index 00000000..144e9df6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_trip-cleanup-app-service/conditional-naming-processgroup/conditional-naming-processgroup.yaml @@ -0,0 +1,8 @@ +config: +- CDtrip-cleanup-app-service: template.json + +CDtrip-cleanup-app-service: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: trip-cleanup-app-service +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_trip-cleanup-app-service/conditional-naming-processgroup/template.json b/BMW-Dynatrace-config/CD_trip-cleanup-app-service/conditional-naming-processgroup/template.json new file mode 100644 index 00000000..7c039808 --- /dev/null +++ b/BMW-Dynatrace-config/CD_trip-cleanup-app-service/conditional-naming-processgroup/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "type": "PROCESS_GROUP" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_trip-cleanup-app-service/conditional-naming-service/README.md b/BMW-Dynatrace-config/CD_trip-cleanup-app-service/conditional-naming-service/README.md new file mode 100644 index 00000000..c34ef308 --- /dev/null +++ b/BMW-Dynatrace-config/CD_trip-cleanup-app-service/conditional-naming-service/README.md @@ -0,0 +1,35 @@ +### Service Naming Rules + +A typical case could be that you access to *Transaction & Services* and you find two services that are exactly the same: +*DataDownloadV1* +*DataDownloadV1* + +If you drilldown into the service and you check in the process group, you may have a PROD and a E2E for each service. + +*Note: if you see that both process group are exactly the same, please contact a Dynatrace expert to create a Process* +*Group detection rule* + +In the case the PG are PROD and E2E, then we need to create a rule that looks like this: + +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {Service:DetectedName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +- tag: Infotainment +- skipDeployment: false +``` + +The rule will get the Service Detected Name (current name) and it will extract (with a regex) the part of the kubernetes namespace after the "-", so -prod or -e2e, resulting in: +*DataDownloadV1 - prod* +*DataDownloadV1 - e2e* + +Now, services will be easy to identify. + +You can create rules based on any property/metadata. Some other placeholder's eamples: +{Service:DatabaseName} - E2E +{Service:WebServiceName} - {ProcessGroup:Kubernetes:microservice} - {ProcessGroup:Kubernetes:environment} +{Service:DetectedName} - {ProcessGroup:KubernetesContainerName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +{Service:DetectedName} - {ProcessGroup:SpringBootProfileName/[^\\-]*$} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_trip-cleanup-app-service/conditional-naming-service/conditional-naming-service.yaml b/BMW-Dynatrace-config/CD_trip-cleanup-app-service/conditional-naming-service/conditional-naming-service.yaml new file mode 100644 index 00000000..144e9df6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_trip-cleanup-app-service/conditional-naming-service/conditional-naming-service.yaml @@ -0,0 +1,8 @@ +config: +- CDtrip-cleanup-app-service: template.json + +CDtrip-cleanup-app-service: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: trip-cleanup-app-service +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_trip-cleanup-app-service/conditional-naming-service/template.json b/BMW-Dynatrace-config/CD_trip-cleanup-app-service/conditional-naming-service/template.json new file mode 100644 index 00000000..5d4fac56 --- /dev/null +++ b/BMW-Dynatrace-config/CD_trip-cleanup-app-service/conditional-naming-service/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "type": "SERVICE" +} \ 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 index d41c4c77..5f35e5c1 100644 --- 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 @@ -1,30 +1,4 @@ -## 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 configure custom services? -## 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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Custom+Services) page to configure your custom services. \ 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 index 92e734fa..1695924c 100644 --- 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 @@ -1,37 +1,4 @@ -# Synthetic Configuration -To calculate the Availability KPI, a synthetic must be configured. +### How to configure synthetics? -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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Synthetic+Monitors) page to configure your synthetics. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_trip-monitor-service/conditional-naming-processgroup/README.md b/BMW-Dynatrace-config/CD_trip-monitor-service/conditional-naming-processgroup/README.md new file mode 100644 index 00000000..f94196a5 --- /dev/null +++ b/BMW-Dynatrace-config/CD_trip-monitor-service/conditional-naming-processgroup/README.md @@ -0,0 +1,67 @@ +### Process Group Detection Rules and Naming + +#### Detection Rule or Naming? + +For the explanation, we're using a real example of the Infotainment application: + +!(PGNaming1)[../../../../img/PGNaming1.PNG] + +Before working with your dashboards and alerting profiles, an important task to do when working with Dynatrace is checking +the structure of your applications (process groups). You can do that clicking under *technologies* and filter using your +application Management Zone. + +In the picture above, there are two Process Groups called bon-information-prod. **If you see duplicated process groups like in** +**this case, you MUST follow this guideline** + +Next step would be to open both process groups and compare the metadata. In that way, you can identify if all process instances are +part of the same application or not. An easy way to do that is asking yourself: how many instances of my application do i have? + +If you have 4 instances in total and you're able to see 2 in one PG and other 2 in other PG it means that **they are part of the ** +**same application** + +Another situation could be that checking on the metadata, then you see that are **two different application** and Dynatrace is just naming +the process group in the same way + +*Same application* +- Problem: Dynatrace is creating two different process groups, what transalates in two separated services for the same application. Instead of +seeing all the traffic in one service, you will have it splitted and it will complicate your monitoring +- Solution: create a process group detection rule. Contact Dynatrace Expert + +*Different application* +- Problem: Dynatrace is just naming in the same way applications that are different. +- Solution: This case is less severe, since it can be fixed with a process group naming rule. + + +What about our example? +!(PGNaming2)[../../../../img/PGNaming2.PNG] +!(PGNaming3)[../../../../img/PGNaming3.PNG] + +Based on the feedback of the infotaiment team, each process group is a different application (microservice) and it's visible in the kubernetes container/workload +within the metadata of each Process Group. + +#### How to create a Process Group Detection Rule +1. Open the *conditional-naming-processgroup.yaml* file and create a rule that looks like this: +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName} +- tag: Infotainment +- skipDeployment: false +``` +The result of the rule will be renaming the PG to this: +``` +bon-information-prod ipa +bon-information-prod rsl +``` + +Other possible placeholders that you can use are for example: +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName/[^\\-]*$} +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesFullPodName/buffet-(.*?)-} +{ProcessGroup:DetectedName} - {HostGroup:Name/[^\\_]*$} +{ProcessGroup:KubernetesNamespace} +{ProcessGroup:CommandLineArgs/.*?\\-f\\s\\/www\\/(.*?)\\/generated\\/httpd\\.conf.*?} + +You can combine different ones. Check the (documentation)[link] for more \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_trip-monitor-service/conditional-naming-processgroup/conditional-naming-processgroup.yaml b/BMW-Dynatrace-config/CD_trip-monitor-service/conditional-naming-processgroup/conditional-naming-processgroup.yaml new file mode 100644 index 00000000..e6e827ba --- /dev/null +++ b/BMW-Dynatrace-config/CD_trip-monitor-service/conditional-naming-processgroup/conditional-naming-processgroup.yaml @@ -0,0 +1,8 @@ +config: +- CDtrip-monitor-service: template.json + +CDtrip-monitor-service: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: trip-monitor-service +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_trip-monitor-service/conditional-naming-processgroup/template.json b/BMW-Dynatrace-config/CD_trip-monitor-service/conditional-naming-processgroup/template.json new file mode 100644 index 00000000..7c039808 --- /dev/null +++ b/BMW-Dynatrace-config/CD_trip-monitor-service/conditional-naming-processgroup/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "type": "PROCESS_GROUP" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_trip-monitor-service/conditional-naming-service/README.md b/BMW-Dynatrace-config/CD_trip-monitor-service/conditional-naming-service/README.md new file mode 100644 index 00000000..c34ef308 --- /dev/null +++ b/BMW-Dynatrace-config/CD_trip-monitor-service/conditional-naming-service/README.md @@ -0,0 +1,35 @@ +### Service Naming Rules + +A typical case could be that you access to *Transaction & Services* and you find two services that are exactly the same: +*DataDownloadV1* +*DataDownloadV1* + +If you drilldown into the service and you check in the process group, you may have a PROD and a E2E for each service. + +*Note: if you see that both process group are exactly the same, please contact a Dynatrace expert to create a Process* +*Group detection rule* + +In the case the PG are PROD and E2E, then we need to create a rule that looks like this: + +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {Service:DetectedName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +- tag: Infotainment +- skipDeployment: false +``` + +The rule will get the Service Detected Name (current name) and it will extract (with a regex) the part of the kubernetes namespace after the "-", so -prod or -e2e, resulting in: +*DataDownloadV1 - prod* +*DataDownloadV1 - e2e* + +Now, services will be easy to identify. + +You can create rules based on any property/metadata. Some other placeholder's eamples: +{Service:DatabaseName} - E2E +{Service:WebServiceName} - {ProcessGroup:Kubernetes:microservice} - {ProcessGroup:Kubernetes:environment} +{Service:DetectedName} - {ProcessGroup:KubernetesContainerName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +{Service:DetectedName} - {ProcessGroup:SpringBootProfileName/[^\\-]*$} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_trip-monitor-service/conditional-naming-service/conditional-naming-service.yaml b/BMW-Dynatrace-config/CD_trip-monitor-service/conditional-naming-service/conditional-naming-service.yaml new file mode 100644 index 00000000..e6e827ba --- /dev/null +++ b/BMW-Dynatrace-config/CD_trip-monitor-service/conditional-naming-service/conditional-naming-service.yaml @@ -0,0 +1,8 @@ +config: +- CDtrip-monitor-service: template.json + +CDtrip-monitor-service: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: trip-monitor-service +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_trip-monitor-service/conditional-naming-service/template.json b/BMW-Dynatrace-config/CD_trip-monitor-service/conditional-naming-service/template.json new file mode 100644 index 00000000..5d4fac56 --- /dev/null +++ b/BMW-Dynatrace-config/CD_trip-monitor-service/conditional-naming-service/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "type": "SERVICE" +} \ 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 index d41c4c77..5f35e5c1 100644 --- 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 @@ -1,30 +1,4 @@ -## 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 configure custom services? -## 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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Custom+Services) page to configure your custom services. \ 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 index 92e734fa..1695924c 100644 --- a/BMW-Dynatrace-config/CD_trip-monitor-service/synthetic-monitor/README.md +++ b/BMW-Dynatrace-config/CD_trip-monitor-service/synthetic-monitor/README.md @@ -1,37 +1,4 @@ -# Synthetic Configuration -To calculate the Availability KPI, a synthetic must be configured. +### How to configure synthetics? -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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Synthetic+Monitors) page to configure your synthetics. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_trip-reminder-processor/conditional-naming-processgroup/README.md b/BMW-Dynatrace-config/CD_trip-reminder-processor/conditional-naming-processgroup/README.md new file mode 100644 index 00000000..f94196a5 --- /dev/null +++ b/BMW-Dynatrace-config/CD_trip-reminder-processor/conditional-naming-processgroup/README.md @@ -0,0 +1,67 @@ +### Process Group Detection Rules and Naming + +#### Detection Rule or Naming? + +For the explanation, we're using a real example of the Infotainment application: + +!(PGNaming1)[../../../../img/PGNaming1.PNG] + +Before working with your dashboards and alerting profiles, an important task to do when working with Dynatrace is checking +the structure of your applications (process groups). You can do that clicking under *technologies* and filter using your +application Management Zone. + +In the picture above, there are two Process Groups called bon-information-prod. **If you see duplicated process groups like in** +**this case, you MUST follow this guideline** + +Next step would be to open both process groups and compare the metadata. In that way, you can identify if all process instances are +part of the same application or not. An easy way to do that is asking yourself: how many instances of my application do i have? + +If you have 4 instances in total and you're able to see 2 in one PG and other 2 in other PG it means that **they are part of the ** +**same application** + +Another situation could be that checking on the metadata, then you see that are **two different application** and Dynatrace is just naming +the process group in the same way + +*Same application* +- Problem: Dynatrace is creating two different process groups, what transalates in two separated services for the same application. Instead of +seeing all the traffic in one service, you will have it splitted and it will complicate your monitoring +- Solution: create a process group detection rule. Contact Dynatrace Expert + +*Different application* +- Problem: Dynatrace is just naming in the same way applications that are different. +- Solution: This case is less severe, since it can be fixed with a process group naming rule. + + +What about our example? +!(PGNaming2)[../../../../img/PGNaming2.PNG] +!(PGNaming3)[../../../../img/PGNaming3.PNG] + +Based on the feedback of the infotaiment team, each process group is a different application (microservice) and it's visible in the kubernetes container/workload +within the metadata of each Process Group. + +#### How to create a Process Group Detection Rule +1. Open the *conditional-naming-processgroup.yaml* file and create a rule that looks like this: +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName} +- tag: Infotainment +- skipDeployment: false +``` +The result of the rule will be renaming the PG to this: +``` +bon-information-prod ipa +bon-information-prod rsl +``` + +Other possible placeholders that you can use are for example: +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName/[^\\-]*$} +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesFullPodName/buffet-(.*?)-} +{ProcessGroup:DetectedName} - {HostGroup:Name/[^\\_]*$} +{ProcessGroup:KubernetesNamespace} +{ProcessGroup:CommandLineArgs/.*?\\-f\\s\\/www\\/(.*?)\\/generated\\/httpd\\.conf.*?} + +You can combine different ones. Check the (documentation)[link] for more \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_trip-reminder-processor/conditional-naming-processgroup/conditional-naming-processgroup.yaml b/BMW-Dynatrace-config/CD_trip-reminder-processor/conditional-naming-processgroup/conditional-naming-processgroup.yaml new file mode 100644 index 00000000..c086f074 --- /dev/null +++ b/BMW-Dynatrace-config/CD_trip-reminder-processor/conditional-naming-processgroup/conditional-naming-processgroup.yaml @@ -0,0 +1,8 @@ +config: +- CDtrip-reminder-processor: template.json + +CDtrip-reminder-processor: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: trip-reminder-processor +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_trip-reminder-processor/conditional-naming-processgroup/template.json b/BMW-Dynatrace-config/CD_trip-reminder-processor/conditional-naming-processgroup/template.json new file mode 100644 index 00000000..7c039808 --- /dev/null +++ b/BMW-Dynatrace-config/CD_trip-reminder-processor/conditional-naming-processgroup/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "type": "PROCESS_GROUP" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_trip-reminder-processor/conditional-naming-service/README.md b/BMW-Dynatrace-config/CD_trip-reminder-processor/conditional-naming-service/README.md new file mode 100644 index 00000000..c34ef308 --- /dev/null +++ b/BMW-Dynatrace-config/CD_trip-reminder-processor/conditional-naming-service/README.md @@ -0,0 +1,35 @@ +### Service Naming Rules + +A typical case could be that you access to *Transaction & Services* and you find two services that are exactly the same: +*DataDownloadV1* +*DataDownloadV1* + +If you drilldown into the service and you check in the process group, you may have a PROD and a E2E for each service. + +*Note: if you see that both process group are exactly the same, please contact a Dynatrace expert to create a Process* +*Group detection rule* + +In the case the PG are PROD and E2E, then we need to create a rule that looks like this: + +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {Service:DetectedName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +- tag: Infotainment +- skipDeployment: false +``` + +The rule will get the Service Detected Name (current name) and it will extract (with a regex) the part of the kubernetes namespace after the "-", so -prod or -e2e, resulting in: +*DataDownloadV1 - prod* +*DataDownloadV1 - e2e* + +Now, services will be easy to identify. + +You can create rules based on any property/metadata. Some other placeholder's eamples: +{Service:DatabaseName} - E2E +{Service:WebServiceName} - {ProcessGroup:Kubernetes:microservice} - {ProcessGroup:Kubernetes:environment} +{Service:DetectedName} - {ProcessGroup:KubernetesContainerName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +{Service:DetectedName} - {ProcessGroup:SpringBootProfileName/[^\\-]*$} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_trip-reminder-processor/conditional-naming-service/conditional-naming-service.yaml b/BMW-Dynatrace-config/CD_trip-reminder-processor/conditional-naming-service/conditional-naming-service.yaml new file mode 100644 index 00000000..c086f074 --- /dev/null +++ b/BMW-Dynatrace-config/CD_trip-reminder-processor/conditional-naming-service/conditional-naming-service.yaml @@ -0,0 +1,8 @@ +config: +- CDtrip-reminder-processor: template.json + +CDtrip-reminder-processor: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: trip-reminder-processor +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_trip-reminder-processor/conditional-naming-service/template.json b/BMW-Dynatrace-config/CD_trip-reminder-processor/conditional-naming-service/template.json new file mode 100644 index 00000000..5d4fac56 --- /dev/null +++ b/BMW-Dynatrace-config/CD_trip-reminder-processor/conditional-naming-service/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "type": "SERVICE" +} \ 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 index d41c4c77..5f35e5c1 100644 --- 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 @@ -1,30 +1,4 @@ -## 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 configure custom services? -## 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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Custom+Services) page to configure your custom services. \ 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 index 92e734fa..1695924c 100644 --- a/BMW-Dynatrace-config/CD_trip-reminder-processor/synthetic-monitor/README.md +++ b/BMW-Dynatrace-config/CD_trip-reminder-processor/synthetic-monitor/README.md @@ -1,37 +1,4 @@ -# Synthetic Configuration -To calculate the Availability KPI, a synthetic must be configured. +### How to configure synthetics? -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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Synthetic+Monitors) page to configure your synthetics. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_trip-route-service/conditional-naming-processgroup/README.md b/BMW-Dynatrace-config/CD_trip-route-service/conditional-naming-processgroup/README.md new file mode 100644 index 00000000..f94196a5 --- /dev/null +++ b/BMW-Dynatrace-config/CD_trip-route-service/conditional-naming-processgroup/README.md @@ -0,0 +1,67 @@ +### Process Group Detection Rules and Naming + +#### Detection Rule or Naming? + +For the explanation, we're using a real example of the Infotainment application: + +!(PGNaming1)[../../../../img/PGNaming1.PNG] + +Before working with your dashboards and alerting profiles, an important task to do when working with Dynatrace is checking +the structure of your applications (process groups). You can do that clicking under *technologies* and filter using your +application Management Zone. + +In the picture above, there are two Process Groups called bon-information-prod. **If you see duplicated process groups like in** +**this case, you MUST follow this guideline** + +Next step would be to open both process groups and compare the metadata. In that way, you can identify if all process instances are +part of the same application or not. An easy way to do that is asking yourself: how many instances of my application do i have? + +If you have 4 instances in total and you're able to see 2 in one PG and other 2 in other PG it means that **they are part of the ** +**same application** + +Another situation could be that checking on the metadata, then you see that are **two different application** and Dynatrace is just naming +the process group in the same way + +*Same application* +- Problem: Dynatrace is creating two different process groups, what transalates in two separated services for the same application. Instead of +seeing all the traffic in one service, you will have it splitted and it will complicate your monitoring +- Solution: create a process group detection rule. Contact Dynatrace Expert + +*Different application* +- Problem: Dynatrace is just naming in the same way applications that are different. +- Solution: This case is less severe, since it can be fixed with a process group naming rule. + + +What about our example? +!(PGNaming2)[../../../../img/PGNaming2.PNG] +!(PGNaming3)[../../../../img/PGNaming3.PNG] + +Based on the feedback of the infotaiment team, each process group is a different application (microservice) and it's visible in the kubernetes container/workload +within the metadata of each Process Group. + +#### How to create a Process Group Detection Rule +1. Open the *conditional-naming-processgroup.yaml* file and create a rule that looks like this: +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName} +- tag: Infotainment +- skipDeployment: false +``` +The result of the rule will be renaming the PG to this: +``` +bon-information-prod ipa +bon-information-prod rsl +``` + +Other possible placeholders that you can use are for example: +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName/[^\\-]*$} +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesFullPodName/buffet-(.*?)-} +{ProcessGroup:DetectedName} - {HostGroup:Name/[^\\_]*$} +{ProcessGroup:KubernetesNamespace} +{ProcessGroup:CommandLineArgs/.*?\\-f\\s\\/www\\/(.*?)\\/generated\\/httpd\\.conf.*?} + +You can combine different ones. Check the (documentation)[link] for more \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_trip-route-service/conditional-naming-processgroup/conditional-naming-processgroup.yaml b/BMW-Dynatrace-config/CD_trip-route-service/conditional-naming-processgroup/conditional-naming-processgroup.yaml new file mode 100644 index 00000000..ad70a90e --- /dev/null +++ b/BMW-Dynatrace-config/CD_trip-route-service/conditional-naming-processgroup/conditional-naming-processgroup.yaml @@ -0,0 +1,8 @@ +config: +- CDtrip-route-service: template.json + +CDtrip-route-service: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: trip-route-service +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_trip-route-service/conditional-naming-processgroup/template.json b/BMW-Dynatrace-config/CD_trip-route-service/conditional-naming-processgroup/template.json new file mode 100644 index 00000000..7c039808 --- /dev/null +++ b/BMW-Dynatrace-config/CD_trip-route-service/conditional-naming-processgroup/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "type": "PROCESS_GROUP" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_trip-route-service/conditional-naming-service/README.md b/BMW-Dynatrace-config/CD_trip-route-service/conditional-naming-service/README.md new file mode 100644 index 00000000..c34ef308 --- /dev/null +++ b/BMW-Dynatrace-config/CD_trip-route-service/conditional-naming-service/README.md @@ -0,0 +1,35 @@ +### Service Naming Rules + +A typical case could be that you access to *Transaction & Services* and you find two services that are exactly the same: +*DataDownloadV1* +*DataDownloadV1* + +If you drilldown into the service and you check in the process group, you may have a PROD and a E2E for each service. + +*Note: if you see that both process group are exactly the same, please contact a Dynatrace expert to create a Process* +*Group detection rule* + +In the case the PG are PROD and E2E, then we need to create a rule that looks like this: + +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {Service:DetectedName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +- tag: Infotainment +- skipDeployment: false +``` + +The rule will get the Service Detected Name (current name) and it will extract (with a regex) the part of the kubernetes namespace after the "-", so -prod or -e2e, resulting in: +*DataDownloadV1 - prod* +*DataDownloadV1 - e2e* + +Now, services will be easy to identify. + +You can create rules based on any property/metadata. Some other placeholder's eamples: +{Service:DatabaseName} - E2E +{Service:WebServiceName} - {ProcessGroup:Kubernetes:microservice} - {ProcessGroup:Kubernetes:environment} +{Service:DetectedName} - {ProcessGroup:KubernetesContainerName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +{Service:DetectedName} - {ProcessGroup:SpringBootProfileName/[^\\-]*$} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_trip-route-service/conditional-naming-service/conditional-naming-service.yaml b/BMW-Dynatrace-config/CD_trip-route-service/conditional-naming-service/conditional-naming-service.yaml new file mode 100644 index 00000000..ad70a90e --- /dev/null +++ b/BMW-Dynatrace-config/CD_trip-route-service/conditional-naming-service/conditional-naming-service.yaml @@ -0,0 +1,8 @@ +config: +- CDtrip-route-service: template.json + +CDtrip-route-service: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: trip-route-service +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_trip-route-service/conditional-naming-service/template.json b/BMW-Dynatrace-config/CD_trip-route-service/conditional-naming-service/template.json new file mode 100644 index 00000000..5d4fac56 --- /dev/null +++ b/BMW-Dynatrace-config/CD_trip-route-service/conditional-naming-service/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "type": "SERVICE" +} \ 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 index d41c4c77..5f35e5c1 100644 --- 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 @@ -1,30 +1,4 @@ -## 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 configure custom services? -## 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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Custom+Services) page to configure your custom services. \ 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 index 92e734fa..1695924c 100644 --- a/BMW-Dynatrace-config/CD_trip-route-service/synthetic-monitor/README.md +++ b/BMW-Dynatrace-config/CD_trip-route-service/synthetic-monitor/README.md @@ -1,37 +1,4 @@ -# Synthetic Configuration -To calculate the Availability KPI, a synthetic must be configured. +### How to configure synthetics? -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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Synthetic+Monitors) page to configure your synthetics. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_trip-service/conditional-naming-processgroup/README.md b/BMW-Dynatrace-config/CD_trip-service/conditional-naming-processgroup/README.md new file mode 100644 index 00000000..f94196a5 --- /dev/null +++ b/BMW-Dynatrace-config/CD_trip-service/conditional-naming-processgroup/README.md @@ -0,0 +1,67 @@ +### Process Group Detection Rules and Naming + +#### Detection Rule or Naming? + +For the explanation, we're using a real example of the Infotainment application: + +!(PGNaming1)[../../../../img/PGNaming1.PNG] + +Before working with your dashboards and alerting profiles, an important task to do when working with Dynatrace is checking +the structure of your applications (process groups). You can do that clicking under *technologies* and filter using your +application Management Zone. + +In the picture above, there are two Process Groups called bon-information-prod. **If you see duplicated process groups like in** +**this case, you MUST follow this guideline** + +Next step would be to open both process groups and compare the metadata. In that way, you can identify if all process instances are +part of the same application or not. An easy way to do that is asking yourself: how many instances of my application do i have? + +If you have 4 instances in total and you're able to see 2 in one PG and other 2 in other PG it means that **they are part of the ** +**same application** + +Another situation could be that checking on the metadata, then you see that are **two different application** and Dynatrace is just naming +the process group in the same way + +*Same application* +- Problem: Dynatrace is creating two different process groups, what transalates in two separated services for the same application. Instead of +seeing all the traffic in one service, you will have it splitted and it will complicate your monitoring +- Solution: create a process group detection rule. Contact Dynatrace Expert + +*Different application* +- Problem: Dynatrace is just naming in the same way applications that are different. +- Solution: This case is less severe, since it can be fixed with a process group naming rule. + + +What about our example? +!(PGNaming2)[../../../../img/PGNaming2.PNG] +!(PGNaming3)[../../../../img/PGNaming3.PNG] + +Based on the feedback of the infotaiment team, each process group is a different application (microservice) and it's visible in the kubernetes container/workload +within the metadata of each Process Group. + +#### How to create a Process Group Detection Rule +1. Open the *conditional-naming-processgroup.yaml* file and create a rule that looks like this: +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName} +- tag: Infotainment +- skipDeployment: false +``` +The result of the rule will be renaming the PG to this: +``` +bon-information-prod ipa +bon-information-prod rsl +``` + +Other possible placeholders that you can use are for example: +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName/[^\\-]*$} +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesFullPodName/buffet-(.*?)-} +{ProcessGroup:DetectedName} - {HostGroup:Name/[^\\_]*$} +{ProcessGroup:KubernetesNamespace} +{ProcessGroup:CommandLineArgs/.*?\\-f\\s\\/www\\/(.*?)\\/generated\\/httpd\\.conf.*?} + +You can combine different ones. Check the (documentation)[link] for more \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_trip-service/conditional-naming-processgroup/conditional-naming-processgroup.yaml b/BMW-Dynatrace-config/CD_trip-service/conditional-naming-processgroup/conditional-naming-processgroup.yaml new file mode 100644 index 00000000..3403f137 --- /dev/null +++ b/BMW-Dynatrace-config/CD_trip-service/conditional-naming-processgroup/conditional-naming-processgroup.yaml @@ -0,0 +1,8 @@ +config: +- CDtrip-service: template.json + +CDtrip-service: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: trip-service +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_trip-service/conditional-naming-processgroup/template.json b/BMW-Dynatrace-config/CD_trip-service/conditional-naming-processgroup/template.json new file mode 100644 index 00000000..7c039808 --- /dev/null +++ b/BMW-Dynatrace-config/CD_trip-service/conditional-naming-processgroup/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "type": "PROCESS_GROUP" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_trip-service/conditional-naming-service/README.md b/BMW-Dynatrace-config/CD_trip-service/conditional-naming-service/README.md new file mode 100644 index 00000000..c34ef308 --- /dev/null +++ b/BMW-Dynatrace-config/CD_trip-service/conditional-naming-service/README.md @@ -0,0 +1,35 @@ +### Service Naming Rules + +A typical case could be that you access to *Transaction & Services* and you find two services that are exactly the same: +*DataDownloadV1* +*DataDownloadV1* + +If you drilldown into the service and you check in the process group, you may have a PROD and a E2E for each service. + +*Note: if you see that both process group are exactly the same, please contact a Dynatrace expert to create a Process* +*Group detection rule* + +In the case the PG are PROD and E2E, then we need to create a rule that looks like this: + +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {Service:DetectedName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +- tag: Infotainment +- skipDeployment: false +``` + +The rule will get the Service Detected Name (current name) and it will extract (with a regex) the part of the kubernetes namespace after the "-", so -prod or -e2e, resulting in: +*DataDownloadV1 - prod* +*DataDownloadV1 - e2e* + +Now, services will be easy to identify. + +You can create rules based on any property/metadata. Some other placeholder's eamples: +{Service:DatabaseName} - E2E +{Service:WebServiceName} - {ProcessGroup:Kubernetes:microservice} - {ProcessGroup:Kubernetes:environment} +{Service:DetectedName} - {ProcessGroup:KubernetesContainerName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +{Service:DetectedName} - {ProcessGroup:SpringBootProfileName/[^\\-]*$} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_trip-service/conditional-naming-service/conditional-naming-service.yaml b/BMW-Dynatrace-config/CD_trip-service/conditional-naming-service/conditional-naming-service.yaml new file mode 100644 index 00000000..3403f137 --- /dev/null +++ b/BMW-Dynatrace-config/CD_trip-service/conditional-naming-service/conditional-naming-service.yaml @@ -0,0 +1,8 @@ +config: +- CDtrip-service: template.json + +CDtrip-service: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: trip-service +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_trip-service/conditional-naming-service/template.json b/BMW-Dynatrace-config/CD_trip-service/conditional-naming-service/template.json new file mode 100644 index 00000000..5d4fac56 --- /dev/null +++ b/BMW-Dynatrace-config/CD_trip-service/conditional-naming-service/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "type": "SERVICE" +} \ 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 index d41c4c77..5f35e5c1 100644 --- a/BMW-Dynatrace-config/CD_trip-service/custom-service-java/README.md +++ b/BMW-Dynatrace-config/CD_trip-service/custom-service-java/README.md @@ -1,30 +1,4 @@ -## 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 configure custom services? -## 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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Custom+Services) page to configure your custom services. \ 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 index 92e734fa..1695924c 100644 --- a/BMW-Dynatrace-config/CD_trip-service/synthetic-monitor/README.md +++ b/BMW-Dynatrace-config/CD_trip-service/synthetic-monitor/README.md @@ -1,37 +1,4 @@ -# Synthetic Configuration -To calculate the Availability KPI, a synthetic must be configured. +### How to configure synthetics? -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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Synthetic+Monitors) page to configure your synthetics. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-bcallservice/conditional-naming-processgroup/README.md b/BMW-Dynatrace-config/CD_ts-bcallservice/conditional-naming-processgroup/README.md new file mode 100644 index 00000000..f94196a5 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-bcallservice/conditional-naming-processgroup/README.md @@ -0,0 +1,67 @@ +### Process Group Detection Rules and Naming + +#### Detection Rule or Naming? + +For the explanation, we're using a real example of the Infotainment application: + +!(PGNaming1)[../../../../img/PGNaming1.PNG] + +Before working with your dashboards and alerting profiles, an important task to do when working with Dynatrace is checking +the structure of your applications (process groups). You can do that clicking under *technologies* and filter using your +application Management Zone. + +In the picture above, there are two Process Groups called bon-information-prod. **If you see duplicated process groups like in** +**this case, you MUST follow this guideline** + +Next step would be to open both process groups and compare the metadata. In that way, you can identify if all process instances are +part of the same application or not. An easy way to do that is asking yourself: how many instances of my application do i have? + +If you have 4 instances in total and you're able to see 2 in one PG and other 2 in other PG it means that **they are part of the ** +**same application** + +Another situation could be that checking on the metadata, then you see that are **two different application** and Dynatrace is just naming +the process group in the same way + +*Same application* +- Problem: Dynatrace is creating two different process groups, what transalates in two separated services for the same application. Instead of +seeing all the traffic in one service, you will have it splitted and it will complicate your monitoring +- Solution: create a process group detection rule. Contact Dynatrace Expert + +*Different application* +- Problem: Dynatrace is just naming in the same way applications that are different. +- Solution: This case is less severe, since it can be fixed with a process group naming rule. + + +What about our example? +!(PGNaming2)[../../../../img/PGNaming2.PNG] +!(PGNaming3)[../../../../img/PGNaming3.PNG] + +Based on the feedback of the infotaiment team, each process group is a different application (microservice) and it's visible in the kubernetes container/workload +within the metadata of each Process Group. + +#### How to create a Process Group Detection Rule +1. Open the *conditional-naming-processgroup.yaml* file and create a rule that looks like this: +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName} +- tag: Infotainment +- skipDeployment: false +``` +The result of the rule will be renaming the PG to this: +``` +bon-information-prod ipa +bon-information-prod rsl +``` + +Other possible placeholders that you can use are for example: +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName/[^\\-]*$} +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesFullPodName/buffet-(.*?)-} +{ProcessGroup:DetectedName} - {HostGroup:Name/[^\\_]*$} +{ProcessGroup:KubernetesNamespace} +{ProcessGroup:CommandLineArgs/.*?\\-f\\s\\/www\\/(.*?)\\/generated\\/httpd\\.conf.*?} + +You can combine different ones. Check the (documentation)[link] for more \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-bcallservice/conditional-naming-processgroup/conditional-naming-processgroup.yaml b/BMW-Dynatrace-config/CD_ts-bcallservice/conditional-naming-processgroup/conditional-naming-processgroup.yaml new file mode 100644 index 00000000..00e755d1 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-bcallservice/conditional-naming-processgroup/conditional-naming-processgroup.yaml @@ -0,0 +1,8 @@ +config: +- CDts-bcallservice: template.json + +CDts-bcallservice: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: ts-bcallservice +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_ts-bcallservice/conditional-naming-processgroup/template.json b/BMW-Dynatrace-config/CD_ts-bcallservice/conditional-naming-processgroup/template.json new file mode 100644 index 00000000..7c039808 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-bcallservice/conditional-naming-processgroup/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "type": "PROCESS_GROUP" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-bcallservice/conditional-naming-service/README.md b/BMW-Dynatrace-config/CD_ts-bcallservice/conditional-naming-service/README.md new file mode 100644 index 00000000..c34ef308 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-bcallservice/conditional-naming-service/README.md @@ -0,0 +1,35 @@ +### Service Naming Rules + +A typical case could be that you access to *Transaction & Services* and you find two services that are exactly the same: +*DataDownloadV1* +*DataDownloadV1* + +If you drilldown into the service and you check in the process group, you may have a PROD and a E2E for each service. + +*Note: if you see that both process group are exactly the same, please contact a Dynatrace expert to create a Process* +*Group detection rule* + +In the case the PG are PROD and E2E, then we need to create a rule that looks like this: + +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {Service:DetectedName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +- tag: Infotainment +- skipDeployment: false +``` + +The rule will get the Service Detected Name (current name) and it will extract (with a regex) the part of the kubernetes namespace after the "-", so -prod or -e2e, resulting in: +*DataDownloadV1 - prod* +*DataDownloadV1 - e2e* + +Now, services will be easy to identify. + +You can create rules based on any property/metadata. Some other placeholder's eamples: +{Service:DatabaseName} - E2E +{Service:WebServiceName} - {ProcessGroup:Kubernetes:microservice} - {ProcessGroup:Kubernetes:environment} +{Service:DetectedName} - {ProcessGroup:KubernetesContainerName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +{Service:DetectedName} - {ProcessGroup:SpringBootProfileName/[^\\-]*$} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-bcallservice/conditional-naming-service/conditional-naming-service.yaml b/BMW-Dynatrace-config/CD_ts-bcallservice/conditional-naming-service/conditional-naming-service.yaml new file mode 100644 index 00000000..00e755d1 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-bcallservice/conditional-naming-service/conditional-naming-service.yaml @@ -0,0 +1,8 @@ +config: +- CDts-bcallservice: template.json + +CDts-bcallservice: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: ts-bcallservice +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_ts-bcallservice/conditional-naming-service/template.json b/BMW-Dynatrace-config/CD_ts-bcallservice/conditional-naming-service/template.json new file mode 100644 index 00000000..5d4fac56 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-bcallservice/conditional-naming-service/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "type": "SERVICE" +} \ 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 index d41c4c77..5f35e5c1 100644 --- a/BMW-Dynatrace-config/CD_ts-bcallservice/custom-service-java/README.md +++ b/BMW-Dynatrace-config/CD_ts-bcallservice/custom-service-java/README.md @@ -1,30 +1,4 @@ -## 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 configure custom services? -## 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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Custom+Services) page to configure your custom services. \ 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 index 92e734fa..1695924c 100644 --- a/BMW-Dynatrace-config/CD_ts-bcallservice/synthetic-monitor/README.md +++ b/BMW-Dynatrace-config/CD_ts-bcallservice/synthetic-monitor/README.md @@ -1,37 +1,4 @@ -# Synthetic Configuration -To calculate the Availability KPI, a synthetic must be configured. +### How to configure synthetics? -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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Synthetic+Monitors) page to configure your synthetics. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-bt/conditional-naming-processgroup/README.md b/BMW-Dynatrace-config/CD_ts-bt/conditional-naming-processgroup/README.md new file mode 100644 index 00000000..f94196a5 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-bt/conditional-naming-processgroup/README.md @@ -0,0 +1,67 @@ +### Process Group Detection Rules and Naming + +#### Detection Rule or Naming? + +For the explanation, we're using a real example of the Infotainment application: + +!(PGNaming1)[../../../../img/PGNaming1.PNG] + +Before working with your dashboards and alerting profiles, an important task to do when working with Dynatrace is checking +the structure of your applications (process groups). You can do that clicking under *technologies* and filter using your +application Management Zone. + +In the picture above, there are two Process Groups called bon-information-prod. **If you see duplicated process groups like in** +**this case, you MUST follow this guideline** + +Next step would be to open both process groups and compare the metadata. In that way, you can identify if all process instances are +part of the same application or not. An easy way to do that is asking yourself: how many instances of my application do i have? + +If you have 4 instances in total and you're able to see 2 in one PG and other 2 in other PG it means that **they are part of the ** +**same application** + +Another situation could be that checking on the metadata, then you see that are **two different application** and Dynatrace is just naming +the process group in the same way + +*Same application* +- Problem: Dynatrace is creating two different process groups, what transalates in two separated services for the same application. Instead of +seeing all the traffic in one service, you will have it splitted and it will complicate your monitoring +- Solution: create a process group detection rule. Contact Dynatrace Expert + +*Different application* +- Problem: Dynatrace is just naming in the same way applications that are different. +- Solution: This case is less severe, since it can be fixed with a process group naming rule. + + +What about our example? +!(PGNaming2)[../../../../img/PGNaming2.PNG] +!(PGNaming3)[../../../../img/PGNaming3.PNG] + +Based on the feedback of the infotaiment team, each process group is a different application (microservice) and it's visible in the kubernetes container/workload +within the metadata of each Process Group. + +#### How to create a Process Group Detection Rule +1. Open the *conditional-naming-processgroup.yaml* file and create a rule that looks like this: +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName} +- tag: Infotainment +- skipDeployment: false +``` +The result of the rule will be renaming the PG to this: +``` +bon-information-prod ipa +bon-information-prod rsl +``` + +Other possible placeholders that you can use are for example: +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName/[^\\-]*$} +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesFullPodName/buffet-(.*?)-} +{ProcessGroup:DetectedName} - {HostGroup:Name/[^\\_]*$} +{ProcessGroup:KubernetesNamespace} +{ProcessGroup:CommandLineArgs/.*?\\-f\\s\\/www\\/(.*?)\\/generated\\/httpd\\.conf.*?} + +You can combine different ones. Check the (documentation)[link] for more \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-bt/conditional-naming-processgroup/conditional-naming-processgroup.yaml b/BMW-Dynatrace-config/CD_ts-bt/conditional-naming-processgroup/conditional-naming-processgroup.yaml new file mode 100644 index 00000000..b0c580be --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-bt/conditional-naming-processgroup/conditional-naming-processgroup.yaml @@ -0,0 +1,8 @@ +config: +- CDts-bt: template.json + +CDts-bt: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: ts-bt +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_ts-bt/conditional-naming-processgroup/template.json b/BMW-Dynatrace-config/CD_ts-bt/conditional-naming-processgroup/template.json new file mode 100644 index 00000000..7c039808 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-bt/conditional-naming-processgroup/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "type": "PROCESS_GROUP" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-bt/conditional-naming-service/README.md b/BMW-Dynatrace-config/CD_ts-bt/conditional-naming-service/README.md new file mode 100644 index 00000000..c34ef308 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-bt/conditional-naming-service/README.md @@ -0,0 +1,35 @@ +### Service Naming Rules + +A typical case could be that you access to *Transaction & Services* and you find two services that are exactly the same: +*DataDownloadV1* +*DataDownloadV1* + +If you drilldown into the service and you check in the process group, you may have a PROD and a E2E for each service. + +*Note: if you see that both process group are exactly the same, please contact a Dynatrace expert to create a Process* +*Group detection rule* + +In the case the PG are PROD and E2E, then we need to create a rule that looks like this: + +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {Service:DetectedName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +- tag: Infotainment +- skipDeployment: false +``` + +The rule will get the Service Detected Name (current name) and it will extract (with a regex) the part of the kubernetes namespace after the "-", so -prod or -e2e, resulting in: +*DataDownloadV1 - prod* +*DataDownloadV1 - e2e* + +Now, services will be easy to identify. + +You can create rules based on any property/metadata. Some other placeholder's eamples: +{Service:DatabaseName} - E2E +{Service:WebServiceName} - {ProcessGroup:Kubernetes:microservice} - {ProcessGroup:Kubernetes:environment} +{Service:DetectedName} - {ProcessGroup:KubernetesContainerName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +{Service:DetectedName} - {ProcessGroup:SpringBootProfileName/[^\\-]*$} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-bt/conditional-naming-service/conditional-naming-service.yaml b/BMW-Dynatrace-config/CD_ts-bt/conditional-naming-service/conditional-naming-service.yaml new file mode 100644 index 00000000..b0c580be --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-bt/conditional-naming-service/conditional-naming-service.yaml @@ -0,0 +1,8 @@ +config: +- CDts-bt: template.json + +CDts-bt: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: ts-bt +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_ts-bt/conditional-naming-service/template.json b/BMW-Dynatrace-config/CD_ts-bt/conditional-naming-service/template.json new file mode 100644 index 00000000..5d4fac56 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-bt/conditional-naming-service/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "type": "SERVICE" +} \ 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 index d41c4c77..5f35e5c1 100644 --- a/BMW-Dynatrace-config/CD_ts-bt/custom-service-java/README.md +++ b/BMW-Dynatrace-config/CD_ts-bt/custom-service-java/README.md @@ -1,30 +1,4 @@ -## 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 configure custom services? -## 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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Custom+Services) page to configure your custom services. \ 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 index 92e734fa..1695924c 100644 --- a/BMW-Dynatrace-config/CD_ts-bt/synthetic-monitor/README.md +++ b/BMW-Dynatrace-config/CD_ts-bt/synthetic-monitor/README.md @@ -1,37 +1,4 @@ -# Synthetic Configuration -To calculate the Availability KPI, a synthetic must be configured. +### How to configure synthetics? -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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Synthetic+Monitors) page to configure your synthetics. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-bti/conditional-naming-processgroup/README.md b/BMW-Dynatrace-config/CD_ts-bti/conditional-naming-processgroup/README.md new file mode 100644 index 00000000..f94196a5 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-bti/conditional-naming-processgroup/README.md @@ -0,0 +1,67 @@ +### Process Group Detection Rules and Naming + +#### Detection Rule or Naming? + +For the explanation, we're using a real example of the Infotainment application: + +!(PGNaming1)[../../../../img/PGNaming1.PNG] + +Before working with your dashboards and alerting profiles, an important task to do when working with Dynatrace is checking +the structure of your applications (process groups). You can do that clicking under *technologies* and filter using your +application Management Zone. + +In the picture above, there are two Process Groups called bon-information-prod. **If you see duplicated process groups like in** +**this case, you MUST follow this guideline** + +Next step would be to open both process groups and compare the metadata. In that way, you can identify if all process instances are +part of the same application or not. An easy way to do that is asking yourself: how many instances of my application do i have? + +If you have 4 instances in total and you're able to see 2 in one PG and other 2 in other PG it means that **they are part of the ** +**same application** + +Another situation could be that checking on the metadata, then you see that are **two different application** and Dynatrace is just naming +the process group in the same way + +*Same application* +- Problem: Dynatrace is creating two different process groups, what transalates in two separated services for the same application. Instead of +seeing all the traffic in one service, you will have it splitted and it will complicate your monitoring +- Solution: create a process group detection rule. Contact Dynatrace Expert + +*Different application* +- Problem: Dynatrace is just naming in the same way applications that are different. +- Solution: This case is less severe, since it can be fixed with a process group naming rule. + + +What about our example? +!(PGNaming2)[../../../../img/PGNaming2.PNG] +!(PGNaming3)[../../../../img/PGNaming3.PNG] + +Based on the feedback of the infotaiment team, each process group is a different application (microservice) and it's visible in the kubernetes container/workload +within the metadata of each Process Group. + +#### How to create a Process Group Detection Rule +1. Open the *conditional-naming-processgroup.yaml* file and create a rule that looks like this: +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName} +- tag: Infotainment +- skipDeployment: false +``` +The result of the rule will be renaming the PG to this: +``` +bon-information-prod ipa +bon-information-prod rsl +``` + +Other possible placeholders that you can use are for example: +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName/[^\\-]*$} +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesFullPodName/buffet-(.*?)-} +{ProcessGroup:DetectedName} - {HostGroup:Name/[^\\_]*$} +{ProcessGroup:KubernetesNamespace} +{ProcessGroup:CommandLineArgs/.*?\\-f\\s\\/www\\/(.*?)\\/generated\\/httpd\\.conf.*?} + +You can combine different ones. Check the (documentation)[link] for more \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-bti/conditional-naming-processgroup/conditional-naming-processgroup.yaml b/BMW-Dynatrace-config/CD_ts-bti/conditional-naming-processgroup/conditional-naming-processgroup.yaml new file mode 100644 index 00000000..8f3ada60 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-bti/conditional-naming-processgroup/conditional-naming-processgroup.yaml @@ -0,0 +1,8 @@ +config: +- CDts-bti: template.json + +CDts-bti: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: ts-bti +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_ts-bti/conditional-naming-processgroup/template.json b/BMW-Dynatrace-config/CD_ts-bti/conditional-naming-processgroup/template.json new file mode 100644 index 00000000..7c039808 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-bti/conditional-naming-processgroup/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "type": "PROCESS_GROUP" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-bti/conditional-naming-service/README.md b/BMW-Dynatrace-config/CD_ts-bti/conditional-naming-service/README.md new file mode 100644 index 00000000..c34ef308 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-bti/conditional-naming-service/README.md @@ -0,0 +1,35 @@ +### Service Naming Rules + +A typical case could be that you access to *Transaction & Services* and you find two services that are exactly the same: +*DataDownloadV1* +*DataDownloadV1* + +If you drilldown into the service and you check in the process group, you may have a PROD and a E2E for each service. + +*Note: if you see that both process group are exactly the same, please contact a Dynatrace expert to create a Process* +*Group detection rule* + +In the case the PG are PROD and E2E, then we need to create a rule that looks like this: + +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {Service:DetectedName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +- tag: Infotainment +- skipDeployment: false +``` + +The rule will get the Service Detected Name (current name) and it will extract (with a regex) the part of the kubernetes namespace after the "-", so -prod or -e2e, resulting in: +*DataDownloadV1 - prod* +*DataDownloadV1 - e2e* + +Now, services will be easy to identify. + +You can create rules based on any property/metadata. Some other placeholder's eamples: +{Service:DatabaseName} - E2E +{Service:WebServiceName} - {ProcessGroup:Kubernetes:microservice} - {ProcessGroup:Kubernetes:environment} +{Service:DetectedName} - {ProcessGroup:KubernetesContainerName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +{Service:DetectedName} - {ProcessGroup:SpringBootProfileName/[^\\-]*$} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-bti/conditional-naming-service/conditional-naming-service.yaml b/BMW-Dynatrace-config/CD_ts-bti/conditional-naming-service/conditional-naming-service.yaml new file mode 100644 index 00000000..8f3ada60 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-bti/conditional-naming-service/conditional-naming-service.yaml @@ -0,0 +1,8 @@ +config: +- CDts-bti: template.json + +CDts-bti: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: ts-bti +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_ts-bti/conditional-naming-service/template.json b/BMW-Dynatrace-config/CD_ts-bti/conditional-naming-service/template.json new file mode 100644 index 00000000..5d4fac56 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-bti/conditional-naming-service/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "type": "SERVICE" +} \ 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 index d41c4c77..5f35e5c1 100644 --- a/BMW-Dynatrace-config/CD_ts-bti/custom-service-java/README.md +++ b/BMW-Dynatrace-config/CD_ts-bti/custom-service-java/README.md @@ -1,30 +1,4 @@ -## 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 configure custom services? -## 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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Custom+Services) page to configure your custom services. \ 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 index 92e734fa..1695924c 100644 --- a/BMW-Dynatrace-config/CD_ts-bti/synthetic-monitor/README.md +++ b/BMW-Dynatrace-config/CD_ts-bti/synthetic-monitor/README.md @@ -1,37 +1,4 @@ -# Synthetic Configuration -To calculate the Availability KPI, a synthetic must be configured. +### How to configure synthetics? -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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Synthetic+Monitors) page to configure your synthetics. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-cas-spm/conditional-naming-processgroup/README.md b/BMW-Dynatrace-config/CD_ts-cas-spm/conditional-naming-processgroup/README.md new file mode 100644 index 00000000..f94196a5 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-cas-spm/conditional-naming-processgroup/README.md @@ -0,0 +1,67 @@ +### Process Group Detection Rules and Naming + +#### Detection Rule or Naming? + +For the explanation, we're using a real example of the Infotainment application: + +!(PGNaming1)[../../../../img/PGNaming1.PNG] + +Before working with your dashboards and alerting profiles, an important task to do when working with Dynatrace is checking +the structure of your applications (process groups). You can do that clicking under *technologies* and filter using your +application Management Zone. + +In the picture above, there are two Process Groups called bon-information-prod. **If you see duplicated process groups like in** +**this case, you MUST follow this guideline** + +Next step would be to open both process groups and compare the metadata. In that way, you can identify if all process instances are +part of the same application or not. An easy way to do that is asking yourself: how many instances of my application do i have? + +If you have 4 instances in total and you're able to see 2 in one PG and other 2 in other PG it means that **they are part of the ** +**same application** + +Another situation could be that checking on the metadata, then you see that are **two different application** and Dynatrace is just naming +the process group in the same way + +*Same application* +- Problem: Dynatrace is creating two different process groups, what transalates in two separated services for the same application. Instead of +seeing all the traffic in one service, you will have it splitted and it will complicate your monitoring +- Solution: create a process group detection rule. Contact Dynatrace Expert + +*Different application* +- Problem: Dynatrace is just naming in the same way applications that are different. +- Solution: This case is less severe, since it can be fixed with a process group naming rule. + + +What about our example? +!(PGNaming2)[../../../../img/PGNaming2.PNG] +!(PGNaming3)[../../../../img/PGNaming3.PNG] + +Based on the feedback of the infotaiment team, each process group is a different application (microservice) and it's visible in the kubernetes container/workload +within the metadata of each Process Group. + +#### How to create a Process Group Detection Rule +1. Open the *conditional-naming-processgroup.yaml* file and create a rule that looks like this: +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName} +- tag: Infotainment +- skipDeployment: false +``` +The result of the rule will be renaming the PG to this: +``` +bon-information-prod ipa +bon-information-prod rsl +``` + +Other possible placeholders that you can use are for example: +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName/[^\\-]*$} +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesFullPodName/buffet-(.*?)-} +{ProcessGroup:DetectedName} - {HostGroup:Name/[^\\_]*$} +{ProcessGroup:KubernetesNamespace} +{ProcessGroup:CommandLineArgs/.*?\\-f\\s\\/www\\/(.*?)\\/generated\\/httpd\\.conf.*?} + +You can combine different ones. Check the (documentation)[link] for more \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-cas-spm/conditional-naming-processgroup/conditional-naming-processgroup.yaml b/BMW-Dynatrace-config/CD_ts-cas-spm/conditional-naming-processgroup/conditional-naming-processgroup.yaml new file mode 100644 index 00000000..f176b376 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-cas-spm/conditional-naming-processgroup/conditional-naming-processgroup.yaml @@ -0,0 +1,8 @@ +config: +- CDts-cas-spm: template.json + +CDts-cas-spm: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: ts-cas-spm +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_ts-cas-spm/conditional-naming-processgroup/template.json b/BMW-Dynatrace-config/CD_ts-cas-spm/conditional-naming-processgroup/template.json new file mode 100644 index 00000000..7c039808 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-cas-spm/conditional-naming-processgroup/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "type": "PROCESS_GROUP" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-cas-spm/conditional-naming-service/README.md b/BMW-Dynatrace-config/CD_ts-cas-spm/conditional-naming-service/README.md new file mode 100644 index 00000000..c34ef308 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-cas-spm/conditional-naming-service/README.md @@ -0,0 +1,35 @@ +### Service Naming Rules + +A typical case could be that you access to *Transaction & Services* and you find two services that are exactly the same: +*DataDownloadV1* +*DataDownloadV1* + +If you drilldown into the service and you check in the process group, you may have a PROD and a E2E for each service. + +*Note: if you see that both process group are exactly the same, please contact a Dynatrace expert to create a Process* +*Group detection rule* + +In the case the PG are PROD and E2E, then we need to create a rule that looks like this: + +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {Service:DetectedName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +- tag: Infotainment +- skipDeployment: false +``` + +The rule will get the Service Detected Name (current name) and it will extract (with a regex) the part of the kubernetes namespace after the "-", so -prod or -e2e, resulting in: +*DataDownloadV1 - prod* +*DataDownloadV1 - e2e* + +Now, services will be easy to identify. + +You can create rules based on any property/metadata. Some other placeholder's eamples: +{Service:DatabaseName} - E2E +{Service:WebServiceName} - {ProcessGroup:Kubernetes:microservice} - {ProcessGroup:Kubernetes:environment} +{Service:DetectedName} - {ProcessGroup:KubernetesContainerName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +{Service:DetectedName} - {ProcessGroup:SpringBootProfileName/[^\\-]*$} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-cas-spm/conditional-naming-service/conditional-naming-service.yaml b/BMW-Dynatrace-config/CD_ts-cas-spm/conditional-naming-service/conditional-naming-service.yaml new file mode 100644 index 00000000..f176b376 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-cas-spm/conditional-naming-service/conditional-naming-service.yaml @@ -0,0 +1,8 @@ +config: +- CDts-cas-spm: template.json + +CDts-cas-spm: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: ts-cas-spm +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_ts-cas-spm/conditional-naming-service/template.json b/BMW-Dynatrace-config/CD_ts-cas-spm/conditional-naming-service/template.json new file mode 100644 index 00000000..5d4fac56 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-cas-spm/conditional-naming-service/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "type": "SERVICE" +} \ 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 index d41c4c77..5f35e5c1 100644 --- 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 @@ -1,30 +1,4 @@ -## 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 configure custom services? -## 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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Custom+Services) page to configure your custom services. \ 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 index 92e734fa..1695924c 100644 --- a/BMW-Dynatrace-config/CD_ts-cas-spm/synthetic-monitor/README.md +++ b/BMW-Dynatrace-config/CD_ts-cas-spm/synthetic-monitor/README.md @@ -1,37 +1,4 @@ -# Synthetic Configuration -To calculate the Availability KPI, a synthetic must be configured. +### How to configure synthetics? -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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Synthetic+Monitors) page to configure your synthetics. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-cas-stm/conditional-naming-processgroup/README.md b/BMW-Dynatrace-config/CD_ts-cas-stm/conditional-naming-processgroup/README.md new file mode 100644 index 00000000..f94196a5 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-cas-stm/conditional-naming-processgroup/README.md @@ -0,0 +1,67 @@ +### Process Group Detection Rules and Naming + +#### Detection Rule or Naming? + +For the explanation, we're using a real example of the Infotainment application: + +!(PGNaming1)[../../../../img/PGNaming1.PNG] + +Before working with your dashboards and alerting profiles, an important task to do when working with Dynatrace is checking +the structure of your applications (process groups). You can do that clicking under *technologies* and filter using your +application Management Zone. + +In the picture above, there are two Process Groups called bon-information-prod. **If you see duplicated process groups like in** +**this case, you MUST follow this guideline** + +Next step would be to open both process groups and compare the metadata. In that way, you can identify if all process instances are +part of the same application or not. An easy way to do that is asking yourself: how many instances of my application do i have? + +If you have 4 instances in total and you're able to see 2 in one PG and other 2 in other PG it means that **they are part of the ** +**same application** + +Another situation could be that checking on the metadata, then you see that are **two different application** and Dynatrace is just naming +the process group in the same way + +*Same application* +- Problem: Dynatrace is creating two different process groups, what transalates in two separated services for the same application. Instead of +seeing all the traffic in one service, you will have it splitted and it will complicate your monitoring +- Solution: create a process group detection rule. Contact Dynatrace Expert + +*Different application* +- Problem: Dynatrace is just naming in the same way applications that are different. +- Solution: This case is less severe, since it can be fixed with a process group naming rule. + + +What about our example? +!(PGNaming2)[../../../../img/PGNaming2.PNG] +!(PGNaming3)[../../../../img/PGNaming3.PNG] + +Based on the feedback of the infotaiment team, each process group is a different application (microservice) and it's visible in the kubernetes container/workload +within the metadata of each Process Group. + +#### How to create a Process Group Detection Rule +1. Open the *conditional-naming-processgroup.yaml* file and create a rule that looks like this: +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName} +- tag: Infotainment +- skipDeployment: false +``` +The result of the rule will be renaming the PG to this: +``` +bon-information-prod ipa +bon-information-prod rsl +``` + +Other possible placeholders that you can use are for example: +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName/[^\\-]*$} +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesFullPodName/buffet-(.*?)-} +{ProcessGroup:DetectedName} - {HostGroup:Name/[^\\_]*$} +{ProcessGroup:KubernetesNamespace} +{ProcessGroup:CommandLineArgs/.*?\\-f\\s\\/www\\/(.*?)\\/generated\\/httpd\\.conf.*?} + +You can combine different ones. Check the (documentation)[link] for more \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-cas-stm/conditional-naming-processgroup/conditional-naming-processgroup.yaml b/BMW-Dynatrace-config/CD_ts-cas-stm/conditional-naming-processgroup/conditional-naming-processgroup.yaml new file mode 100644 index 00000000..86e812ee --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-cas-stm/conditional-naming-processgroup/conditional-naming-processgroup.yaml @@ -0,0 +1,8 @@ +config: +- CDts-cas-stm: template.json + +CDts-cas-stm: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: ts-cas-stm +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_ts-cas-stm/conditional-naming-processgroup/template.json b/BMW-Dynatrace-config/CD_ts-cas-stm/conditional-naming-processgroup/template.json new file mode 100644 index 00000000..7c039808 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-cas-stm/conditional-naming-processgroup/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "type": "PROCESS_GROUP" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-cas-stm/conditional-naming-service/README.md b/BMW-Dynatrace-config/CD_ts-cas-stm/conditional-naming-service/README.md new file mode 100644 index 00000000..c34ef308 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-cas-stm/conditional-naming-service/README.md @@ -0,0 +1,35 @@ +### Service Naming Rules + +A typical case could be that you access to *Transaction & Services* and you find two services that are exactly the same: +*DataDownloadV1* +*DataDownloadV1* + +If you drilldown into the service and you check in the process group, you may have a PROD and a E2E for each service. + +*Note: if you see that both process group are exactly the same, please contact a Dynatrace expert to create a Process* +*Group detection rule* + +In the case the PG are PROD and E2E, then we need to create a rule that looks like this: + +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {Service:DetectedName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +- tag: Infotainment +- skipDeployment: false +``` + +The rule will get the Service Detected Name (current name) and it will extract (with a regex) the part of the kubernetes namespace after the "-", so -prod or -e2e, resulting in: +*DataDownloadV1 - prod* +*DataDownloadV1 - e2e* + +Now, services will be easy to identify. + +You can create rules based on any property/metadata. Some other placeholder's eamples: +{Service:DatabaseName} - E2E +{Service:WebServiceName} - {ProcessGroup:Kubernetes:microservice} - {ProcessGroup:Kubernetes:environment} +{Service:DetectedName} - {ProcessGroup:KubernetesContainerName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +{Service:DetectedName} - {ProcessGroup:SpringBootProfileName/[^\\-]*$} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-cas-stm/conditional-naming-service/conditional-naming-service.yaml b/BMW-Dynatrace-config/CD_ts-cas-stm/conditional-naming-service/conditional-naming-service.yaml new file mode 100644 index 00000000..86e812ee --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-cas-stm/conditional-naming-service/conditional-naming-service.yaml @@ -0,0 +1,8 @@ +config: +- CDts-cas-stm: template.json + +CDts-cas-stm: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: ts-cas-stm +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_ts-cas-stm/conditional-naming-service/template.json b/BMW-Dynatrace-config/CD_ts-cas-stm/conditional-naming-service/template.json new file mode 100644 index 00000000..5d4fac56 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-cas-stm/conditional-naming-service/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "type": "SERVICE" +} \ 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 index d41c4c77..5f35e5c1 100644 --- 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 @@ -1,30 +1,4 @@ -## 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 configure custom services? -## 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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Custom+Services) page to configure your custom services. \ 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 index 92e734fa..1695924c 100644 --- a/BMW-Dynatrace-config/CD_ts-cas-stm/synthetic-monitor/README.md +++ b/BMW-Dynatrace-config/CD_ts-cas-stm/synthetic-monitor/README.md @@ -1,37 +1,4 @@ -# Synthetic Configuration -To calculate the Availability KPI, a synthetic must be configured. +### How to configure synthetics? -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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Synthetic+Monitors) page to configure your synthetics. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-datadispatcher/conditional-naming-processgroup/README.md b/BMW-Dynatrace-config/CD_ts-datadispatcher/conditional-naming-processgroup/README.md new file mode 100644 index 00000000..f94196a5 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-datadispatcher/conditional-naming-processgroup/README.md @@ -0,0 +1,67 @@ +### Process Group Detection Rules and Naming + +#### Detection Rule or Naming? + +For the explanation, we're using a real example of the Infotainment application: + +!(PGNaming1)[../../../../img/PGNaming1.PNG] + +Before working with your dashboards and alerting profiles, an important task to do when working with Dynatrace is checking +the structure of your applications (process groups). You can do that clicking under *technologies* and filter using your +application Management Zone. + +In the picture above, there are two Process Groups called bon-information-prod. **If you see duplicated process groups like in** +**this case, you MUST follow this guideline** + +Next step would be to open both process groups and compare the metadata. In that way, you can identify if all process instances are +part of the same application or not. An easy way to do that is asking yourself: how many instances of my application do i have? + +If you have 4 instances in total and you're able to see 2 in one PG and other 2 in other PG it means that **they are part of the ** +**same application** + +Another situation could be that checking on the metadata, then you see that are **two different application** and Dynatrace is just naming +the process group in the same way + +*Same application* +- Problem: Dynatrace is creating two different process groups, what transalates in two separated services for the same application. Instead of +seeing all the traffic in one service, you will have it splitted and it will complicate your monitoring +- Solution: create a process group detection rule. Contact Dynatrace Expert + +*Different application* +- Problem: Dynatrace is just naming in the same way applications that are different. +- Solution: This case is less severe, since it can be fixed with a process group naming rule. + + +What about our example? +!(PGNaming2)[../../../../img/PGNaming2.PNG] +!(PGNaming3)[../../../../img/PGNaming3.PNG] + +Based on the feedback of the infotaiment team, each process group is a different application (microservice) and it's visible in the kubernetes container/workload +within the metadata of each Process Group. + +#### How to create a Process Group Detection Rule +1. Open the *conditional-naming-processgroup.yaml* file and create a rule that looks like this: +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName} +- tag: Infotainment +- skipDeployment: false +``` +The result of the rule will be renaming the PG to this: +``` +bon-information-prod ipa +bon-information-prod rsl +``` + +Other possible placeholders that you can use are for example: +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName/[^\\-]*$} +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesFullPodName/buffet-(.*?)-} +{ProcessGroup:DetectedName} - {HostGroup:Name/[^\\_]*$} +{ProcessGroup:KubernetesNamespace} +{ProcessGroup:CommandLineArgs/.*?\\-f\\s\\/www\\/(.*?)\\/generated\\/httpd\\.conf.*?} + +You can combine different ones. Check the (documentation)[link] for more \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-datadispatcher/conditional-naming-processgroup/conditional-naming-processgroup.yaml b/BMW-Dynatrace-config/CD_ts-datadispatcher/conditional-naming-processgroup/conditional-naming-processgroup.yaml new file mode 100644 index 00000000..b75c6fa4 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-datadispatcher/conditional-naming-processgroup/conditional-naming-processgroup.yaml @@ -0,0 +1,8 @@ +config: +- CDts-datadispatcher: template.json + +CDts-datadispatcher: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: ts-datadispatcher +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_ts-datadispatcher/conditional-naming-processgroup/template.json b/BMW-Dynatrace-config/CD_ts-datadispatcher/conditional-naming-processgroup/template.json new file mode 100644 index 00000000..7c039808 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-datadispatcher/conditional-naming-processgroup/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "type": "PROCESS_GROUP" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-datadispatcher/conditional-naming-service/README.md b/BMW-Dynatrace-config/CD_ts-datadispatcher/conditional-naming-service/README.md new file mode 100644 index 00000000..c34ef308 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-datadispatcher/conditional-naming-service/README.md @@ -0,0 +1,35 @@ +### Service Naming Rules + +A typical case could be that you access to *Transaction & Services* and you find two services that are exactly the same: +*DataDownloadV1* +*DataDownloadV1* + +If you drilldown into the service and you check in the process group, you may have a PROD and a E2E for each service. + +*Note: if you see that both process group are exactly the same, please contact a Dynatrace expert to create a Process* +*Group detection rule* + +In the case the PG are PROD and E2E, then we need to create a rule that looks like this: + +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {Service:DetectedName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +- tag: Infotainment +- skipDeployment: false +``` + +The rule will get the Service Detected Name (current name) and it will extract (with a regex) the part of the kubernetes namespace after the "-", so -prod or -e2e, resulting in: +*DataDownloadV1 - prod* +*DataDownloadV1 - e2e* + +Now, services will be easy to identify. + +You can create rules based on any property/metadata. Some other placeholder's eamples: +{Service:DatabaseName} - E2E +{Service:WebServiceName} - {ProcessGroup:Kubernetes:microservice} - {ProcessGroup:Kubernetes:environment} +{Service:DetectedName} - {ProcessGroup:KubernetesContainerName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +{Service:DetectedName} - {ProcessGroup:SpringBootProfileName/[^\\-]*$} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-datadispatcher/conditional-naming-service/conditional-naming-service.yaml b/BMW-Dynatrace-config/CD_ts-datadispatcher/conditional-naming-service/conditional-naming-service.yaml new file mode 100644 index 00000000..b75c6fa4 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-datadispatcher/conditional-naming-service/conditional-naming-service.yaml @@ -0,0 +1,8 @@ +config: +- CDts-datadispatcher: template.json + +CDts-datadispatcher: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: ts-datadispatcher +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_ts-datadispatcher/conditional-naming-service/template.json b/BMW-Dynatrace-config/CD_ts-datadispatcher/conditional-naming-service/template.json new file mode 100644 index 00000000..5d4fac56 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-datadispatcher/conditional-naming-service/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "type": "SERVICE" +} \ 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 index d41c4c77..5f35e5c1 100644 --- a/BMW-Dynatrace-config/CD_ts-datadispatcher/custom-service-java/README.md +++ b/BMW-Dynatrace-config/CD_ts-datadispatcher/custom-service-java/README.md @@ -1,30 +1,4 @@ -## 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 configure custom services? -## 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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Custom+Services) page to configure your custom services. \ 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 index 92e734fa..1695924c 100644 --- a/BMW-Dynatrace-config/CD_ts-datadispatcher/synthetic-monitor/README.md +++ b/BMW-Dynatrace-config/CD_ts-datadispatcher/synthetic-monitor/README.md @@ -1,37 +1,4 @@ -# Synthetic Configuration -To calculate the Availability KPI, a synthetic must be configured. +### How to configure synthetics? -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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Synthetic+Monitors) page to configure your synthetics. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-diagservice/conditional-naming-processgroup/README.md b/BMW-Dynatrace-config/CD_ts-diagservice/conditional-naming-processgroup/README.md new file mode 100644 index 00000000..f94196a5 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-diagservice/conditional-naming-processgroup/README.md @@ -0,0 +1,67 @@ +### Process Group Detection Rules and Naming + +#### Detection Rule or Naming? + +For the explanation, we're using a real example of the Infotainment application: + +!(PGNaming1)[../../../../img/PGNaming1.PNG] + +Before working with your dashboards and alerting profiles, an important task to do when working with Dynatrace is checking +the structure of your applications (process groups). You can do that clicking under *technologies* and filter using your +application Management Zone. + +In the picture above, there are two Process Groups called bon-information-prod. **If you see duplicated process groups like in** +**this case, you MUST follow this guideline** + +Next step would be to open both process groups and compare the metadata. In that way, you can identify if all process instances are +part of the same application or not. An easy way to do that is asking yourself: how many instances of my application do i have? + +If you have 4 instances in total and you're able to see 2 in one PG and other 2 in other PG it means that **they are part of the ** +**same application** + +Another situation could be that checking on the metadata, then you see that are **two different application** and Dynatrace is just naming +the process group in the same way + +*Same application* +- Problem: Dynatrace is creating two different process groups, what transalates in two separated services for the same application. Instead of +seeing all the traffic in one service, you will have it splitted and it will complicate your monitoring +- Solution: create a process group detection rule. Contact Dynatrace Expert + +*Different application* +- Problem: Dynatrace is just naming in the same way applications that are different. +- Solution: This case is less severe, since it can be fixed with a process group naming rule. + + +What about our example? +!(PGNaming2)[../../../../img/PGNaming2.PNG] +!(PGNaming3)[../../../../img/PGNaming3.PNG] + +Based on the feedback of the infotaiment team, each process group is a different application (microservice) and it's visible in the kubernetes container/workload +within the metadata of each Process Group. + +#### How to create a Process Group Detection Rule +1. Open the *conditional-naming-processgroup.yaml* file and create a rule that looks like this: +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName} +- tag: Infotainment +- skipDeployment: false +``` +The result of the rule will be renaming the PG to this: +``` +bon-information-prod ipa +bon-information-prod rsl +``` + +Other possible placeholders that you can use are for example: +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName/[^\\-]*$} +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesFullPodName/buffet-(.*?)-} +{ProcessGroup:DetectedName} - {HostGroup:Name/[^\\_]*$} +{ProcessGroup:KubernetesNamespace} +{ProcessGroup:CommandLineArgs/.*?\\-f\\s\\/www\\/(.*?)\\/generated\\/httpd\\.conf.*?} + +You can combine different ones. Check the (documentation)[link] for more \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-diagservice/conditional-naming-processgroup/conditional-naming-processgroup.yaml b/BMW-Dynatrace-config/CD_ts-diagservice/conditional-naming-processgroup/conditional-naming-processgroup.yaml new file mode 100644 index 00000000..7b8e77a8 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-diagservice/conditional-naming-processgroup/conditional-naming-processgroup.yaml @@ -0,0 +1,8 @@ +config: +- CDts-diagservice: template.json + +CDts-diagservice: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: ts-diagservice +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_ts-diagservice/conditional-naming-processgroup/template.json b/BMW-Dynatrace-config/CD_ts-diagservice/conditional-naming-processgroup/template.json new file mode 100644 index 00000000..7c039808 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-diagservice/conditional-naming-processgroup/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "type": "PROCESS_GROUP" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-diagservice/conditional-naming-service/README.md b/BMW-Dynatrace-config/CD_ts-diagservice/conditional-naming-service/README.md new file mode 100644 index 00000000..c34ef308 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-diagservice/conditional-naming-service/README.md @@ -0,0 +1,35 @@ +### Service Naming Rules + +A typical case could be that you access to *Transaction & Services* and you find two services that are exactly the same: +*DataDownloadV1* +*DataDownloadV1* + +If you drilldown into the service and you check in the process group, you may have a PROD and a E2E for each service. + +*Note: if you see that both process group are exactly the same, please contact a Dynatrace expert to create a Process* +*Group detection rule* + +In the case the PG are PROD and E2E, then we need to create a rule that looks like this: + +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {Service:DetectedName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +- tag: Infotainment +- skipDeployment: false +``` + +The rule will get the Service Detected Name (current name) and it will extract (with a regex) the part of the kubernetes namespace after the "-", so -prod or -e2e, resulting in: +*DataDownloadV1 - prod* +*DataDownloadV1 - e2e* + +Now, services will be easy to identify. + +You can create rules based on any property/metadata. Some other placeholder's eamples: +{Service:DatabaseName} - E2E +{Service:WebServiceName} - {ProcessGroup:Kubernetes:microservice} - {ProcessGroup:Kubernetes:environment} +{Service:DetectedName} - {ProcessGroup:KubernetesContainerName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +{Service:DetectedName} - {ProcessGroup:SpringBootProfileName/[^\\-]*$} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-diagservice/conditional-naming-service/conditional-naming-service.yaml b/BMW-Dynatrace-config/CD_ts-diagservice/conditional-naming-service/conditional-naming-service.yaml new file mode 100644 index 00000000..7b8e77a8 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-diagservice/conditional-naming-service/conditional-naming-service.yaml @@ -0,0 +1,8 @@ +config: +- CDts-diagservice: template.json + +CDts-diagservice: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: ts-diagservice +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_ts-diagservice/conditional-naming-service/template.json b/BMW-Dynatrace-config/CD_ts-diagservice/conditional-naming-service/template.json new file mode 100644 index 00000000..5d4fac56 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-diagservice/conditional-naming-service/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "type": "SERVICE" +} \ 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 index d41c4c77..5f35e5c1 100644 --- a/BMW-Dynatrace-config/CD_ts-diagservice/custom-service-java/README.md +++ b/BMW-Dynatrace-config/CD_ts-diagservice/custom-service-java/README.md @@ -1,30 +1,4 @@ -## 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 configure custom services? -## 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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Custom+Services) page to configure your custom services. \ 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 index 92e734fa..1695924c 100644 --- a/BMW-Dynatrace-config/CD_ts-diagservice/synthetic-monitor/README.md +++ b/BMW-Dynatrace-config/CD_ts-diagservice/synthetic-monitor/README.md @@ -1,37 +1,4 @@ -# Synthetic Configuration -To calculate the Availability KPI, a synthetic must be configured. +### How to configure synthetics? -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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Synthetic+Monitors) page to configure your synthetics. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-eshad/conditional-naming-processgroup/README.md b/BMW-Dynatrace-config/CD_ts-eshad/conditional-naming-processgroup/README.md new file mode 100644 index 00000000..f94196a5 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-eshad/conditional-naming-processgroup/README.md @@ -0,0 +1,67 @@ +### Process Group Detection Rules and Naming + +#### Detection Rule or Naming? + +For the explanation, we're using a real example of the Infotainment application: + +!(PGNaming1)[../../../../img/PGNaming1.PNG] + +Before working with your dashboards and alerting profiles, an important task to do when working with Dynatrace is checking +the structure of your applications (process groups). You can do that clicking under *technologies* and filter using your +application Management Zone. + +In the picture above, there are two Process Groups called bon-information-prod. **If you see duplicated process groups like in** +**this case, you MUST follow this guideline** + +Next step would be to open both process groups and compare the metadata. In that way, you can identify if all process instances are +part of the same application or not. An easy way to do that is asking yourself: how many instances of my application do i have? + +If you have 4 instances in total and you're able to see 2 in one PG and other 2 in other PG it means that **they are part of the ** +**same application** + +Another situation could be that checking on the metadata, then you see that are **two different application** and Dynatrace is just naming +the process group in the same way + +*Same application* +- Problem: Dynatrace is creating two different process groups, what transalates in two separated services for the same application. Instead of +seeing all the traffic in one service, you will have it splitted and it will complicate your monitoring +- Solution: create a process group detection rule. Contact Dynatrace Expert + +*Different application* +- Problem: Dynatrace is just naming in the same way applications that are different. +- Solution: This case is less severe, since it can be fixed with a process group naming rule. + + +What about our example? +!(PGNaming2)[../../../../img/PGNaming2.PNG] +!(PGNaming3)[../../../../img/PGNaming3.PNG] + +Based on the feedback of the infotaiment team, each process group is a different application (microservice) and it's visible in the kubernetes container/workload +within the metadata of each Process Group. + +#### How to create a Process Group Detection Rule +1. Open the *conditional-naming-processgroup.yaml* file and create a rule that looks like this: +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName} +- tag: Infotainment +- skipDeployment: false +``` +The result of the rule will be renaming the PG to this: +``` +bon-information-prod ipa +bon-information-prod rsl +``` + +Other possible placeholders that you can use are for example: +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName/[^\\-]*$} +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesFullPodName/buffet-(.*?)-} +{ProcessGroup:DetectedName} - {HostGroup:Name/[^\\_]*$} +{ProcessGroup:KubernetesNamespace} +{ProcessGroup:CommandLineArgs/.*?\\-f\\s\\/www\\/(.*?)\\/generated\\/httpd\\.conf.*?} + +You can combine different ones. Check the (documentation)[link] for more \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-eshad/conditional-naming-processgroup/conditional-naming-processgroup.yaml b/BMW-Dynatrace-config/CD_ts-eshad/conditional-naming-processgroup/conditional-naming-processgroup.yaml new file mode 100644 index 00000000..3ec9d228 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-eshad/conditional-naming-processgroup/conditional-naming-processgroup.yaml @@ -0,0 +1,8 @@ +config: +- CDts-eshad: template.json + +CDts-eshad: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: ts-eshad +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_ts-eshad/conditional-naming-processgroup/template.json b/BMW-Dynatrace-config/CD_ts-eshad/conditional-naming-processgroup/template.json new file mode 100644 index 00000000..7c039808 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-eshad/conditional-naming-processgroup/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "type": "PROCESS_GROUP" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-eshad/conditional-naming-service/README.md b/BMW-Dynatrace-config/CD_ts-eshad/conditional-naming-service/README.md new file mode 100644 index 00000000..c34ef308 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-eshad/conditional-naming-service/README.md @@ -0,0 +1,35 @@ +### Service Naming Rules + +A typical case could be that you access to *Transaction & Services* and you find two services that are exactly the same: +*DataDownloadV1* +*DataDownloadV1* + +If you drilldown into the service and you check in the process group, you may have a PROD and a E2E for each service. + +*Note: if you see that both process group are exactly the same, please contact a Dynatrace expert to create a Process* +*Group detection rule* + +In the case the PG are PROD and E2E, then we need to create a rule that looks like this: + +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {Service:DetectedName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +- tag: Infotainment +- skipDeployment: false +``` + +The rule will get the Service Detected Name (current name) and it will extract (with a regex) the part of the kubernetes namespace after the "-", so -prod or -e2e, resulting in: +*DataDownloadV1 - prod* +*DataDownloadV1 - e2e* + +Now, services will be easy to identify. + +You can create rules based on any property/metadata. Some other placeholder's eamples: +{Service:DatabaseName} - E2E +{Service:WebServiceName} - {ProcessGroup:Kubernetes:microservice} - {ProcessGroup:Kubernetes:environment} +{Service:DetectedName} - {ProcessGroup:KubernetesContainerName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +{Service:DetectedName} - {ProcessGroup:SpringBootProfileName/[^\\-]*$} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-eshad/conditional-naming-service/conditional-naming-service.yaml b/BMW-Dynatrace-config/CD_ts-eshad/conditional-naming-service/conditional-naming-service.yaml new file mode 100644 index 00000000..3ec9d228 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-eshad/conditional-naming-service/conditional-naming-service.yaml @@ -0,0 +1,8 @@ +config: +- CDts-eshad: template.json + +CDts-eshad: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: ts-eshad +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_ts-eshad/conditional-naming-service/template.json b/BMW-Dynatrace-config/CD_ts-eshad/conditional-naming-service/template.json new file mode 100644 index 00000000..5d4fac56 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-eshad/conditional-naming-service/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "type": "SERVICE" +} \ 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 index d41c4c77..5f35e5c1 100644 --- a/BMW-Dynatrace-config/CD_ts-eshad/custom-service-java/README.md +++ b/BMW-Dynatrace-config/CD_ts-eshad/custom-service-java/README.md @@ -1,30 +1,4 @@ -## 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 configure custom services? -## 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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Custom+Services) page to configure your custom services. \ 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 index 92e734fa..1695924c 100644 --- a/BMW-Dynatrace-config/CD_ts-eshad/synthetic-monitor/README.md +++ b/BMW-Dynatrace-config/CD_ts-eshad/synthetic-monitor/README.md @@ -1,37 +1,4 @@ -# Synthetic Configuration -To calculate the Availability KPI, a synthetic must be configured. +### How to configure synthetics? -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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Synthetic+Monitors) page to configure your synthetics. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-message-receiver/conditional-naming-processgroup/README.md b/BMW-Dynatrace-config/CD_ts-message-receiver/conditional-naming-processgroup/README.md new file mode 100644 index 00000000..f94196a5 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-message-receiver/conditional-naming-processgroup/README.md @@ -0,0 +1,67 @@ +### Process Group Detection Rules and Naming + +#### Detection Rule or Naming? + +For the explanation, we're using a real example of the Infotainment application: + +!(PGNaming1)[../../../../img/PGNaming1.PNG] + +Before working with your dashboards and alerting profiles, an important task to do when working with Dynatrace is checking +the structure of your applications (process groups). You can do that clicking under *technologies* and filter using your +application Management Zone. + +In the picture above, there are two Process Groups called bon-information-prod. **If you see duplicated process groups like in** +**this case, you MUST follow this guideline** + +Next step would be to open both process groups and compare the metadata. In that way, you can identify if all process instances are +part of the same application or not. An easy way to do that is asking yourself: how many instances of my application do i have? + +If you have 4 instances in total and you're able to see 2 in one PG and other 2 in other PG it means that **they are part of the ** +**same application** + +Another situation could be that checking on the metadata, then you see that are **two different application** and Dynatrace is just naming +the process group in the same way + +*Same application* +- Problem: Dynatrace is creating two different process groups, what transalates in two separated services for the same application. Instead of +seeing all the traffic in one service, you will have it splitted and it will complicate your monitoring +- Solution: create a process group detection rule. Contact Dynatrace Expert + +*Different application* +- Problem: Dynatrace is just naming in the same way applications that are different. +- Solution: This case is less severe, since it can be fixed with a process group naming rule. + + +What about our example? +!(PGNaming2)[../../../../img/PGNaming2.PNG] +!(PGNaming3)[../../../../img/PGNaming3.PNG] + +Based on the feedback of the infotaiment team, each process group is a different application (microservice) and it's visible in the kubernetes container/workload +within the metadata of each Process Group. + +#### How to create a Process Group Detection Rule +1. Open the *conditional-naming-processgroup.yaml* file and create a rule that looks like this: +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName} +- tag: Infotainment +- skipDeployment: false +``` +The result of the rule will be renaming the PG to this: +``` +bon-information-prod ipa +bon-information-prod rsl +``` + +Other possible placeholders that you can use are for example: +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName/[^\\-]*$} +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesFullPodName/buffet-(.*?)-} +{ProcessGroup:DetectedName} - {HostGroup:Name/[^\\_]*$} +{ProcessGroup:KubernetesNamespace} +{ProcessGroup:CommandLineArgs/.*?\\-f\\s\\/www\\/(.*?)\\/generated\\/httpd\\.conf.*?} + +You can combine different ones. Check the (documentation)[link] for more \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-message-receiver/conditional-naming-processgroup/conditional-naming-processgroup.yaml b/BMW-Dynatrace-config/CD_ts-message-receiver/conditional-naming-processgroup/conditional-naming-processgroup.yaml new file mode 100644 index 00000000..c6dabb5c --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-message-receiver/conditional-naming-processgroup/conditional-naming-processgroup.yaml @@ -0,0 +1,8 @@ +config: +- CDts-message-receiver: template.json + +CDts-message-receiver: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: ts-message-receiver +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_ts-message-receiver/conditional-naming-processgroup/template.json b/BMW-Dynatrace-config/CD_ts-message-receiver/conditional-naming-processgroup/template.json new file mode 100644 index 00000000..7c039808 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-message-receiver/conditional-naming-processgroup/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "type": "PROCESS_GROUP" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-message-receiver/conditional-naming-service/README.md b/BMW-Dynatrace-config/CD_ts-message-receiver/conditional-naming-service/README.md new file mode 100644 index 00000000..c34ef308 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-message-receiver/conditional-naming-service/README.md @@ -0,0 +1,35 @@ +### Service Naming Rules + +A typical case could be that you access to *Transaction & Services* and you find two services that are exactly the same: +*DataDownloadV1* +*DataDownloadV1* + +If you drilldown into the service and you check in the process group, you may have a PROD and a E2E for each service. + +*Note: if you see that both process group are exactly the same, please contact a Dynatrace expert to create a Process* +*Group detection rule* + +In the case the PG are PROD and E2E, then we need to create a rule that looks like this: + +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {Service:DetectedName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +- tag: Infotainment +- skipDeployment: false +``` + +The rule will get the Service Detected Name (current name) and it will extract (with a regex) the part of the kubernetes namespace after the "-", so -prod or -e2e, resulting in: +*DataDownloadV1 - prod* +*DataDownloadV1 - e2e* + +Now, services will be easy to identify. + +You can create rules based on any property/metadata. Some other placeholder's eamples: +{Service:DatabaseName} - E2E +{Service:WebServiceName} - {ProcessGroup:Kubernetes:microservice} - {ProcessGroup:Kubernetes:environment} +{Service:DetectedName} - {ProcessGroup:KubernetesContainerName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +{Service:DetectedName} - {ProcessGroup:SpringBootProfileName/[^\\-]*$} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-message-receiver/conditional-naming-service/conditional-naming-service.yaml b/BMW-Dynatrace-config/CD_ts-message-receiver/conditional-naming-service/conditional-naming-service.yaml new file mode 100644 index 00000000..c6dabb5c --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-message-receiver/conditional-naming-service/conditional-naming-service.yaml @@ -0,0 +1,8 @@ +config: +- CDts-message-receiver: template.json + +CDts-message-receiver: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: ts-message-receiver +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_ts-message-receiver/conditional-naming-service/template.json b/BMW-Dynatrace-config/CD_ts-message-receiver/conditional-naming-service/template.json new file mode 100644 index 00000000..5d4fac56 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-message-receiver/conditional-naming-service/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "type": "SERVICE" +} \ 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 index d41c4c77..5f35e5c1 100644 --- 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 @@ -1,30 +1,4 @@ -## 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 configure custom services? -## 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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Custom+Services) page to configure your custom services. \ 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 index 92e734fa..1695924c 100644 --- a/BMW-Dynatrace-config/CD_ts-message-receiver/synthetic-monitor/README.md +++ b/BMW-Dynatrace-config/CD_ts-message-receiver/synthetic-monitor/README.md @@ -1,37 +1,4 @@ -# Synthetic Configuration -To calculate the Availability KPI, a synthetic must be configured. +### How to configure synthetics? -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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Synthetic+Monitors) page to configure your synthetics. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-pdmupdater/conditional-naming-processgroup/README.md b/BMW-Dynatrace-config/CD_ts-pdmupdater/conditional-naming-processgroup/README.md new file mode 100644 index 00000000..f94196a5 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-pdmupdater/conditional-naming-processgroup/README.md @@ -0,0 +1,67 @@ +### Process Group Detection Rules and Naming + +#### Detection Rule or Naming? + +For the explanation, we're using a real example of the Infotainment application: + +!(PGNaming1)[../../../../img/PGNaming1.PNG] + +Before working with your dashboards and alerting profiles, an important task to do when working with Dynatrace is checking +the structure of your applications (process groups). You can do that clicking under *technologies* and filter using your +application Management Zone. + +In the picture above, there are two Process Groups called bon-information-prod. **If you see duplicated process groups like in** +**this case, you MUST follow this guideline** + +Next step would be to open both process groups and compare the metadata. In that way, you can identify if all process instances are +part of the same application or not. An easy way to do that is asking yourself: how many instances of my application do i have? + +If you have 4 instances in total and you're able to see 2 in one PG and other 2 in other PG it means that **they are part of the ** +**same application** + +Another situation could be that checking on the metadata, then you see that are **two different application** and Dynatrace is just naming +the process group in the same way + +*Same application* +- Problem: Dynatrace is creating two different process groups, what transalates in two separated services for the same application. Instead of +seeing all the traffic in one service, you will have it splitted and it will complicate your monitoring +- Solution: create a process group detection rule. Contact Dynatrace Expert + +*Different application* +- Problem: Dynatrace is just naming in the same way applications that are different. +- Solution: This case is less severe, since it can be fixed with a process group naming rule. + + +What about our example? +!(PGNaming2)[../../../../img/PGNaming2.PNG] +!(PGNaming3)[../../../../img/PGNaming3.PNG] + +Based on the feedback of the infotaiment team, each process group is a different application (microservice) and it's visible in the kubernetes container/workload +within the metadata of each Process Group. + +#### How to create a Process Group Detection Rule +1. Open the *conditional-naming-processgroup.yaml* file and create a rule that looks like this: +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName} +- tag: Infotainment +- skipDeployment: false +``` +The result of the rule will be renaming the PG to this: +``` +bon-information-prod ipa +bon-information-prod rsl +``` + +Other possible placeholders that you can use are for example: +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName/[^\\-]*$} +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesFullPodName/buffet-(.*?)-} +{ProcessGroup:DetectedName} - {HostGroup:Name/[^\\_]*$} +{ProcessGroup:KubernetesNamespace} +{ProcessGroup:CommandLineArgs/.*?\\-f\\s\\/www\\/(.*?)\\/generated\\/httpd\\.conf.*?} + +You can combine different ones. Check the (documentation)[link] for more \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-pdmupdater/conditional-naming-processgroup/conditional-naming-processgroup.yaml b/BMW-Dynatrace-config/CD_ts-pdmupdater/conditional-naming-processgroup/conditional-naming-processgroup.yaml new file mode 100644 index 00000000..c93e39df --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-pdmupdater/conditional-naming-processgroup/conditional-naming-processgroup.yaml @@ -0,0 +1,8 @@ +config: +- CDts-pdmupdater: template.json + +CDts-pdmupdater: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: ts-pdmupdater +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_ts-pdmupdater/conditional-naming-processgroup/template.json b/BMW-Dynatrace-config/CD_ts-pdmupdater/conditional-naming-processgroup/template.json new file mode 100644 index 00000000..7c039808 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-pdmupdater/conditional-naming-processgroup/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "type": "PROCESS_GROUP" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-pdmupdater/conditional-naming-service/README.md b/BMW-Dynatrace-config/CD_ts-pdmupdater/conditional-naming-service/README.md new file mode 100644 index 00000000..c34ef308 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-pdmupdater/conditional-naming-service/README.md @@ -0,0 +1,35 @@ +### Service Naming Rules + +A typical case could be that you access to *Transaction & Services* and you find two services that are exactly the same: +*DataDownloadV1* +*DataDownloadV1* + +If you drilldown into the service and you check in the process group, you may have a PROD and a E2E for each service. + +*Note: if you see that both process group are exactly the same, please contact a Dynatrace expert to create a Process* +*Group detection rule* + +In the case the PG are PROD and E2E, then we need to create a rule that looks like this: + +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {Service:DetectedName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +- tag: Infotainment +- skipDeployment: false +``` + +The rule will get the Service Detected Name (current name) and it will extract (with a regex) the part of the kubernetes namespace after the "-", so -prod or -e2e, resulting in: +*DataDownloadV1 - prod* +*DataDownloadV1 - e2e* + +Now, services will be easy to identify. + +You can create rules based on any property/metadata. Some other placeholder's eamples: +{Service:DatabaseName} - E2E +{Service:WebServiceName} - {ProcessGroup:Kubernetes:microservice} - {ProcessGroup:Kubernetes:environment} +{Service:DetectedName} - {ProcessGroup:KubernetesContainerName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +{Service:DetectedName} - {ProcessGroup:SpringBootProfileName/[^\\-]*$} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-pdmupdater/conditional-naming-service/conditional-naming-service.yaml b/BMW-Dynatrace-config/CD_ts-pdmupdater/conditional-naming-service/conditional-naming-service.yaml new file mode 100644 index 00000000..c93e39df --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-pdmupdater/conditional-naming-service/conditional-naming-service.yaml @@ -0,0 +1,8 @@ +config: +- CDts-pdmupdater: template.json + +CDts-pdmupdater: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: ts-pdmupdater +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_ts-pdmupdater/conditional-naming-service/template.json b/BMW-Dynatrace-config/CD_ts-pdmupdater/conditional-naming-service/template.json new file mode 100644 index 00000000..5d4fac56 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-pdmupdater/conditional-naming-service/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "type": "SERVICE" +} \ 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 index d41c4c77..5f35e5c1 100644 --- a/BMW-Dynatrace-config/CD_ts-pdmupdater/custom-service-java/README.md +++ b/BMW-Dynatrace-config/CD_ts-pdmupdater/custom-service-java/README.md @@ -1,30 +1,4 @@ -## 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 configure custom services? -## 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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Custom+Services) page to configure your custom services. \ 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 index 92e734fa..1695924c 100644 --- a/BMW-Dynatrace-config/CD_ts-pdmupdater/synthetic-monitor/README.md +++ b/BMW-Dynatrace-config/CD_ts-pdmupdater/synthetic-monitor/README.md @@ -1,37 +1,4 @@ -# Synthetic Configuration -To calculate the Availability KPI, a synthetic must be configured. +### How to configure synthetics? -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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Synthetic+Monitors) page to configure your synthetics. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-pservice/conditional-naming-processgroup/README.md b/BMW-Dynatrace-config/CD_ts-pservice/conditional-naming-processgroup/README.md new file mode 100644 index 00000000..f94196a5 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-pservice/conditional-naming-processgroup/README.md @@ -0,0 +1,67 @@ +### Process Group Detection Rules and Naming + +#### Detection Rule or Naming? + +For the explanation, we're using a real example of the Infotainment application: + +!(PGNaming1)[../../../../img/PGNaming1.PNG] + +Before working with your dashboards and alerting profiles, an important task to do when working with Dynatrace is checking +the structure of your applications (process groups). You can do that clicking under *technologies* and filter using your +application Management Zone. + +In the picture above, there are two Process Groups called bon-information-prod. **If you see duplicated process groups like in** +**this case, you MUST follow this guideline** + +Next step would be to open both process groups and compare the metadata. In that way, you can identify if all process instances are +part of the same application or not. An easy way to do that is asking yourself: how many instances of my application do i have? + +If you have 4 instances in total and you're able to see 2 in one PG and other 2 in other PG it means that **they are part of the ** +**same application** + +Another situation could be that checking on the metadata, then you see that are **two different application** and Dynatrace is just naming +the process group in the same way + +*Same application* +- Problem: Dynatrace is creating two different process groups, what transalates in two separated services for the same application. Instead of +seeing all the traffic in one service, you will have it splitted and it will complicate your monitoring +- Solution: create a process group detection rule. Contact Dynatrace Expert + +*Different application* +- Problem: Dynatrace is just naming in the same way applications that are different. +- Solution: This case is less severe, since it can be fixed with a process group naming rule. + + +What about our example? +!(PGNaming2)[../../../../img/PGNaming2.PNG] +!(PGNaming3)[../../../../img/PGNaming3.PNG] + +Based on the feedback of the infotaiment team, each process group is a different application (microservice) and it's visible in the kubernetes container/workload +within the metadata of each Process Group. + +#### How to create a Process Group Detection Rule +1. Open the *conditional-naming-processgroup.yaml* file and create a rule that looks like this: +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName} +- tag: Infotainment +- skipDeployment: false +``` +The result of the rule will be renaming the PG to this: +``` +bon-information-prod ipa +bon-information-prod rsl +``` + +Other possible placeholders that you can use are for example: +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName/[^\\-]*$} +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesFullPodName/buffet-(.*?)-} +{ProcessGroup:DetectedName} - {HostGroup:Name/[^\\_]*$} +{ProcessGroup:KubernetesNamespace} +{ProcessGroup:CommandLineArgs/.*?\\-f\\s\\/www\\/(.*?)\\/generated\\/httpd\\.conf.*?} + +You can combine different ones. Check the (documentation)[link] for more \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-pservice/conditional-naming-processgroup/conditional-naming-processgroup.yaml b/BMW-Dynatrace-config/CD_ts-pservice/conditional-naming-processgroup/conditional-naming-processgroup.yaml new file mode 100644 index 00000000..b88a4b69 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-pservice/conditional-naming-processgroup/conditional-naming-processgroup.yaml @@ -0,0 +1,8 @@ +config: +- CDts-pservice: template.json + +CDts-pservice: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: ts-pservice +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_ts-pservice/conditional-naming-processgroup/template.json b/BMW-Dynatrace-config/CD_ts-pservice/conditional-naming-processgroup/template.json new file mode 100644 index 00000000..7c039808 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-pservice/conditional-naming-processgroup/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "type": "PROCESS_GROUP" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-pservice/conditional-naming-service/README.md b/BMW-Dynatrace-config/CD_ts-pservice/conditional-naming-service/README.md new file mode 100644 index 00000000..c34ef308 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-pservice/conditional-naming-service/README.md @@ -0,0 +1,35 @@ +### Service Naming Rules + +A typical case could be that you access to *Transaction & Services* and you find two services that are exactly the same: +*DataDownloadV1* +*DataDownloadV1* + +If you drilldown into the service and you check in the process group, you may have a PROD and a E2E for each service. + +*Note: if you see that both process group are exactly the same, please contact a Dynatrace expert to create a Process* +*Group detection rule* + +In the case the PG are PROD and E2E, then we need to create a rule that looks like this: + +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {Service:DetectedName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +- tag: Infotainment +- skipDeployment: false +``` + +The rule will get the Service Detected Name (current name) and it will extract (with a regex) the part of the kubernetes namespace after the "-", so -prod or -e2e, resulting in: +*DataDownloadV1 - prod* +*DataDownloadV1 - e2e* + +Now, services will be easy to identify. + +You can create rules based on any property/metadata. Some other placeholder's eamples: +{Service:DatabaseName} - E2E +{Service:WebServiceName} - {ProcessGroup:Kubernetes:microservice} - {ProcessGroup:Kubernetes:environment} +{Service:DetectedName} - {ProcessGroup:KubernetesContainerName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +{Service:DetectedName} - {ProcessGroup:SpringBootProfileName/[^\\-]*$} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-pservice/conditional-naming-service/conditional-naming-service.yaml b/BMW-Dynatrace-config/CD_ts-pservice/conditional-naming-service/conditional-naming-service.yaml new file mode 100644 index 00000000..b88a4b69 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-pservice/conditional-naming-service/conditional-naming-service.yaml @@ -0,0 +1,8 @@ +config: +- CDts-pservice: template.json + +CDts-pservice: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: ts-pservice +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_ts-pservice/conditional-naming-service/template.json b/BMW-Dynatrace-config/CD_ts-pservice/conditional-naming-service/template.json new file mode 100644 index 00000000..5d4fac56 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-pservice/conditional-naming-service/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "type": "SERVICE" +} \ 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 index d41c4c77..5f35e5c1 100644 --- a/BMW-Dynatrace-config/CD_ts-pservice/custom-service-java/README.md +++ b/BMW-Dynatrace-config/CD_ts-pservice/custom-service-java/README.md @@ -1,30 +1,4 @@ -## 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 configure custom services? -## 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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Custom+Services) page to configure your custom services. \ 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 index 92e734fa..1695924c 100644 --- a/BMW-Dynatrace-config/CD_ts-pservice/synthetic-monitor/README.md +++ b/BMW-Dynatrace-config/CD_ts-pservice/synthetic-monitor/README.md @@ -1,37 +1,4 @@ -# Synthetic Configuration -To calculate the Availability KPI, a synthetic must be configured. +### How to configure synthetics? -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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Synthetic+Monitors) page to configure your synthetics. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-remotediagnosis/conditional-naming-processgroup/README.md b/BMW-Dynatrace-config/CD_ts-remotediagnosis/conditional-naming-processgroup/README.md new file mode 100644 index 00000000..f94196a5 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-remotediagnosis/conditional-naming-processgroup/README.md @@ -0,0 +1,67 @@ +### Process Group Detection Rules and Naming + +#### Detection Rule or Naming? + +For the explanation, we're using a real example of the Infotainment application: + +!(PGNaming1)[../../../../img/PGNaming1.PNG] + +Before working with your dashboards and alerting profiles, an important task to do when working with Dynatrace is checking +the structure of your applications (process groups). You can do that clicking under *technologies* and filter using your +application Management Zone. + +In the picture above, there are two Process Groups called bon-information-prod. **If you see duplicated process groups like in** +**this case, you MUST follow this guideline** + +Next step would be to open both process groups and compare the metadata. In that way, you can identify if all process instances are +part of the same application or not. An easy way to do that is asking yourself: how many instances of my application do i have? + +If you have 4 instances in total and you're able to see 2 in one PG and other 2 in other PG it means that **they are part of the ** +**same application** + +Another situation could be that checking on the metadata, then you see that are **two different application** and Dynatrace is just naming +the process group in the same way + +*Same application* +- Problem: Dynatrace is creating two different process groups, what transalates in two separated services for the same application. Instead of +seeing all the traffic in one service, you will have it splitted and it will complicate your monitoring +- Solution: create a process group detection rule. Contact Dynatrace Expert + +*Different application* +- Problem: Dynatrace is just naming in the same way applications that are different. +- Solution: This case is less severe, since it can be fixed with a process group naming rule. + + +What about our example? +!(PGNaming2)[../../../../img/PGNaming2.PNG] +!(PGNaming3)[../../../../img/PGNaming3.PNG] + +Based on the feedback of the infotaiment team, each process group is a different application (microservice) and it's visible in the kubernetes container/workload +within the metadata of each Process Group. + +#### How to create a Process Group Detection Rule +1. Open the *conditional-naming-processgroup.yaml* file and create a rule that looks like this: +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName} +- tag: Infotainment +- skipDeployment: false +``` +The result of the rule will be renaming the PG to this: +``` +bon-information-prod ipa +bon-information-prod rsl +``` + +Other possible placeholders that you can use are for example: +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName/[^\\-]*$} +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesFullPodName/buffet-(.*?)-} +{ProcessGroup:DetectedName} - {HostGroup:Name/[^\\_]*$} +{ProcessGroup:KubernetesNamespace} +{ProcessGroup:CommandLineArgs/.*?\\-f\\s\\/www\\/(.*?)\\/generated\\/httpd\\.conf.*?} + +You can combine different ones. Check the (documentation)[link] for more \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-remotediagnosis/conditional-naming-processgroup/conditional-naming-processgroup.yaml b/BMW-Dynatrace-config/CD_ts-remotediagnosis/conditional-naming-processgroup/conditional-naming-processgroup.yaml new file mode 100644 index 00000000..26e8d6c3 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-remotediagnosis/conditional-naming-processgroup/conditional-naming-processgroup.yaml @@ -0,0 +1,8 @@ +config: +- CDts-remotediagnosis: template.json + +CDts-remotediagnosis: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: ts-remotediagnosis +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_ts-remotediagnosis/conditional-naming-processgroup/template.json b/BMW-Dynatrace-config/CD_ts-remotediagnosis/conditional-naming-processgroup/template.json new file mode 100644 index 00000000..7c039808 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-remotediagnosis/conditional-naming-processgroup/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "type": "PROCESS_GROUP" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-remotediagnosis/conditional-naming-service/README.md b/BMW-Dynatrace-config/CD_ts-remotediagnosis/conditional-naming-service/README.md new file mode 100644 index 00000000..c34ef308 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-remotediagnosis/conditional-naming-service/README.md @@ -0,0 +1,35 @@ +### Service Naming Rules + +A typical case could be that you access to *Transaction & Services* and you find two services that are exactly the same: +*DataDownloadV1* +*DataDownloadV1* + +If you drilldown into the service and you check in the process group, you may have a PROD and a E2E for each service. + +*Note: if you see that both process group are exactly the same, please contact a Dynatrace expert to create a Process* +*Group detection rule* + +In the case the PG are PROD and E2E, then we need to create a rule that looks like this: + +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {Service:DetectedName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +- tag: Infotainment +- skipDeployment: false +``` + +The rule will get the Service Detected Name (current name) and it will extract (with a regex) the part of the kubernetes namespace after the "-", so -prod or -e2e, resulting in: +*DataDownloadV1 - prod* +*DataDownloadV1 - e2e* + +Now, services will be easy to identify. + +You can create rules based on any property/metadata. Some other placeholder's eamples: +{Service:DatabaseName} - E2E +{Service:WebServiceName} - {ProcessGroup:Kubernetes:microservice} - {ProcessGroup:Kubernetes:environment} +{Service:DetectedName} - {ProcessGroup:KubernetesContainerName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +{Service:DetectedName} - {ProcessGroup:SpringBootProfileName/[^\\-]*$} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-remotediagnosis/conditional-naming-service/conditional-naming-service.yaml b/BMW-Dynatrace-config/CD_ts-remotediagnosis/conditional-naming-service/conditional-naming-service.yaml new file mode 100644 index 00000000..26e8d6c3 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-remotediagnosis/conditional-naming-service/conditional-naming-service.yaml @@ -0,0 +1,8 @@ +config: +- CDts-remotediagnosis: template.json + +CDts-remotediagnosis: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: ts-remotediagnosis +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_ts-remotediagnosis/conditional-naming-service/template.json b/BMW-Dynatrace-config/CD_ts-remotediagnosis/conditional-naming-service/template.json new file mode 100644 index 00000000..5d4fac56 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-remotediagnosis/conditional-naming-service/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "type": "SERVICE" +} \ 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 index d41c4c77..5f35e5c1 100644 --- a/BMW-Dynatrace-config/CD_ts-remotediagnosis/custom-service-java/README.md +++ b/BMW-Dynatrace-config/CD_ts-remotediagnosis/custom-service-java/README.md @@ -1,30 +1,4 @@ -## 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 configure custom services? -## 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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Custom+Services) page to configure your custom services. \ 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 index 92e734fa..1695924c 100644 --- a/BMW-Dynatrace-config/CD_ts-remotediagnosis/synthetic-monitor/README.md +++ b/BMW-Dynatrace-config/CD_ts-remotediagnosis/synthetic-monitor/README.md @@ -1,37 +1,4 @@ -# Synthetic Configuration -To calculate the Availability KPI, a synthetic must be configured. +### How to configure synthetics? -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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Synthetic+Monitors) page to configure your synthetics. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-rsurservice/conditional-naming-processgroup/README.md b/BMW-Dynatrace-config/CD_ts-rsurservice/conditional-naming-processgroup/README.md new file mode 100644 index 00000000..f94196a5 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-rsurservice/conditional-naming-processgroup/README.md @@ -0,0 +1,67 @@ +### Process Group Detection Rules and Naming + +#### Detection Rule or Naming? + +For the explanation, we're using a real example of the Infotainment application: + +!(PGNaming1)[../../../../img/PGNaming1.PNG] + +Before working with your dashboards and alerting profiles, an important task to do when working with Dynatrace is checking +the structure of your applications (process groups). You can do that clicking under *technologies* and filter using your +application Management Zone. + +In the picture above, there are two Process Groups called bon-information-prod. **If you see duplicated process groups like in** +**this case, you MUST follow this guideline** + +Next step would be to open both process groups and compare the metadata. In that way, you can identify if all process instances are +part of the same application or not. An easy way to do that is asking yourself: how many instances of my application do i have? + +If you have 4 instances in total and you're able to see 2 in one PG and other 2 in other PG it means that **they are part of the ** +**same application** + +Another situation could be that checking on the metadata, then you see that are **two different application** and Dynatrace is just naming +the process group in the same way + +*Same application* +- Problem: Dynatrace is creating two different process groups, what transalates in two separated services for the same application. Instead of +seeing all the traffic in one service, you will have it splitted and it will complicate your monitoring +- Solution: create a process group detection rule. Contact Dynatrace Expert + +*Different application* +- Problem: Dynatrace is just naming in the same way applications that are different. +- Solution: This case is less severe, since it can be fixed with a process group naming rule. + + +What about our example? +!(PGNaming2)[../../../../img/PGNaming2.PNG] +!(PGNaming3)[../../../../img/PGNaming3.PNG] + +Based on the feedback of the infotaiment team, each process group is a different application (microservice) and it's visible in the kubernetes container/workload +within the metadata of each Process Group. + +#### How to create a Process Group Detection Rule +1. Open the *conditional-naming-processgroup.yaml* file and create a rule that looks like this: +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName} +- tag: Infotainment +- skipDeployment: false +``` +The result of the rule will be renaming the PG to this: +``` +bon-information-prod ipa +bon-information-prod rsl +``` + +Other possible placeholders that you can use are for example: +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName/[^\\-]*$} +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesFullPodName/buffet-(.*?)-} +{ProcessGroup:DetectedName} - {HostGroup:Name/[^\\_]*$} +{ProcessGroup:KubernetesNamespace} +{ProcessGroup:CommandLineArgs/.*?\\-f\\s\\/www\\/(.*?)\\/generated\\/httpd\\.conf.*?} + +You can combine different ones. Check the (documentation)[link] for more \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-rsurservice/conditional-naming-processgroup/conditional-naming-processgroup.yaml b/BMW-Dynatrace-config/CD_ts-rsurservice/conditional-naming-processgroup/conditional-naming-processgroup.yaml new file mode 100644 index 00000000..389174da --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-rsurservice/conditional-naming-processgroup/conditional-naming-processgroup.yaml @@ -0,0 +1,8 @@ +config: +- CDts-rsurservice: template.json + +CDts-rsurservice: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: ts-rsurservice +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_ts-rsurservice/conditional-naming-processgroup/template.json b/BMW-Dynatrace-config/CD_ts-rsurservice/conditional-naming-processgroup/template.json new file mode 100644 index 00000000..7c039808 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-rsurservice/conditional-naming-processgroup/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "type": "PROCESS_GROUP" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-rsurservice/conditional-naming-service/README.md b/BMW-Dynatrace-config/CD_ts-rsurservice/conditional-naming-service/README.md new file mode 100644 index 00000000..c34ef308 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-rsurservice/conditional-naming-service/README.md @@ -0,0 +1,35 @@ +### Service Naming Rules + +A typical case could be that you access to *Transaction & Services* and you find two services that are exactly the same: +*DataDownloadV1* +*DataDownloadV1* + +If you drilldown into the service and you check in the process group, you may have a PROD and a E2E for each service. + +*Note: if you see that both process group are exactly the same, please contact a Dynatrace expert to create a Process* +*Group detection rule* + +In the case the PG are PROD and E2E, then we need to create a rule that looks like this: + +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {Service:DetectedName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +- tag: Infotainment +- skipDeployment: false +``` + +The rule will get the Service Detected Name (current name) and it will extract (with a regex) the part of the kubernetes namespace after the "-", so -prod or -e2e, resulting in: +*DataDownloadV1 - prod* +*DataDownloadV1 - e2e* + +Now, services will be easy to identify. + +You can create rules based on any property/metadata. Some other placeholder's eamples: +{Service:DatabaseName} - E2E +{Service:WebServiceName} - {ProcessGroup:Kubernetes:microservice} - {ProcessGroup:Kubernetes:environment} +{Service:DetectedName} - {ProcessGroup:KubernetesContainerName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +{Service:DetectedName} - {ProcessGroup:SpringBootProfileName/[^\\-]*$} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-rsurservice/conditional-naming-service/conditional-naming-service.yaml b/BMW-Dynatrace-config/CD_ts-rsurservice/conditional-naming-service/conditional-naming-service.yaml new file mode 100644 index 00000000..389174da --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-rsurservice/conditional-naming-service/conditional-naming-service.yaml @@ -0,0 +1,8 @@ +config: +- CDts-rsurservice: template.json + +CDts-rsurservice: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: ts-rsurservice +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_ts-rsurservice/conditional-naming-service/template.json b/BMW-Dynatrace-config/CD_ts-rsurservice/conditional-naming-service/template.json new file mode 100644 index 00000000..5d4fac56 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-rsurservice/conditional-naming-service/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "type": "SERVICE" +} \ 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 index d41c4c77..5f35e5c1 100644 --- a/BMW-Dynatrace-config/CD_ts-rsurservice/custom-service-java/README.md +++ b/BMW-Dynatrace-config/CD_ts-rsurservice/custom-service-java/README.md @@ -1,30 +1,4 @@ -## 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 configure custom services? -## 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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Custom+Services) page to configure your custom services. \ 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 index 92e734fa..1695924c 100644 --- a/BMW-Dynatrace-config/CD_ts-rsurservice/synthetic-monitor/README.md +++ b/BMW-Dynatrace-config/CD_ts-rsurservice/synthetic-monitor/README.md @@ -1,37 +1,4 @@ -# Synthetic Configuration -To calculate the Availability KPI, a synthetic must be configured. +### How to configure synthetics? -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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Synthetic+Monitors) page to configure your synthetics. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-rtcadapter/conditional-naming-processgroup/README.md b/BMW-Dynatrace-config/CD_ts-rtcadapter/conditional-naming-processgroup/README.md new file mode 100644 index 00000000..f94196a5 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-rtcadapter/conditional-naming-processgroup/README.md @@ -0,0 +1,67 @@ +### Process Group Detection Rules and Naming + +#### Detection Rule or Naming? + +For the explanation, we're using a real example of the Infotainment application: + +!(PGNaming1)[../../../../img/PGNaming1.PNG] + +Before working with your dashboards and alerting profiles, an important task to do when working with Dynatrace is checking +the structure of your applications (process groups). You can do that clicking under *technologies* and filter using your +application Management Zone. + +In the picture above, there are two Process Groups called bon-information-prod. **If you see duplicated process groups like in** +**this case, you MUST follow this guideline** + +Next step would be to open both process groups and compare the metadata. In that way, you can identify if all process instances are +part of the same application or not. An easy way to do that is asking yourself: how many instances of my application do i have? + +If you have 4 instances in total and you're able to see 2 in one PG and other 2 in other PG it means that **they are part of the ** +**same application** + +Another situation could be that checking on the metadata, then you see that are **two different application** and Dynatrace is just naming +the process group in the same way + +*Same application* +- Problem: Dynatrace is creating two different process groups, what transalates in two separated services for the same application. Instead of +seeing all the traffic in one service, you will have it splitted and it will complicate your monitoring +- Solution: create a process group detection rule. Contact Dynatrace Expert + +*Different application* +- Problem: Dynatrace is just naming in the same way applications that are different. +- Solution: This case is less severe, since it can be fixed with a process group naming rule. + + +What about our example? +!(PGNaming2)[../../../../img/PGNaming2.PNG] +!(PGNaming3)[../../../../img/PGNaming3.PNG] + +Based on the feedback of the infotaiment team, each process group is a different application (microservice) and it's visible in the kubernetes container/workload +within the metadata of each Process Group. + +#### How to create a Process Group Detection Rule +1. Open the *conditional-naming-processgroup.yaml* file and create a rule that looks like this: +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName} +- tag: Infotainment +- skipDeployment: false +``` +The result of the rule will be renaming the PG to this: +``` +bon-information-prod ipa +bon-information-prod rsl +``` + +Other possible placeholders that you can use are for example: +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName/[^\\-]*$} +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesFullPodName/buffet-(.*?)-} +{ProcessGroup:DetectedName} - {HostGroup:Name/[^\\_]*$} +{ProcessGroup:KubernetesNamespace} +{ProcessGroup:CommandLineArgs/.*?\\-f\\s\\/www\\/(.*?)\\/generated\\/httpd\\.conf.*?} + +You can combine different ones. Check the (documentation)[link] for more \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-rtcadapter/conditional-naming-processgroup/conditional-naming-processgroup.yaml b/BMW-Dynatrace-config/CD_ts-rtcadapter/conditional-naming-processgroup/conditional-naming-processgroup.yaml new file mode 100644 index 00000000..8f367c60 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-rtcadapter/conditional-naming-processgroup/conditional-naming-processgroup.yaml @@ -0,0 +1,8 @@ +config: +- CDts-rtcadapter: template.json + +CDts-rtcadapter: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: ts-rtcadapter +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_ts-rtcadapter/conditional-naming-processgroup/template.json b/BMW-Dynatrace-config/CD_ts-rtcadapter/conditional-naming-processgroup/template.json new file mode 100644 index 00000000..7c039808 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-rtcadapter/conditional-naming-processgroup/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "type": "PROCESS_GROUP" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-rtcadapter/conditional-naming-service/README.md b/BMW-Dynatrace-config/CD_ts-rtcadapter/conditional-naming-service/README.md new file mode 100644 index 00000000..c34ef308 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-rtcadapter/conditional-naming-service/README.md @@ -0,0 +1,35 @@ +### Service Naming Rules + +A typical case could be that you access to *Transaction & Services* and you find two services that are exactly the same: +*DataDownloadV1* +*DataDownloadV1* + +If you drilldown into the service and you check in the process group, you may have a PROD and a E2E for each service. + +*Note: if you see that both process group are exactly the same, please contact a Dynatrace expert to create a Process* +*Group detection rule* + +In the case the PG are PROD and E2E, then we need to create a rule that looks like this: + +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {Service:DetectedName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +- tag: Infotainment +- skipDeployment: false +``` + +The rule will get the Service Detected Name (current name) and it will extract (with a regex) the part of the kubernetes namespace after the "-", so -prod or -e2e, resulting in: +*DataDownloadV1 - prod* +*DataDownloadV1 - e2e* + +Now, services will be easy to identify. + +You can create rules based on any property/metadata. Some other placeholder's eamples: +{Service:DatabaseName} - E2E +{Service:WebServiceName} - {ProcessGroup:Kubernetes:microservice} - {ProcessGroup:Kubernetes:environment} +{Service:DetectedName} - {ProcessGroup:KubernetesContainerName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +{Service:DetectedName} - {ProcessGroup:SpringBootProfileName/[^\\-]*$} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-rtcadapter/conditional-naming-service/conditional-naming-service.yaml b/BMW-Dynatrace-config/CD_ts-rtcadapter/conditional-naming-service/conditional-naming-service.yaml new file mode 100644 index 00000000..8f367c60 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-rtcadapter/conditional-naming-service/conditional-naming-service.yaml @@ -0,0 +1,8 @@ +config: +- CDts-rtcadapter: template.json + +CDts-rtcadapter: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: ts-rtcadapter +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_ts-rtcadapter/conditional-naming-service/template.json b/BMW-Dynatrace-config/CD_ts-rtcadapter/conditional-naming-service/template.json new file mode 100644 index 00000000..5d4fac56 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-rtcadapter/conditional-naming-service/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "type": "SERVICE" +} \ 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 index d41c4c77..5f35e5c1 100644 --- a/BMW-Dynatrace-config/CD_ts-rtcadapter/custom-service-java/README.md +++ b/BMW-Dynatrace-config/CD_ts-rtcadapter/custom-service-java/README.md @@ -1,30 +1,4 @@ -## 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 configure custom services? -## 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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Custom+Services) page to configure your custom services. \ 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 index 92e734fa..1695924c 100644 --- a/BMW-Dynatrace-config/CD_ts-rtcadapter/synthetic-monitor/README.md +++ b/BMW-Dynatrace-config/CD_ts-rtcadapter/synthetic-monitor/README.md @@ -1,37 +1,4 @@ -# Synthetic Configuration -To calculate the Availability KPI, a synthetic must be configured. +### How to configure synthetics? -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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Synthetic+Monitors) page to configure your synthetics. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-rtchandler/conditional-naming-processgroup/README.md b/BMW-Dynatrace-config/CD_ts-rtchandler/conditional-naming-processgroup/README.md new file mode 100644 index 00000000..f94196a5 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-rtchandler/conditional-naming-processgroup/README.md @@ -0,0 +1,67 @@ +### Process Group Detection Rules and Naming + +#### Detection Rule or Naming? + +For the explanation, we're using a real example of the Infotainment application: + +!(PGNaming1)[../../../../img/PGNaming1.PNG] + +Before working with your dashboards and alerting profiles, an important task to do when working with Dynatrace is checking +the structure of your applications (process groups). You can do that clicking under *technologies* and filter using your +application Management Zone. + +In the picture above, there are two Process Groups called bon-information-prod. **If you see duplicated process groups like in** +**this case, you MUST follow this guideline** + +Next step would be to open both process groups and compare the metadata. In that way, you can identify if all process instances are +part of the same application or not. An easy way to do that is asking yourself: how many instances of my application do i have? + +If you have 4 instances in total and you're able to see 2 in one PG and other 2 in other PG it means that **they are part of the ** +**same application** + +Another situation could be that checking on the metadata, then you see that are **two different application** and Dynatrace is just naming +the process group in the same way + +*Same application* +- Problem: Dynatrace is creating two different process groups, what transalates in two separated services for the same application. Instead of +seeing all the traffic in one service, you will have it splitted and it will complicate your monitoring +- Solution: create a process group detection rule. Contact Dynatrace Expert + +*Different application* +- Problem: Dynatrace is just naming in the same way applications that are different. +- Solution: This case is less severe, since it can be fixed with a process group naming rule. + + +What about our example? +!(PGNaming2)[../../../../img/PGNaming2.PNG] +!(PGNaming3)[../../../../img/PGNaming3.PNG] + +Based on the feedback of the infotaiment team, each process group is a different application (microservice) and it's visible in the kubernetes container/workload +within the metadata of each Process Group. + +#### How to create a Process Group Detection Rule +1. Open the *conditional-naming-processgroup.yaml* file and create a rule that looks like this: +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName} +- tag: Infotainment +- skipDeployment: false +``` +The result of the rule will be renaming the PG to this: +``` +bon-information-prod ipa +bon-information-prod rsl +``` + +Other possible placeholders that you can use are for example: +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName/[^\\-]*$} +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesFullPodName/buffet-(.*?)-} +{ProcessGroup:DetectedName} - {HostGroup:Name/[^\\_]*$} +{ProcessGroup:KubernetesNamespace} +{ProcessGroup:CommandLineArgs/.*?\\-f\\s\\/www\\/(.*?)\\/generated\\/httpd\\.conf.*?} + +You can combine different ones. Check the (documentation)[link] for more \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-rtchandler/conditional-naming-processgroup/conditional-naming-processgroup.yaml b/BMW-Dynatrace-config/CD_ts-rtchandler/conditional-naming-processgroup/conditional-naming-processgroup.yaml new file mode 100644 index 00000000..d1d0d501 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-rtchandler/conditional-naming-processgroup/conditional-naming-processgroup.yaml @@ -0,0 +1,8 @@ +config: +- CDts-rtchandler: template.json + +CDts-rtchandler: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: ts-rtchandler +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_ts-rtchandler/conditional-naming-processgroup/template.json b/BMW-Dynatrace-config/CD_ts-rtchandler/conditional-naming-processgroup/template.json new file mode 100644 index 00000000..7c039808 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-rtchandler/conditional-naming-processgroup/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "type": "PROCESS_GROUP" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-rtchandler/conditional-naming-service/README.md b/BMW-Dynatrace-config/CD_ts-rtchandler/conditional-naming-service/README.md new file mode 100644 index 00000000..c34ef308 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-rtchandler/conditional-naming-service/README.md @@ -0,0 +1,35 @@ +### Service Naming Rules + +A typical case could be that you access to *Transaction & Services* and you find two services that are exactly the same: +*DataDownloadV1* +*DataDownloadV1* + +If you drilldown into the service and you check in the process group, you may have a PROD and a E2E for each service. + +*Note: if you see that both process group are exactly the same, please contact a Dynatrace expert to create a Process* +*Group detection rule* + +In the case the PG are PROD and E2E, then we need to create a rule that looks like this: + +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {Service:DetectedName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +- tag: Infotainment +- skipDeployment: false +``` + +The rule will get the Service Detected Name (current name) and it will extract (with a regex) the part of the kubernetes namespace after the "-", so -prod or -e2e, resulting in: +*DataDownloadV1 - prod* +*DataDownloadV1 - e2e* + +Now, services will be easy to identify. + +You can create rules based on any property/metadata. Some other placeholder's eamples: +{Service:DatabaseName} - E2E +{Service:WebServiceName} - {ProcessGroup:Kubernetes:microservice} - {ProcessGroup:Kubernetes:environment} +{Service:DetectedName} - {ProcessGroup:KubernetesContainerName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +{Service:DetectedName} - {ProcessGroup:SpringBootProfileName/[^\\-]*$} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-rtchandler/conditional-naming-service/conditional-naming-service.yaml b/BMW-Dynatrace-config/CD_ts-rtchandler/conditional-naming-service/conditional-naming-service.yaml new file mode 100644 index 00000000..d1d0d501 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-rtchandler/conditional-naming-service/conditional-naming-service.yaml @@ -0,0 +1,8 @@ +config: +- CDts-rtchandler: template.json + +CDts-rtchandler: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: ts-rtchandler +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_ts-rtchandler/conditional-naming-service/template.json b/BMW-Dynatrace-config/CD_ts-rtchandler/conditional-naming-service/template.json new file mode 100644 index 00000000..5d4fac56 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-rtchandler/conditional-naming-service/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "type": "SERVICE" +} \ 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 index d41c4c77..5f35e5c1 100644 --- a/BMW-Dynatrace-config/CD_ts-rtchandler/custom-service-java/README.md +++ b/BMW-Dynatrace-config/CD_ts-rtchandler/custom-service-java/README.md @@ -1,30 +1,4 @@ -## 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 configure custom services? -## 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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Custom+Services) page to configure your custom services. \ 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 index 92e734fa..1695924c 100644 --- a/BMW-Dynatrace-config/CD_ts-rtchandler/synthetic-monitor/README.md +++ b/BMW-Dynatrace-config/CD_ts-rtchandler/synthetic-monitor/README.md @@ -1,37 +1,4 @@ -# Synthetic Configuration -To calculate the Availability KPI, a synthetic must be configured. +### How to configure synthetics? -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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Synthetic+Monitors) page to configure your synthetics. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-rtcservice/conditional-naming-processgroup/README.md b/BMW-Dynatrace-config/CD_ts-rtcservice/conditional-naming-processgroup/README.md new file mode 100644 index 00000000..f94196a5 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-rtcservice/conditional-naming-processgroup/README.md @@ -0,0 +1,67 @@ +### Process Group Detection Rules and Naming + +#### Detection Rule or Naming? + +For the explanation, we're using a real example of the Infotainment application: + +!(PGNaming1)[../../../../img/PGNaming1.PNG] + +Before working with your dashboards and alerting profiles, an important task to do when working with Dynatrace is checking +the structure of your applications (process groups). You can do that clicking under *technologies* and filter using your +application Management Zone. + +In the picture above, there are two Process Groups called bon-information-prod. **If you see duplicated process groups like in** +**this case, you MUST follow this guideline** + +Next step would be to open both process groups and compare the metadata. In that way, you can identify if all process instances are +part of the same application or not. An easy way to do that is asking yourself: how many instances of my application do i have? + +If you have 4 instances in total and you're able to see 2 in one PG and other 2 in other PG it means that **they are part of the ** +**same application** + +Another situation could be that checking on the metadata, then you see that are **two different application** and Dynatrace is just naming +the process group in the same way + +*Same application* +- Problem: Dynatrace is creating two different process groups, what transalates in two separated services for the same application. Instead of +seeing all the traffic in one service, you will have it splitted and it will complicate your monitoring +- Solution: create a process group detection rule. Contact Dynatrace Expert + +*Different application* +- Problem: Dynatrace is just naming in the same way applications that are different. +- Solution: This case is less severe, since it can be fixed with a process group naming rule. + + +What about our example? +!(PGNaming2)[../../../../img/PGNaming2.PNG] +!(PGNaming3)[../../../../img/PGNaming3.PNG] + +Based on the feedback of the infotaiment team, each process group is a different application (microservice) and it's visible in the kubernetes container/workload +within the metadata of each Process Group. + +#### How to create a Process Group Detection Rule +1. Open the *conditional-naming-processgroup.yaml* file and create a rule that looks like this: +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName} +- tag: Infotainment +- skipDeployment: false +``` +The result of the rule will be renaming the PG to this: +``` +bon-information-prod ipa +bon-information-prod rsl +``` + +Other possible placeholders that you can use are for example: +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName/[^\\-]*$} +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesFullPodName/buffet-(.*?)-} +{ProcessGroup:DetectedName} - {HostGroup:Name/[^\\_]*$} +{ProcessGroup:KubernetesNamespace} +{ProcessGroup:CommandLineArgs/.*?\\-f\\s\\/www\\/(.*?)\\/generated\\/httpd\\.conf.*?} + +You can combine different ones. Check the (documentation)[link] for more \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-rtcservice/conditional-naming-processgroup/conditional-naming-processgroup.yaml b/BMW-Dynatrace-config/CD_ts-rtcservice/conditional-naming-processgroup/conditional-naming-processgroup.yaml new file mode 100644 index 00000000..85923d20 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-rtcservice/conditional-naming-processgroup/conditional-naming-processgroup.yaml @@ -0,0 +1,8 @@ +config: +- CDts-rtcservice: template.json + +CDts-rtcservice: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: ts-rtcservice +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_ts-rtcservice/conditional-naming-processgroup/template.json b/BMW-Dynatrace-config/CD_ts-rtcservice/conditional-naming-processgroup/template.json new file mode 100644 index 00000000..7c039808 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-rtcservice/conditional-naming-processgroup/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "type": "PROCESS_GROUP" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-rtcservice/conditional-naming-service/README.md b/BMW-Dynatrace-config/CD_ts-rtcservice/conditional-naming-service/README.md new file mode 100644 index 00000000..c34ef308 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-rtcservice/conditional-naming-service/README.md @@ -0,0 +1,35 @@ +### Service Naming Rules + +A typical case could be that you access to *Transaction & Services* and you find two services that are exactly the same: +*DataDownloadV1* +*DataDownloadV1* + +If you drilldown into the service and you check in the process group, you may have a PROD and a E2E for each service. + +*Note: if you see that both process group are exactly the same, please contact a Dynatrace expert to create a Process* +*Group detection rule* + +In the case the PG are PROD and E2E, then we need to create a rule that looks like this: + +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {Service:DetectedName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +- tag: Infotainment +- skipDeployment: false +``` + +The rule will get the Service Detected Name (current name) and it will extract (with a regex) the part of the kubernetes namespace after the "-", so -prod or -e2e, resulting in: +*DataDownloadV1 - prod* +*DataDownloadV1 - e2e* + +Now, services will be easy to identify. + +You can create rules based on any property/metadata. Some other placeholder's eamples: +{Service:DatabaseName} - E2E +{Service:WebServiceName} - {ProcessGroup:Kubernetes:microservice} - {ProcessGroup:Kubernetes:environment} +{Service:DetectedName} - {ProcessGroup:KubernetesContainerName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +{Service:DetectedName} - {ProcessGroup:SpringBootProfileName/[^\\-]*$} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-rtcservice/conditional-naming-service/conditional-naming-service.yaml b/BMW-Dynatrace-config/CD_ts-rtcservice/conditional-naming-service/conditional-naming-service.yaml new file mode 100644 index 00000000..85923d20 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-rtcservice/conditional-naming-service/conditional-naming-service.yaml @@ -0,0 +1,8 @@ +config: +- CDts-rtcservice: template.json + +CDts-rtcservice: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: ts-rtcservice +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_ts-rtcservice/conditional-naming-service/template.json b/BMW-Dynatrace-config/CD_ts-rtcservice/conditional-naming-service/template.json new file mode 100644 index 00000000..5d4fac56 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-rtcservice/conditional-naming-service/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "type": "SERVICE" +} \ 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 index d41c4c77..5f35e5c1 100644 --- a/BMW-Dynatrace-config/CD_ts-rtcservice/custom-service-java/README.md +++ b/BMW-Dynatrace-config/CD_ts-rtcservice/custom-service-java/README.md @@ -1,30 +1,4 @@ -## 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 configure custom services? -## 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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Custom+Services) page to configure your custom services. \ 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 index 92e734fa..1695924c 100644 --- a/BMW-Dynatrace-config/CD_ts-rtcservice/synthetic-monitor/README.md +++ b/BMW-Dynatrace-config/CD_ts-rtcservice/synthetic-monitor/README.md @@ -1,37 +1,4 @@ -# Synthetic Configuration -To calculate the Availability KPI, a synthetic must be configured. +### How to configure synthetics? -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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Synthetic+Monitors) page to configure your synthetics. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-scallservice/conditional-naming-processgroup/README.md b/BMW-Dynatrace-config/CD_ts-scallservice/conditional-naming-processgroup/README.md new file mode 100644 index 00000000..f94196a5 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-scallservice/conditional-naming-processgroup/README.md @@ -0,0 +1,67 @@ +### Process Group Detection Rules and Naming + +#### Detection Rule or Naming? + +For the explanation, we're using a real example of the Infotainment application: + +!(PGNaming1)[../../../../img/PGNaming1.PNG] + +Before working with your dashboards and alerting profiles, an important task to do when working with Dynatrace is checking +the structure of your applications (process groups). You can do that clicking under *technologies* and filter using your +application Management Zone. + +In the picture above, there are two Process Groups called bon-information-prod. **If you see duplicated process groups like in** +**this case, you MUST follow this guideline** + +Next step would be to open both process groups and compare the metadata. In that way, you can identify if all process instances are +part of the same application or not. An easy way to do that is asking yourself: how many instances of my application do i have? + +If you have 4 instances in total and you're able to see 2 in one PG and other 2 in other PG it means that **they are part of the ** +**same application** + +Another situation could be that checking on the metadata, then you see that are **two different application** and Dynatrace is just naming +the process group in the same way + +*Same application* +- Problem: Dynatrace is creating two different process groups, what transalates in two separated services for the same application. Instead of +seeing all the traffic in one service, you will have it splitted and it will complicate your monitoring +- Solution: create a process group detection rule. Contact Dynatrace Expert + +*Different application* +- Problem: Dynatrace is just naming in the same way applications that are different. +- Solution: This case is less severe, since it can be fixed with a process group naming rule. + + +What about our example? +!(PGNaming2)[../../../../img/PGNaming2.PNG] +!(PGNaming3)[../../../../img/PGNaming3.PNG] + +Based on the feedback of the infotaiment team, each process group is a different application (microservice) and it's visible in the kubernetes container/workload +within the metadata of each Process Group. + +#### How to create a Process Group Detection Rule +1. Open the *conditional-naming-processgroup.yaml* file and create a rule that looks like this: +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName} +- tag: Infotainment +- skipDeployment: false +``` +The result of the rule will be renaming the PG to this: +``` +bon-information-prod ipa +bon-information-prod rsl +``` + +Other possible placeholders that you can use are for example: +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName/[^\\-]*$} +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesFullPodName/buffet-(.*?)-} +{ProcessGroup:DetectedName} - {HostGroup:Name/[^\\_]*$} +{ProcessGroup:KubernetesNamespace} +{ProcessGroup:CommandLineArgs/.*?\\-f\\s\\/www\\/(.*?)\\/generated\\/httpd\\.conf.*?} + +You can combine different ones. Check the (documentation)[link] for more \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-scallservice/conditional-naming-processgroup/conditional-naming-processgroup.yaml b/BMW-Dynatrace-config/CD_ts-scallservice/conditional-naming-processgroup/conditional-naming-processgroup.yaml new file mode 100644 index 00000000..53b55b7a --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-scallservice/conditional-naming-processgroup/conditional-naming-processgroup.yaml @@ -0,0 +1,8 @@ +config: +- CDts-scallservice: template.json + +CDts-scallservice: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: ts-scallservice +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_ts-scallservice/conditional-naming-processgroup/template.json b/BMW-Dynatrace-config/CD_ts-scallservice/conditional-naming-processgroup/template.json new file mode 100644 index 00000000..7c039808 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-scallservice/conditional-naming-processgroup/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "type": "PROCESS_GROUP" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-scallservice/conditional-naming-service/README.md b/BMW-Dynatrace-config/CD_ts-scallservice/conditional-naming-service/README.md new file mode 100644 index 00000000..c34ef308 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-scallservice/conditional-naming-service/README.md @@ -0,0 +1,35 @@ +### Service Naming Rules + +A typical case could be that you access to *Transaction & Services* and you find two services that are exactly the same: +*DataDownloadV1* +*DataDownloadV1* + +If you drilldown into the service and you check in the process group, you may have a PROD and a E2E for each service. + +*Note: if you see that both process group are exactly the same, please contact a Dynatrace expert to create a Process* +*Group detection rule* + +In the case the PG are PROD and E2E, then we need to create a rule that looks like this: + +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {Service:DetectedName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +- tag: Infotainment +- skipDeployment: false +``` + +The rule will get the Service Detected Name (current name) and it will extract (with a regex) the part of the kubernetes namespace after the "-", so -prod or -e2e, resulting in: +*DataDownloadV1 - prod* +*DataDownloadV1 - e2e* + +Now, services will be easy to identify. + +You can create rules based on any property/metadata. Some other placeholder's eamples: +{Service:DatabaseName} - E2E +{Service:WebServiceName} - {ProcessGroup:Kubernetes:microservice} - {ProcessGroup:Kubernetes:environment} +{Service:DetectedName} - {ProcessGroup:KubernetesContainerName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +{Service:DetectedName} - {ProcessGroup:SpringBootProfileName/[^\\-]*$} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-scallservice/conditional-naming-service/conditional-naming-service.yaml b/BMW-Dynatrace-config/CD_ts-scallservice/conditional-naming-service/conditional-naming-service.yaml new file mode 100644 index 00000000..53b55b7a --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-scallservice/conditional-naming-service/conditional-naming-service.yaml @@ -0,0 +1,8 @@ +config: +- CDts-scallservice: template.json + +CDts-scallservice: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: ts-scallservice +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_ts-scallservice/conditional-naming-service/template.json b/BMW-Dynatrace-config/CD_ts-scallservice/conditional-naming-service/template.json new file mode 100644 index 00000000..5d4fac56 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-scallservice/conditional-naming-service/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "type": "SERVICE" +} \ 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 index d41c4c77..5f35e5c1 100644 --- a/BMW-Dynatrace-config/CD_ts-scallservice/custom-service-java/README.md +++ b/BMW-Dynatrace-config/CD_ts-scallservice/custom-service-java/README.md @@ -1,30 +1,4 @@ -## 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 configure custom services? -## 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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Custom+Services) page to configure your custom services. \ 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 index 92e734fa..1695924c 100644 --- a/BMW-Dynatrace-config/CD_ts-scallservice/synthetic-monitor/README.md +++ b/BMW-Dynatrace-config/CD_ts-scallservice/synthetic-monitor/README.md @@ -1,37 +1,4 @@ -# Synthetic Configuration -To calculate the Availability KPI, a synthetic must be configured. +### How to configure synthetics? -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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Synthetic+Monitors) page to configure your synthetics. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-tsbgam/conditional-naming-processgroup/README.md b/BMW-Dynatrace-config/CD_ts-tsbgam/conditional-naming-processgroup/README.md new file mode 100644 index 00000000..f94196a5 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-tsbgam/conditional-naming-processgroup/README.md @@ -0,0 +1,67 @@ +### Process Group Detection Rules and Naming + +#### Detection Rule or Naming? + +For the explanation, we're using a real example of the Infotainment application: + +!(PGNaming1)[../../../../img/PGNaming1.PNG] + +Before working with your dashboards and alerting profiles, an important task to do when working with Dynatrace is checking +the structure of your applications (process groups). You can do that clicking under *technologies* and filter using your +application Management Zone. + +In the picture above, there are two Process Groups called bon-information-prod. **If you see duplicated process groups like in** +**this case, you MUST follow this guideline** + +Next step would be to open both process groups and compare the metadata. In that way, you can identify if all process instances are +part of the same application or not. An easy way to do that is asking yourself: how many instances of my application do i have? + +If you have 4 instances in total and you're able to see 2 in one PG and other 2 in other PG it means that **they are part of the ** +**same application** + +Another situation could be that checking on the metadata, then you see that are **two different application** and Dynatrace is just naming +the process group in the same way + +*Same application* +- Problem: Dynatrace is creating two different process groups, what transalates in two separated services for the same application. Instead of +seeing all the traffic in one service, you will have it splitted and it will complicate your monitoring +- Solution: create a process group detection rule. Contact Dynatrace Expert + +*Different application* +- Problem: Dynatrace is just naming in the same way applications that are different. +- Solution: This case is less severe, since it can be fixed with a process group naming rule. + + +What about our example? +!(PGNaming2)[../../../../img/PGNaming2.PNG] +!(PGNaming3)[../../../../img/PGNaming3.PNG] + +Based on the feedback of the infotaiment team, each process group is a different application (microservice) and it's visible in the kubernetes container/workload +within the metadata of each Process Group. + +#### How to create a Process Group Detection Rule +1. Open the *conditional-naming-processgroup.yaml* file and create a rule that looks like this: +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName} +- tag: Infotainment +- skipDeployment: false +``` +The result of the rule will be renaming the PG to this: +``` +bon-information-prod ipa +bon-information-prod rsl +``` + +Other possible placeholders that you can use are for example: +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName/[^\\-]*$} +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesFullPodName/buffet-(.*?)-} +{ProcessGroup:DetectedName} - {HostGroup:Name/[^\\_]*$} +{ProcessGroup:KubernetesNamespace} +{ProcessGroup:CommandLineArgs/.*?\\-f\\s\\/www\\/(.*?)\\/generated\\/httpd\\.conf.*?} + +You can combine different ones. Check the (documentation)[link] for more \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-tsbgam/conditional-naming-processgroup/conditional-naming-processgroup.yaml b/BMW-Dynatrace-config/CD_ts-tsbgam/conditional-naming-processgroup/conditional-naming-processgroup.yaml new file mode 100644 index 00000000..101c5c19 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-tsbgam/conditional-naming-processgroup/conditional-naming-processgroup.yaml @@ -0,0 +1,8 @@ +config: +- CDts-tsbgam: template.json + +CDts-tsbgam: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: ts-tsbgam +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_ts-tsbgam/conditional-naming-processgroup/template.json b/BMW-Dynatrace-config/CD_ts-tsbgam/conditional-naming-processgroup/template.json new file mode 100644 index 00000000..7c039808 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-tsbgam/conditional-naming-processgroup/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "type": "PROCESS_GROUP" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-tsbgam/conditional-naming-service/README.md b/BMW-Dynatrace-config/CD_ts-tsbgam/conditional-naming-service/README.md new file mode 100644 index 00000000..c34ef308 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-tsbgam/conditional-naming-service/README.md @@ -0,0 +1,35 @@ +### Service Naming Rules + +A typical case could be that you access to *Transaction & Services* and you find two services that are exactly the same: +*DataDownloadV1* +*DataDownloadV1* + +If you drilldown into the service and you check in the process group, you may have a PROD and a E2E for each service. + +*Note: if you see that both process group are exactly the same, please contact a Dynatrace expert to create a Process* +*Group detection rule* + +In the case the PG are PROD and E2E, then we need to create a rule that looks like this: + +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {Service:DetectedName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +- tag: Infotainment +- skipDeployment: false +``` + +The rule will get the Service Detected Name (current name) and it will extract (with a regex) the part of the kubernetes namespace after the "-", so -prod or -e2e, resulting in: +*DataDownloadV1 - prod* +*DataDownloadV1 - e2e* + +Now, services will be easy to identify. + +You can create rules based on any property/metadata. Some other placeholder's eamples: +{Service:DatabaseName} - E2E +{Service:WebServiceName} - {ProcessGroup:Kubernetes:microservice} - {ProcessGroup:Kubernetes:environment} +{Service:DetectedName} - {ProcessGroup:KubernetesContainerName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +{Service:DetectedName} - {ProcessGroup:SpringBootProfileName/[^\\-]*$} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-tsbgam/conditional-naming-service/conditional-naming-service.yaml b/BMW-Dynatrace-config/CD_ts-tsbgam/conditional-naming-service/conditional-naming-service.yaml new file mode 100644 index 00000000..101c5c19 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-tsbgam/conditional-naming-service/conditional-naming-service.yaml @@ -0,0 +1,8 @@ +config: +- CDts-tsbgam: template.json + +CDts-tsbgam: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: ts-tsbgam +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_ts-tsbgam/conditional-naming-service/template.json b/BMW-Dynatrace-config/CD_ts-tsbgam/conditional-naming-service/template.json new file mode 100644 index 00000000..5d4fac56 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-tsbgam/conditional-naming-service/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "type": "SERVICE" +} \ 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 index d41c4c77..5f35e5c1 100644 --- a/BMW-Dynatrace-config/CD_ts-tsbgam/custom-service-java/README.md +++ b/BMW-Dynatrace-config/CD_ts-tsbgam/custom-service-java/README.md @@ -1,30 +1,4 @@ -## 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 configure custom services? -## 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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Custom+Services) page to configure your custom services. \ 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 index 92e734fa..1695924c 100644 --- a/BMW-Dynatrace-config/CD_ts-tsbgam/synthetic-monitor/README.md +++ b/BMW-Dynatrace-config/CD_ts-tsbgam/synthetic-monitor/README.md @@ -1,37 +1,4 @@ -# Synthetic Configuration -To calculate the Availability KPI, a synthetic must be configured. +### How to configure synthetics? -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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Synthetic+Monitors) page to configure your synthetics. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-tsbgservice/conditional-naming-processgroup/README.md b/BMW-Dynatrace-config/CD_ts-tsbgservice/conditional-naming-processgroup/README.md new file mode 100644 index 00000000..f94196a5 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-tsbgservice/conditional-naming-processgroup/README.md @@ -0,0 +1,67 @@ +### Process Group Detection Rules and Naming + +#### Detection Rule or Naming? + +For the explanation, we're using a real example of the Infotainment application: + +!(PGNaming1)[../../../../img/PGNaming1.PNG] + +Before working with your dashboards and alerting profiles, an important task to do when working with Dynatrace is checking +the structure of your applications (process groups). You can do that clicking under *technologies* and filter using your +application Management Zone. + +In the picture above, there are two Process Groups called bon-information-prod. **If you see duplicated process groups like in** +**this case, you MUST follow this guideline** + +Next step would be to open both process groups and compare the metadata. In that way, you can identify if all process instances are +part of the same application or not. An easy way to do that is asking yourself: how many instances of my application do i have? + +If you have 4 instances in total and you're able to see 2 in one PG and other 2 in other PG it means that **they are part of the ** +**same application** + +Another situation could be that checking on the metadata, then you see that are **two different application** and Dynatrace is just naming +the process group in the same way + +*Same application* +- Problem: Dynatrace is creating two different process groups, what transalates in two separated services for the same application. Instead of +seeing all the traffic in one service, you will have it splitted and it will complicate your monitoring +- Solution: create a process group detection rule. Contact Dynatrace Expert + +*Different application* +- Problem: Dynatrace is just naming in the same way applications that are different. +- Solution: This case is less severe, since it can be fixed with a process group naming rule. + + +What about our example? +!(PGNaming2)[../../../../img/PGNaming2.PNG] +!(PGNaming3)[../../../../img/PGNaming3.PNG] + +Based on the feedback of the infotaiment team, each process group is a different application (microservice) and it's visible in the kubernetes container/workload +within the metadata of each Process Group. + +#### How to create a Process Group Detection Rule +1. Open the *conditional-naming-processgroup.yaml* file and create a rule that looks like this: +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName} +- tag: Infotainment +- skipDeployment: false +``` +The result of the rule will be renaming the PG to this: +``` +bon-information-prod ipa +bon-information-prod rsl +``` + +Other possible placeholders that you can use are for example: +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName/[^\\-]*$} +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesFullPodName/buffet-(.*?)-} +{ProcessGroup:DetectedName} - {HostGroup:Name/[^\\_]*$} +{ProcessGroup:KubernetesNamespace} +{ProcessGroup:CommandLineArgs/.*?\\-f\\s\\/www\\/(.*?)\\/generated\\/httpd\\.conf.*?} + +You can combine different ones. Check the (documentation)[link] for more \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-tsbgservice/conditional-naming-processgroup/conditional-naming-processgroup.yaml b/BMW-Dynatrace-config/CD_ts-tsbgservice/conditional-naming-processgroup/conditional-naming-processgroup.yaml new file mode 100644 index 00000000..be96eea6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-tsbgservice/conditional-naming-processgroup/conditional-naming-processgroup.yaml @@ -0,0 +1,8 @@ +config: +- CDts-tsbgservice: template.json + +CDts-tsbgservice: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: ts-tsbgservice +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_ts-tsbgservice/conditional-naming-processgroup/template.json b/BMW-Dynatrace-config/CD_ts-tsbgservice/conditional-naming-processgroup/template.json new file mode 100644 index 00000000..7c039808 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-tsbgservice/conditional-naming-processgroup/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "type": "PROCESS_GROUP" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-tsbgservice/conditional-naming-service/README.md b/BMW-Dynatrace-config/CD_ts-tsbgservice/conditional-naming-service/README.md new file mode 100644 index 00000000..c34ef308 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-tsbgservice/conditional-naming-service/README.md @@ -0,0 +1,35 @@ +### Service Naming Rules + +A typical case could be that you access to *Transaction & Services* and you find two services that are exactly the same: +*DataDownloadV1* +*DataDownloadV1* + +If you drilldown into the service and you check in the process group, you may have a PROD and a E2E for each service. + +*Note: if you see that both process group are exactly the same, please contact a Dynatrace expert to create a Process* +*Group detection rule* + +In the case the PG are PROD and E2E, then we need to create a rule that looks like this: + +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {Service:DetectedName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +- tag: Infotainment +- skipDeployment: false +``` + +The rule will get the Service Detected Name (current name) and it will extract (with a regex) the part of the kubernetes namespace after the "-", so -prod or -e2e, resulting in: +*DataDownloadV1 - prod* +*DataDownloadV1 - e2e* + +Now, services will be easy to identify. + +You can create rules based on any property/metadata. Some other placeholder's eamples: +{Service:DatabaseName} - E2E +{Service:WebServiceName} - {ProcessGroup:Kubernetes:microservice} - {ProcessGroup:Kubernetes:environment} +{Service:DetectedName} - {ProcessGroup:KubernetesContainerName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +{Service:DetectedName} - {ProcessGroup:SpringBootProfileName/[^\\-]*$} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-tsbgservice/conditional-naming-service/conditional-naming-service.yaml b/BMW-Dynatrace-config/CD_ts-tsbgservice/conditional-naming-service/conditional-naming-service.yaml new file mode 100644 index 00000000..be96eea6 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-tsbgservice/conditional-naming-service/conditional-naming-service.yaml @@ -0,0 +1,8 @@ +config: +- CDts-tsbgservice: template.json + +CDts-tsbgservice: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: ts-tsbgservice +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_ts-tsbgservice/conditional-naming-service/template.json b/BMW-Dynatrace-config/CD_ts-tsbgservice/conditional-naming-service/template.json new file mode 100644 index 00000000..5d4fac56 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-tsbgservice/conditional-naming-service/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "type": "SERVICE" +} \ 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 index d41c4c77..5f35e5c1 100644 --- a/BMW-Dynatrace-config/CD_ts-tsbgservice/custom-service-java/README.md +++ b/BMW-Dynatrace-config/CD_ts-tsbgservice/custom-service-java/README.md @@ -1,30 +1,4 @@ -## 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 configure custom services? -## 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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Custom+Services) page to configure your custom services. \ 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 index 92e734fa..1695924c 100644 --- a/BMW-Dynatrace-config/CD_ts-tsbgservice/synthetic-monitor/README.md +++ b/BMW-Dynatrace-config/CD_ts-tsbgservice/synthetic-monitor/README.md @@ -1,37 +1,4 @@ -# Synthetic Configuration -To calculate the Availability KPI, a synthetic must be configured. +### How to configure synthetics? -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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Synthetic+Monitors) page to configure your synthetics. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-tsp/conditional-naming-processgroup/README.md b/BMW-Dynatrace-config/CD_ts-tsp/conditional-naming-processgroup/README.md new file mode 100644 index 00000000..f94196a5 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-tsp/conditional-naming-processgroup/README.md @@ -0,0 +1,67 @@ +### Process Group Detection Rules and Naming + +#### Detection Rule or Naming? + +For the explanation, we're using a real example of the Infotainment application: + +!(PGNaming1)[../../../../img/PGNaming1.PNG] + +Before working with your dashboards and alerting profiles, an important task to do when working with Dynatrace is checking +the structure of your applications (process groups). You can do that clicking under *technologies* and filter using your +application Management Zone. + +In the picture above, there are two Process Groups called bon-information-prod. **If you see duplicated process groups like in** +**this case, you MUST follow this guideline** + +Next step would be to open both process groups and compare the metadata. In that way, you can identify if all process instances are +part of the same application or not. An easy way to do that is asking yourself: how many instances of my application do i have? + +If you have 4 instances in total and you're able to see 2 in one PG and other 2 in other PG it means that **they are part of the ** +**same application** + +Another situation could be that checking on the metadata, then you see that are **two different application** and Dynatrace is just naming +the process group in the same way + +*Same application* +- Problem: Dynatrace is creating two different process groups, what transalates in two separated services for the same application. Instead of +seeing all the traffic in one service, you will have it splitted and it will complicate your monitoring +- Solution: create a process group detection rule. Contact Dynatrace Expert + +*Different application* +- Problem: Dynatrace is just naming in the same way applications that are different. +- Solution: This case is less severe, since it can be fixed with a process group naming rule. + + +What about our example? +!(PGNaming2)[../../../../img/PGNaming2.PNG] +!(PGNaming3)[../../../../img/PGNaming3.PNG] + +Based on the feedback of the infotaiment team, each process group is a different application (microservice) and it's visible in the kubernetes container/workload +within the metadata of each Process Group. + +#### How to create a Process Group Detection Rule +1. Open the *conditional-naming-processgroup.yaml* file and create a rule that looks like this: +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName} +- tag: Infotainment +- skipDeployment: false +``` +The result of the rule will be renaming the PG to this: +``` +bon-information-prod ipa +bon-information-prod rsl +``` + +Other possible placeholders that you can use are for example: +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName/[^\\-]*$} +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesFullPodName/buffet-(.*?)-} +{ProcessGroup:DetectedName} - {HostGroup:Name/[^\\_]*$} +{ProcessGroup:KubernetesNamespace} +{ProcessGroup:CommandLineArgs/.*?\\-f\\s\\/www\\/(.*?)\\/generated\\/httpd\\.conf.*?} + +You can combine different ones. Check the (documentation)[link] for more \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-tsp/conditional-naming-processgroup/conditional-naming-processgroup.yaml b/BMW-Dynatrace-config/CD_ts-tsp/conditional-naming-processgroup/conditional-naming-processgroup.yaml new file mode 100644 index 00000000..1b6abb39 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-tsp/conditional-naming-processgroup/conditional-naming-processgroup.yaml @@ -0,0 +1,8 @@ +config: +- CDts-tsp: template.json + +CDts-tsp: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: ts-tsp +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_ts-tsp/conditional-naming-processgroup/template.json b/BMW-Dynatrace-config/CD_ts-tsp/conditional-naming-processgroup/template.json new file mode 100644 index 00000000..7c039808 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-tsp/conditional-naming-processgroup/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "type": "PROCESS_GROUP" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-tsp/conditional-naming-service/README.md b/BMW-Dynatrace-config/CD_ts-tsp/conditional-naming-service/README.md new file mode 100644 index 00000000..c34ef308 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-tsp/conditional-naming-service/README.md @@ -0,0 +1,35 @@ +### Service Naming Rules + +A typical case could be that you access to *Transaction & Services* and you find two services that are exactly the same: +*DataDownloadV1* +*DataDownloadV1* + +If you drilldown into the service and you check in the process group, you may have a PROD and a E2E for each service. + +*Note: if you see that both process group are exactly the same, please contact a Dynatrace expert to create a Process* +*Group detection rule* + +In the case the PG are PROD and E2E, then we need to create a rule that looks like this: + +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {Service:DetectedName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +- tag: Infotainment +- skipDeployment: false +``` + +The rule will get the Service Detected Name (current name) and it will extract (with a regex) the part of the kubernetes namespace after the "-", so -prod or -e2e, resulting in: +*DataDownloadV1 - prod* +*DataDownloadV1 - e2e* + +Now, services will be easy to identify. + +You can create rules based on any property/metadata. Some other placeholder's eamples: +{Service:DatabaseName} - E2E +{Service:WebServiceName} - {ProcessGroup:Kubernetes:microservice} - {ProcessGroup:Kubernetes:environment} +{Service:DetectedName} - {ProcessGroup:KubernetesContainerName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +{Service:DetectedName} - {ProcessGroup:SpringBootProfileName/[^\\-]*$} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-tsp/conditional-naming-service/conditional-naming-service.yaml b/BMW-Dynatrace-config/CD_ts-tsp/conditional-naming-service/conditional-naming-service.yaml new file mode 100644 index 00000000..1b6abb39 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-tsp/conditional-naming-service/conditional-naming-service.yaml @@ -0,0 +1,8 @@ +config: +- CDts-tsp: template.json + +CDts-tsp: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: ts-tsp +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_ts-tsp/conditional-naming-service/template.json b/BMW-Dynatrace-config/CD_ts-tsp/conditional-naming-service/template.json new file mode 100644 index 00000000..5d4fac56 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-tsp/conditional-naming-service/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "type": "SERVICE" +} \ 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 index d41c4c77..5f35e5c1 100644 --- a/BMW-Dynatrace-config/CD_ts-tsp/custom-service-java/README.md +++ b/BMW-Dynatrace-config/CD_ts-tsp/custom-service-java/README.md @@ -1,30 +1,4 @@ -## 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 configure custom services? -## 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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Custom+Services) page to configure your custom services. \ 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 index 92e734fa..1695924c 100644 --- a/BMW-Dynatrace-config/CD_ts-tsp/synthetic-monitor/README.md +++ b/BMW-Dynatrace-config/CD_ts-tsp/synthetic-monitor/README.md @@ -1,37 +1,4 @@ -# Synthetic Configuration -To calculate the Availability KPI, a synthetic must be configured. +### How to configure synthetics? -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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Synthetic+Monitors) page to configure your synthetics. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-wlupdater/conditional-naming-processgroup/README.md b/BMW-Dynatrace-config/CD_ts-wlupdater/conditional-naming-processgroup/README.md new file mode 100644 index 00000000..f94196a5 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-wlupdater/conditional-naming-processgroup/README.md @@ -0,0 +1,67 @@ +### Process Group Detection Rules and Naming + +#### Detection Rule or Naming? + +For the explanation, we're using a real example of the Infotainment application: + +!(PGNaming1)[../../../../img/PGNaming1.PNG] + +Before working with your dashboards and alerting profiles, an important task to do when working with Dynatrace is checking +the structure of your applications (process groups). You can do that clicking under *technologies* and filter using your +application Management Zone. + +In the picture above, there are two Process Groups called bon-information-prod. **If you see duplicated process groups like in** +**this case, you MUST follow this guideline** + +Next step would be to open both process groups and compare the metadata. In that way, you can identify if all process instances are +part of the same application or not. An easy way to do that is asking yourself: how many instances of my application do i have? + +If you have 4 instances in total and you're able to see 2 in one PG and other 2 in other PG it means that **they are part of the ** +**same application** + +Another situation could be that checking on the metadata, then you see that are **two different application** and Dynatrace is just naming +the process group in the same way + +*Same application* +- Problem: Dynatrace is creating two different process groups, what transalates in two separated services for the same application. Instead of +seeing all the traffic in one service, you will have it splitted and it will complicate your monitoring +- Solution: create a process group detection rule. Contact Dynatrace Expert + +*Different application* +- Problem: Dynatrace is just naming in the same way applications that are different. +- Solution: This case is less severe, since it can be fixed with a process group naming rule. + + +What about our example? +!(PGNaming2)[../../../../img/PGNaming2.PNG] +!(PGNaming3)[../../../../img/PGNaming3.PNG] + +Based on the feedback of the infotaiment team, each process group is a different application (microservice) and it's visible in the kubernetes container/workload +within the metadata of each Process Group. + +#### How to create a Process Group Detection Rule +1. Open the *conditional-naming-processgroup.yaml* file and create a rule that looks like this: +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName} +- tag: Infotainment +- skipDeployment: false +``` +The result of the rule will be renaming the PG to this: +``` +bon-information-prod ipa +bon-information-prod rsl +``` + +Other possible placeholders that you can use are for example: +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName/[^\\-]*$} +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesFullPodName/buffet-(.*?)-} +{ProcessGroup:DetectedName} - {HostGroup:Name/[^\\_]*$} +{ProcessGroup:KubernetesNamespace} +{ProcessGroup:CommandLineArgs/.*?\\-f\\s\\/www\\/(.*?)\\/generated\\/httpd\\.conf.*?} + +You can combine different ones. Check the (documentation)[link] for more \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-wlupdater/conditional-naming-processgroup/conditional-naming-processgroup.yaml b/BMW-Dynatrace-config/CD_ts-wlupdater/conditional-naming-processgroup/conditional-naming-processgroup.yaml new file mode 100644 index 00000000..61c768a8 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-wlupdater/conditional-naming-processgroup/conditional-naming-processgroup.yaml @@ -0,0 +1,8 @@ +config: +- CDts-wlupdater: template.json + +CDts-wlupdater: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: ts-wlupdater +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_ts-wlupdater/conditional-naming-processgroup/template.json b/BMW-Dynatrace-config/CD_ts-wlupdater/conditional-naming-processgroup/template.json new file mode 100644 index 00000000..7c039808 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-wlupdater/conditional-naming-processgroup/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "type": "PROCESS_GROUP" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-wlupdater/conditional-naming-service/README.md b/BMW-Dynatrace-config/CD_ts-wlupdater/conditional-naming-service/README.md new file mode 100644 index 00000000..c34ef308 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-wlupdater/conditional-naming-service/README.md @@ -0,0 +1,35 @@ +### Service Naming Rules + +A typical case could be that you access to *Transaction & Services* and you find two services that are exactly the same: +*DataDownloadV1* +*DataDownloadV1* + +If you drilldown into the service and you check in the process group, you may have a PROD and a E2E for each service. + +*Note: if you see that both process group are exactly the same, please contact a Dynatrace expert to create a Process* +*Group detection rule* + +In the case the PG are PROD and E2E, then we need to create a rule that looks like this: + +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {Service:DetectedName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +- tag: Infotainment +- skipDeployment: false +``` + +The rule will get the Service Detected Name (current name) and it will extract (with a regex) the part of the kubernetes namespace after the "-", so -prod or -e2e, resulting in: +*DataDownloadV1 - prod* +*DataDownloadV1 - e2e* + +Now, services will be easy to identify. + +You can create rules based on any property/metadata. Some other placeholder's eamples: +{Service:DatabaseName} - E2E +{Service:WebServiceName} - {ProcessGroup:Kubernetes:microservice} - {ProcessGroup:Kubernetes:environment} +{Service:DetectedName} - {ProcessGroup:KubernetesContainerName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +{Service:DetectedName} - {ProcessGroup:SpringBootProfileName/[^\\-]*$} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_ts-wlupdater/conditional-naming-service/conditional-naming-service.yaml b/BMW-Dynatrace-config/CD_ts-wlupdater/conditional-naming-service/conditional-naming-service.yaml new file mode 100644 index 00000000..61c768a8 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-wlupdater/conditional-naming-service/conditional-naming-service.yaml @@ -0,0 +1,8 @@ +config: +- CDts-wlupdater: template.json + +CDts-wlupdater: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: ts-wlupdater +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_ts-wlupdater/conditional-naming-service/template.json b/BMW-Dynatrace-config/CD_ts-wlupdater/conditional-naming-service/template.json new file mode 100644 index 00000000..5d4fac56 --- /dev/null +++ b/BMW-Dynatrace-config/CD_ts-wlupdater/conditional-naming-service/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "type": "SERVICE" +} \ 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 index d41c4c77..5f35e5c1 100644 --- a/BMW-Dynatrace-config/CD_ts-wlupdater/custom-service-java/README.md +++ b/BMW-Dynatrace-config/CD_ts-wlupdater/custom-service-java/README.md @@ -1,30 +1,4 @@ -## 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 configure custom services? -## 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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Custom+Services) page to configure your custom services. \ 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 index 92e734fa..1695924c 100644 --- a/BMW-Dynatrace-config/CD_ts-wlupdater/synthetic-monitor/README.md +++ b/BMW-Dynatrace-config/CD_ts-wlupdater/synthetic-monitor/README.md @@ -1,37 +1,4 @@ -# Synthetic Configuration -To calculate the Availability KPI, a synthetic must be configured. +### How to configure synthetics? -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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Synthetic+Monitors) page to configure your synthetics. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_tscs/conditional-naming-processgroup/README.md b/BMW-Dynatrace-config/CD_tscs/conditional-naming-processgroup/README.md new file mode 100644 index 00000000..f94196a5 --- /dev/null +++ b/BMW-Dynatrace-config/CD_tscs/conditional-naming-processgroup/README.md @@ -0,0 +1,67 @@ +### Process Group Detection Rules and Naming + +#### Detection Rule or Naming? + +For the explanation, we're using a real example of the Infotainment application: + +!(PGNaming1)[../../../../img/PGNaming1.PNG] + +Before working with your dashboards and alerting profiles, an important task to do when working with Dynatrace is checking +the structure of your applications (process groups). You can do that clicking under *technologies* and filter using your +application Management Zone. + +In the picture above, there are two Process Groups called bon-information-prod. **If you see duplicated process groups like in** +**this case, you MUST follow this guideline** + +Next step would be to open both process groups and compare the metadata. In that way, you can identify if all process instances are +part of the same application or not. An easy way to do that is asking yourself: how many instances of my application do i have? + +If you have 4 instances in total and you're able to see 2 in one PG and other 2 in other PG it means that **they are part of the ** +**same application** + +Another situation could be that checking on the metadata, then you see that are **two different application** and Dynatrace is just naming +the process group in the same way + +*Same application* +- Problem: Dynatrace is creating two different process groups, what transalates in two separated services for the same application. Instead of +seeing all the traffic in one service, you will have it splitted and it will complicate your monitoring +- Solution: create a process group detection rule. Contact Dynatrace Expert + +*Different application* +- Problem: Dynatrace is just naming in the same way applications that are different. +- Solution: This case is less severe, since it can be fixed with a process group naming rule. + + +What about our example? +!(PGNaming2)[../../../../img/PGNaming2.PNG] +!(PGNaming3)[../../../../img/PGNaming3.PNG] + +Based on the feedback of the infotaiment team, each process group is a different application (microservice) and it's visible in the kubernetes container/workload +within the metadata of each Process Group. + +#### How to create a Process Group Detection Rule +1. Open the *conditional-naming-processgroup.yaml* file and create a rule that looks like this: +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName} +- tag: Infotainment +- skipDeployment: false +``` +The result of the rule will be renaming the PG to this: +``` +bon-information-prod ipa +bon-information-prod rsl +``` + +Other possible placeholders that you can use are for example: +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName/[^\\-]*$} +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesFullPodName/buffet-(.*?)-} +{ProcessGroup:DetectedName} - {HostGroup:Name/[^\\_]*$} +{ProcessGroup:KubernetesNamespace} +{ProcessGroup:CommandLineArgs/.*?\\-f\\s\\/www\\/(.*?)\\/generated\\/httpd\\.conf.*?} + +You can combine different ones. Check the (documentation)[link] for more \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_tscs/conditional-naming-processgroup/conditional-naming-processgroup.yaml b/BMW-Dynatrace-config/CD_tscs/conditional-naming-processgroup/conditional-naming-processgroup.yaml new file mode 100644 index 00000000..689b1426 --- /dev/null +++ b/BMW-Dynatrace-config/CD_tscs/conditional-naming-processgroup/conditional-naming-processgroup.yaml @@ -0,0 +1,8 @@ +config: +- CDtscs: template.json + +CDtscs: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: tscs +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_tscs/conditional-naming-processgroup/template.json b/BMW-Dynatrace-config/CD_tscs/conditional-naming-processgroup/template.json new file mode 100644 index 00000000..7c039808 --- /dev/null +++ b/BMW-Dynatrace-config/CD_tscs/conditional-naming-processgroup/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "type": "PROCESS_GROUP" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_tscs/conditional-naming-service/README.md b/BMW-Dynatrace-config/CD_tscs/conditional-naming-service/README.md new file mode 100644 index 00000000..c34ef308 --- /dev/null +++ b/BMW-Dynatrace-config/CD_tscs/conditional-naming-service/README.md @@ -0,0 +1,35 @@ +### Service Naming Rules + +A typical case could be that you access to *Transaction & Services* and you find two services that are exactly the same: +*DataDownloadV1* +*DataDownloadV1* + +If you drilldown into the service and you check in the process group, you may have a PROD and a E2E for each service. + +*Note: if you see that both process group are exactly the same, please contact a Dynatrace expert to create a Process* +*Group detection rule* + +In the case the PG are PROD and E2E, then we need to create a rule that looks like this: + +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {Service:DetectedName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +- tag: Infotainment +- skipDeployment: false +``` + +The rule will get the Service Detected Name (current name) and it will extract (with a regex) the part of the kubernetes namespace after the "-", so -prod or -e2e, resulting in: +*DataDownloadV1 - prod* +*DataDownloadV1 - e2e* + +Now, services will be easy to identify. + +You can create rules based on any property/metadata. Some other placeholder's eamples: +{Service:DatabaseName} - E2E +{Service:WebServiceName} - {ProcessGroup:Kubernetes:microservice} - {ProcessGroup:Kubernetes:environment} +{Service:DetectedName} - {ProcessGroup:KubernetesContainerName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +{Service:DetectedName} - {ProcessGroup:SpringBootProfileName/[^\\-]*$} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_tscs/conditional-naming-service/conditional-naming-service.yaml b/BMW-Dynatrace-config/CD_tscs/conditional-naming-service/conditional-naming-service.yaml new file mode 100644 index 00000000..689b1426 --- /dev/null +++ b/BMW-Dynatrace-config/CD_tscs/conditional-naming-service/conditional-naming-service.yaml @@ -0,0 +1,8 @@ +config: +- CDtscs: template.json + +CDtscs: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: tscs +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_tscs/conditional-naming-service/template.json b/BMW-Dynatrace-config/CD_tscs/conditional-naming-service/template.json new file mode 100644 index 00000000..5d4fac56 --- /dev/null +++ b/BMW-Dynatrace-config/CD_tscs/conditional-naming-service/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "type": "SERVICE" +} \ 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 index d41c4c77..5f35e5c1 100644 --- a/BMW-Dynatrace-config/CD_tscs/custom-service-java/README.md +++ b/BMW-Dynatrace-config/CD_tscs/custom-service-java/README.md @@ -1,30 +1,4 @@ -## 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 configure custom services? -## 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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Custom+Services) page to configure your custom services. \ 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 index 92e734fa..1695924c 100644 --- a/BMW-Dynatrace-config/CD_tscs/synthetic-monitor/README.md +++ b/BMW-Dynatrace-config/CD_tscs/synthetic-monitor/README.md @@ -1,37 +1,4 @@ -# Synthetic Configuration -To calculate the Availability KPI, a synthetic must be configured. +### How to configure synthetics? -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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Synthetic+Monitors) page to configure your synthetics. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_tsmb/conditional-naming-processgroup/README.md b/BMW-Dynatrace-config/CD_tsmb/conditional-naming-processgroup/README.md new file mode 100644 index 00000000..f94196a5 --- /dev/null +++ b/BMW-Dynatrace-config/CD_tsmb/conditional-naming-processgroup/README.md @@ -0,0 +1,67 @@ +### Process Group Detection Rules and Naming + +#### Detection Rule or Naming? + +For the explanation, we're using a real example of the Infotainment application: + +!(PGNaming1)[../../../../img/PGNaming1.PNG] + +Before working with your dashboards and alerting profiles, an important task to do when working with Dynatrace is checking +the structure of your applications (process groups). You can do that clicking under *technologies* and filter using your +application Management Zone. + +In the picture above, there are two Process Groups called bon-information-prod. **If you see duplicated process groups like in** +**this case, you MUST follow this guideline** + +Next step would be to open both process groups and compare the metadata. In that way, you can identify if all process instances are +part of the same application or not. An easy way to do that is asking yourself: how many instances of my application do i have? + +If you have 4 instances in total and you're able to see 2 in one PG and other 2 in other PG it means that **they are part of the ** +**same application** + +Another situation could be that checking on the metadata, then you see that are **two different application** and Dynatrace is just naming +the process group in the same way + +*Same application* +- Problem: Dynatrace is creating two different process groups, what transalates in two separated services for the same application. Instead of +seeing all the traffic in one service, you will have it splitted and it will complicate your monitoring +- Solution: create a process group detection rule. Contact Dynatrace Expert + +*Different application* +- Problem: Dynatrace is just naming in the same way applications that are different. +- Solution: This case is less severe, since it can be fixed with a process group naming rule. + + +What about our example? +!(PGNaming2)[../../../../img/PGNaming2.PNG] +!(PGNaming3)[../../../../img/PGNaming3.PNG] + +Based on the feedback of the infotaiment team, each process group is a different application (microservice) and it's visible in the kubernetes container/workload +within the metadata of each Process Group. + +#### How to create a Process Group Detection Rule +1. Open the *conditional-naming-processgroup.yaml* file and create a rule that looks like this: +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName} +- tag: Infotainment +- skipDeployment: false +``` +The result of the rule will be renaming the PG to this: +``` +bon-information-prod ipa +bon-information-prod rsl +``` + +Other possible placeholders that you can use are for example: +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName/[^\\-]*$} +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesFullPodName/buffet-(.*?)-} +{ProcessGroup:DetectedName} - {HostGroup:Name/[^\\_]*$} +{ProcessGroup:KubernetesNamespace} +{ProcessGroup:CommandLineArgs/.*?\\-f\\s\\/www\\/(.*?)\\/generated\\/httpd\\.conf.*?} + +You can combine different ones. Check the (documentation)[link] for more \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_tsmb/conditional-naming-processgroup/conditional-naming-processgroup.yaml b/BMW-Dynatrace-config/CD_tsmb/conditional-naming-processgroup/conditional-naming-processgroup.yaml new file mode 100644 index 00000000..7f350b36 --- /dev/null +++ b/BMW-Dynatrace-config/CD_tsmb/conditional-naming-processgroup/conditional-naming-processgroup.yaml @@ -0,0 +1,8 @@ +config: +- CDtsmb: template.json + +CDtsmb: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: tsmb +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_tsmb/conditional-naming-processgroup/template.json b/BMW-Dynatrace-config/CD_tsmb/conditional-naming-processgroup/template.json new file mode 100644 index 00000000..7c039808 --- /dev/null +++ b/BMW-Dynatrace-config/CD_tsmb/conditional-naming-processgroup/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "type": "PROCESS_GROUP" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_tsmb/conditional-naming-service/README.md b/BMW-Dynatrace-config/CD_tsmb/conditional-naming-service/README.md new file mode 100644 index 00000000..c34ef308 --- /dev/null +++ b/BMW-Dynatrace-config/CD_tsmb/conditional-naming-service/README.md @@ -0,0 +1,35 @@ +### Service Naming Rules + +A typical case could be that you access to *Transaction & Services* and you find two services that are exactly the same: +*DataDownloadV1* +*DataDownloadV1* + +If you drilldown into the service and you check in the process group, you may have a PROD and a E2E for each service. + +*Note: if you see that both process group are exactly the same, please contact a Dynatrace expert to create a Process* +*Group detection rule* + +In the case the PG are PROD and E2E, then we need to create a rule that looks like this: + +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {Service:DetectedName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +- tag: Infotainment +- skipDeployment: false +``` + +The rule will get the Service Detected Name (current name) and it will extract (with a regex) the part of the kubernetes namespace after the "-", so -prod or -e2e, resulting in: +*DataDownloadV1 - prod* +*DataDownloadV1 - e2e* + +Now, services will be easy to identify. + +You can create rules based on any property/metadata. Some other placeholder's eamples: +{Service:DatabaseName} - E2E +{Service:WebServiceName} - {ProcessGroup:Kubernetes:microservice} - {ProcessGroup:Kubernetes:environment} +{Service:DetectedName} - {ProcessGroup:KubernetesContainerName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +{Service:DetectedName} - {ProcessGroup:SpringBootProfileName/[^\\-]*$} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_tsmb/conditional-naming-service/conditional-naming-service.yaml b/BMW-Dynatrace-config/CD_tsmb/conditional-naming-service/conditional-naming-service.yaml new file mode 100644 index 00000000..7f350b36 --- /dev/null +++ b/BMW-Dynatrace-config/CD_tsmb/conditional-naming-service/conditional-naming-service.yaml @@ -0,0 +1,8 @@ +config: +- CDtsmb: template.json + +CDtsmb: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: tsmb +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_tsmb/conditional-naming-service/template.json b/BMW-Dynatrace-config/CD_tsmb/conditional-naming-service/template.json new file mode 100644 index 00000000..5d4fac56 --- /dev/null +++ b/BMW-Dynatrace-config/CD_tsmb/conditional-naming-service/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "type": "SERVICE" +} \ 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 index d41c4c77..5f35e5c1 100644 --- a/BMW-Dynatrace-config/CD_tsmb/custom-service-java/README.md +++ b/BMW-Dynatrace-config/CD_tsmb/custom-service-java/README.md @@ -1,30 +1,4 @@ -## 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 configure custom services? -## 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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Custom+Services) page to configure your custom services. \ 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 index 92e734fa..1695924c 100644 --- a/BMW-Dynatrace-config/CD_tsmb/synthetic-monitor/README.md +++ b/BMW-Dynatrace-config/CD_tsmb/synthetic-monitor/README.md @@ -1,37 +1,4 @@ -# Synthetic Configuration -To calculate the Availability KPI, a synthetic must be configured. +### How to configure synthetics? -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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Synthetic+Monitors) page to configure your synthetics. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_tsr-cmr/conditional-naming-processgroup/README.md b/BMW-Dynatrace-config/CD_tsr-cmr/conditional-naming-processgroup/README.md new file mode 100644 index 00000000..f94196a5 --- /dev/null +++ b/BMW-Dynatrace-config/CD_tsr-cmr/conditional-naming-processgroup/README.md @@ -0,0 +1,67 @@ +### Process Group Detection Rules and Naming + +#### Detection Rule or Naming? + +For the explanation, we're using a real example of the Infotainment application: + +!(PGNaming1)[../../../../img/PGNaming1.PNG] + +Before working with your dashboards and alerting profiles, an important task to do when working with Dynatrace is checking +the structure of your applications (process groups). You can do that clicking under *technologies* and filter using your +application Management Zone. + +In the picture above, there are two Process Groups called bon-information-prod. **If you see duplicated process groups like in** +**this case, you MUST follow this guideline** + +Next step would be to open both process groups and compare the metadata. In that way, you can identify if all process instances are +part of the same application or not. An easy way to do that is asking yourself: how many instances of my application do i have? + +If you have 4 instances in total and you're able to see 2 in one PG and other 2 in other PG it means that **they are part of the ** +**same application** + +Another situation could be that checking on the metadata, then you see that are **two different application** and Dynatrace is just naming +the process group in the same way + +*Same application* +- Problem: Dynatrace is creating two different process groups, what transalates in two separated services for the same application. Instead of +seeing all the traffic in one service, you will have it splitted and it will complicate your monitoring +- Solution: create a process group detection rule. Contact Dynatrace Expert + +*Different application* +- Problem: Dynatrace is just naming in the same way applications that are different. +- Solution: This case is less severe, since it can be fixed with a process group naming rule. + + +What about our example? +!(PGNaming2)[../../../../img/PGNaming2.PNG] +!(PGNaming3)[../../../../img/PGNaming3.PNG] + +Based on the feedback of the infotaiment team, each process group is a different application (microservice) and it's visible in the kubernetes container/workload +within the metadata of each Process Group. + +#### How to create a Process Group Detection Rule +1. Open the *conditional-naming-processgroup.yaml* file and create a rule that looks like this: +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName} +- tag: Infotainment +- skipDeployment: false +``` +The result of the rule will be renaming the PG to this: +``` +bon-information-prod ipa +bon-information-prod rsl +``` + +Other possible placeholders that you can use are for example: +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName/[^\\-]*$} +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesFullPodName/buffet-(.*?)-} +{ProcessGroup:DetectedName} - {HostGroup:Name/[^\\_]*$} +{ProcessGroup:KubernetesNamespace} +{ProcessGroup:CommandLineArgs/.*?\\-f\\s\\/www\\/(.*?)\\/generated\\/httpd\\.conf.*?} + +You can combine different ones. Check the (documentation)[link] for more \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_tsr-cmr/conditional-naming-processgroup/conditional-naming-processgroup.yaml b/BMW-Dynatrace-config/CD_tsr-cmr/conditional-naming-processgroup/conditional-naming-processgroup.yaml new file mode 100644 index 00000000..92a203ef --- /dev/null +++ b/BMW-Dynatrace-config/CD_tsr-cmr/conditional-naming-processgroup/conditional-naming-processgroup.yaml @@ -0,0 +1,8 @@ +config: +- CDtsr-cmr: template.json + +CDtsr-cmr: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: tsr-cmr +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_tsr-cmr/conditional-naming-processgroup/template.json b/BMW-Dynatrace-config/CD_tsr-cmr/conditional-naming-processgroup/template.json new file mode 100644 index 00000000..7c039808 --- /dev/null +++ b/BMW-Dynatrace-config/CD_tsr-cmr/conditional-naming-processgroup/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "type": "PROCESS_GROUP" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_tsr-cmr/conditional-naming-service/README.md b/BMW-Dynatrace-config/CD_tsr-cmr/conditional-naming-service/README.md new file mode 100644 index 00000000..c34ef308 --- /dev/null +++ b/BMW-Dynatrace-config/CD_tsr-cmr/conditional-naming-service/README.md @@ -0,0 +1,35 @@ +### Service Naming Rules + +A typical case could be that you access to *Transaction & Services* and you find two services that are exactly the same: +*DataDownloadV1* +*DataDownloadV1* + +If you drilldown into the service and you check in the process group, you may have a PROD and a E2E for each service. + +*Note: if you see that both process group are exactly the same, please contact a Dynatrace expert to create a Process* +*Group detection rule* + +In the case the PG are PROD and E2E, then we need to create a rule that looks like this: + +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {Service:DetectedName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +- tag: Infotainment +- skipDeployment: false +``` + +The rule will get the Service Detected Name (current name) and it will extract (with a regex) the part of the kubernetes namespace after the "-", so -prod or -e2e, resulting in: +*DataDownloadV1 - prod* +*DataDownloadV1 - e2e* + +Now, services will be easy to identify. + +You can create rules based on any property/metadata. Some other placeholder's eamples: +{Service:DatabaseName} - E2E +{Service:WebServiceName} - {ProcessGroup:Kubernetes:microservice} - {ProcessGroup:Kubernetes:environment} +{Service:DetectedName} - {ProcessGroup:KubernetesContainerName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +{Service:DetectedName} - {ProcessGroup:SpringBootProfileName/[^\\-]*$} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_tsr-cmr/conditional-naming-service/conditional-naming-service.yaml b/BMW-Dynatrace-config/CD_tsr-cmr/conditional-naming-service/conditional-naming-service.yaml new file mode 100644 index 00000000..92a203ef --- /dev/null +++ b/BMW-Dynatrace-config/CD_tsr-cmr/conditional-naming-service/conditional-naming-service.yaml @@ -0,0 +1,8 @@ +config: +- CDtsr-cmr: template.json + +CDtsr-cmr: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: tsr-cmr +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_tsr-cmr/conditional-naming-service/template.json b/BMW-Dynatrace-config/CD_tsr-cmr/conditional-naming-service/template.json new file mode 100644 index 00000000..5d4fac56 --- /dev/null +++ b/BMW-Dynatrace-config/CD_tsr-cmr/conditional-naming-service/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "type": "SERVICE" +} \ 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 index d41c4c77..5f35e5c1 100644 --- a/BMW-Dynatrace-config/CD_tsr-cmr/custom-service-java/README.md +++ b/BMW-Dynatrace-config/CD_tsr-cmr/custom-service-java/README.md @@ -1,30 +1,4 @@ -## 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 configure custom services? -## 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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Custom+Services) page to configure your custom services. \ 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 index 92e734fa..1695924c 100644 --- a/BMW-Dynatrace-config/CD_tsr-cmr/synthetic-monitor/README.md +++ b/BMW-Dynatrace-config/CD_tsr-cmr/synthetic-monitor/README.md @@ -1,37 +1,4 @@ -# Synthetic Configuration -To calculate the Availability KPI, a synthetic must be configured. +### How to configure synthetics? -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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Synthetic+Monitors) page to configure your synthetics. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_tsr-dd/conditional-naming-processgroup/README.md b/BMW-Dynatrace-config/CD_tsr-dd/conditional-naming-processgroup/README.md new file mode 100644 index 00000000..f94196a5 --- /dev/null +++ b/BMW-Dynatrace-config/CD_tsr-dd/conditional-naming-processgroup/README.md @@ -0,0 +1,67 @@ +### Process Group Detection Rules and Naming + +#### Detection Rule or Naming? + +For the explanation, we're using a real example of the Infotainment application: + +!(PGNaming1)[../../../../img/PGNaming1.PNG] + +Before working with your dashboards and alerting profiles, an important task to do when working with Dynatrace is checking +the structure of your applications (process groups). You can do that clicking under *technologies* and filter using your +application Management Zone. + +In the picture above, there are two Process Groups called bon-information-prod. **If you see duplicated process groups like in** +**this case, you MUST follow this guideline** + +Next step would be to open both process groups and compare the metadata. In that way, you can identify if all process instances are +part of the same application or not. An easy way to do that is asking yourself: how many instances of my application do i have? + +If you have 4 instances in total and you're able to see 2 in one PG and other 2 in other PG it means that **they are part of the ** +**same application** + +Another situation could be that checking on the metadata, then you see that are **two different application** and Dynatrace is just naming +the process group in the same way + +*Same application* +- Problem: Dynatrace is creating two different process groups, what transalates in two separated services for the same application. Instead of +seeing all the traffic in one service, you will have it splitted and it will complicate your monitoring +- Solution: create a process group detection rule. Contact Dynatrace Expert + +*Different application* +- Problem: Dynatrace is just naming in the same way applications that are different. +- Solution: This case is less severe, since it can be fixed with a process group naming rule. + + +What about our example? +!(PGNaming2)[../../../../img/PGNaming2.PNG] +!(PGNaming3)[../../../../img/PGNaming3.PNG] + +Based on the feedback of the infotaiment team, each process group is a different application (microservice) and it's visible in the kubernetes container/workload +within the metadata of each Process Group. + +#### How to create a Process Group Detection Rule +1. Open the *conditional-naming-processgroup.yaml* file and create a rule that looks like this: +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName} +- tag: Infotainment +- skipDeployment: false +``` +The result of the rule will be renaming the PG to this: +``` +bon-information-prod ipa +bon-information-prod rsl +``` + +Other possible placeholders that you can use are for example: +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName/[^\\-]*$} +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesFullPodName/buffet-(.*?)-} +{ProcessGroup:DetectedName} - {HostGroup:Name/[^\\_]*$} +{ProcessGroup:KubernetesNamespace} +{ProcessGroup:CommandLineArgs/.*?\\-f\\s\\/www\\/(.*?)\\/generated\\/httpd\\.conf.*?} + +You can combine different ones. Check the (documentation)[link] for more \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_tsr-dd/conditional-naming-processgroup/conditional-naming-processgroup.yaml b/BMW-Dynatrace-config/CD_tsr-dd/conditional-naming-processgroup/conditional-naming-processgroup.yaml new file mode 100644 index 00000000..a57f1303 --- /dev/null +++ b/BMW-Dynatrace-config/CD_tsr-dd/conditional-naming-processgroup/conditional-naming-processgroup.yaml @@ -0,0 +1,8 @@ +config: +- CDtsr-dd: template.json + +CDtsr-dd: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: tsr-dd +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_tsr-dd/conditional-naming-processgroup/template.json b/BMW-Dynatrace-config/CD_tsr-dd/conditional-naming-processgroup/template.json new file mode 100644 index 00000000..7c039808 --- /dev/null +++ b/BMW-Dynatrace-config/CD_tsr-dd/conditional-naming-processgroup/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "type": "PROCESS_GROUP" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_tsr-dd/conditional-naming-service/README.md b/BMW-Dynatrace-config/CD_tsr-dd/conditional-naming-service/README.md new file mode 100644 index 00000000..c34ef308 --- /dev/null +++ b/BMW-Dynatrace-config/CD_tsr-dd/conditional-naming-service/README.md @@ -0,0 +1,35 @@ +### Service Naming Rules + +A typical case could be that you access to *Transaction & Services* and you find two services that are exactly the same: +*DataDownloadV1* +*DataDownloadV1* + +If you drilldown into the service and you check in the process group, you may have a PROD and a E2E for each service. + +*Note: if you see that both process group are exactly the same, please contact a Dynatrace expert to create a Process* +*Group detection rule* + +In the case the PG are PROD and E2E, then we need to create a rule that looks like this: + +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {Service:DetectedName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +- tag: Infotainment +- skipDeployment: false +``` + +The rule will get the Service Detected Name (current name) and it will extract (with a regex) the part of the kubernetes namespace after the "-", so -prod or -e2e, resulting in: +*DataDownloadV1 - prod* +*DataDownloadV1 - e2e* + +Now, services will be easy to identify. + +You can create rules based on any property/metadata. Some other placeholder's eamples: +{Service:DatabaseName} - E2E +{Service:WebServiceName} - {ProcessGroup:Kubernetes:microservice} - {ProcessGroup:Kubernetes:environment} +{Service:DetectedName} - {ProcessGroup:KubernetesContainerName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +{Service:DetectedName} - {ProcessGroup:SpringBootProfileName/[^\\-]*$} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_tsr-dd/conditional-naming-service/conditional-naming-service.yaml b/BMW-Dynatrace-config/CD_tsr-dd/conditional-naming-service/conditional-naming-service.yaml new file mode 100644 index 00000000..a57f1303 --- /dev/null +++ b/BMW-Dynatrace-config/CD_tsr-dd/conditional-naming-service/conditional-naming-service.yaml @@ -0,0 +1,8 @@ +config: +- CDtsr-dd: template.json + +CDtsr-dd: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: tsr-dd +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_tsr-dd/conditional-naming-service/template.json b/BMW-Dynatrace-config/CD_tsr-dd/conditional-naming-service/template.json new file mode 100644 index 00000000..5d4fac56 --- /dev/null +++ b/BMW-Dynatrace-config/CD_tsr-dd/conditional-naming-service/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "type": "SERVICE" +} \ 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 index d41c4c77..5f35e5c1 100644 --- a/BMW-Dynatrace-config/CD_tsr-dd/custom-service-java/README.md +++ b/BMW-Dynatrace-config/CD_tsr-dd/custom-service-java/README.md @@ -1,30 +1,4 @@ -## 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 configure custom services? -## 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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Custom+Services) page to configure your custom services. \ 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 index 92e734fa..1695924c 100644 --- a/BMW-Dynatrace-config/CD_tsr-dd/synthetic-monitor/README.md +++ b/BMW-Dynatrace-config/CD_tsr-dd/synthetic-monitor/README.md @@ -1,37 +1,4 @@ -# Synthetic Configuration -To calculate the Availability KPI, a synthetic must be configured. +### How to configure synthetics? -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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Synthetic+Monitors) page to configure your synthetics. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_tsr-vu/conditional-naming-processgroup/README.md b/BMW-Dynatrace-config/CD_tsr-vu/conditional-naming-processgroup/README.md new file mode 100644 index 00000000..f94196a5 --- /dev/null +++ b/BMW-Dynatrace-config/CD_tsr-vu/conditional-naming-processgroup/README.md @@ -0,0 +1,67 @@ +### Process Group Detection Rules and Naming + +#### Detection Rule or Naming? + +For the explanation, we're using a real example of the Infotainment application: + +!(PGNaming1)[../../../../img/PGNaming1.PNG] + +Before working with your dashboards and alerting profiles, an important task to do when working with Dynatrace is checking +the structure of your applications (process groups). You can do that clicking under *technologies* and filter using your +application Management Zone. + +In the picture above, there are two Process Groups called bon-information-prod. **If you see duplicated process groups like in** +**this case, you MUST follow this guideline** + +Next step would be to open both process groups and compare the metadata. In that way, you can identify if all process instances are +part of the same application or not. An easy way to do that is asking yourself: how many instances of my application do i have? + +If you have 4 instances in total and you're able to see 2 in one PG and other 2 in other PG it means that **they are part of the ** +**same application** + +Another situation could be that checking on the metadata, then you see that are **two different application** and Dynatrace is just naming +the process group in the same way + +*Same application* +- Problem: Dynatrace is creating two different process groups, what transalates in two separated services for the same application. Instead of +seeing all the traffic in one service, you will have it splitted and it will complicate your monitoring +- Solution: create a process group detection rule. Contact Dynatrace Expert + +*Different application* +- Problem: Dynatrace is just naming in the same way applications that are different. +- Solution: This case is less severe, since it can be fixed with a process group naming rule. + + +What about our example? +!(PGNaming2)[../../../../img/PGNaming2.PNG] +!(PGNaming3)[../../../../img/PGNaming3.PNG] + +Based on the feedback of the infotaiment team, each process group is a different application (microservice) and it's visible in the kubernetes container/workload +within the metadata of each Process Group. + +#### How to create a Process Group Detection Rule +1. Open the *conditional-naming-processgroup.yaml* file and create a rule that looks like this: +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName} +- tag: Infotainment +- skipDeployment: false +``` +The result of the rule will be renaming the PG to this: +``` +bon-information-prod ipa +bon-information-prod rsl +``` + +Other possible placeholders that you can use are for example: +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName/[^\\-]*$} +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesFullPodName/buffet-(.*?)-} +{ProcessGroup:DetectedName} - {HostGroup:Name/[^\\_]*$} +{ProcessGroup:KubernetesNamespace} +{ProcessGroup:CommandLineArgs/.*?\\-f\\s\\/www\\/(.*?)\\/generated\\/httpd\\.conf.*?} + +You can combine different ones. Check the (documentation)[link] for more \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_tsr-vu/conditional-naming-processgroup/conditional-naming-processgroup.yaml b/BMW-Dynatrace-config/CD_tsr-vu/conditional-naming-processgroup/conditional-naming-processgroup.yaml new file mode 100644 index 00000000..de0cd3cf --- /dev/null +++ b/BMW-Dynatrace-config/CD_tsr-vu/conditional-naming-processgroup/conditional-naming-processgroup.yaml @@ -0,0 +1,8 @@ +config: +- CDtsr-vu: template.json + +CDtsr-vu: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: tsr-vu +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_tsr-vu/conditional-naming-processgroup/template.json b/BMW-Dynatrace-config/CD_tsr-vu/conditional-naming-processgroup/template.json new file mode 100644 index 00000000..7c039808 --- /dev/null +++ b/BMW-Dynatrace-config/CD_tsr-vu/conditional-naming-processgroup/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "type": "PROCESS_GROUP" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_tsr-vu/conditional-naming-service/README.md b/BMW-Dynatrace-config/CD_tsr-vu/conditional-naming-service/README.md new file mode 100644 index 00000000..c34ef308 --- /dev/null +++ b/BMW-Dynatrace-config/CD_tsr-vu/conditional-naming-service/README.md @@ -0,0 +1,35 @@ +### Service Naming Rules + +A typical case could be that you access to *Transaction & Services* and you find two services that are exactly the same: +*DataDownloadV1* +*DataDownloadV1* + +If you drilldown into the service and you check in the process group, you may have a PROD and a E2E for each service. + +*Note: if you see that both process group are exactly the same, please contact a Dynatrace expert to create a Process* +*Group detection rule* + +In the case the PG are PROD and E2E, then we need to create a rule that looks like this: + +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {Service:DetectedName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +- tag: Infotainment +- skipDeployment: false +``` + +The rule will get the Service Detected Name (current name) and it will extract (with a regex) the part of the kubernetes namespace after the "-", so -prod or -e2e, resulting in: +*DataDownloadV1 - prod* +*DataDownloadV1 - e2e* + +Now, services will be easy to identify. + +You can create rules based on any property/metadata. Some other placeholder's eamples: +{Service:DatabaseName} - E2E +{Service:WebServiceName} - {ProcessGroup:Kubernetes:microservice} - {ProcessGroup:Kubernetes:environment} +{Service:DetectedName} - {ProcessGroup:KubernetesContainerName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +{Service:DetectedName} - {ProcessGroup:SpringBootProfileName/[^\\-]*$} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_tsr-vu/conditional-naming-service/conditional-naming-service.yaml b/BMW-Dynatrace-config/CD_tsr-vu/conditional-naming-service/conditional-naming-service.yaml new file mode 100644 index 00000000..de0cd3cf --- /dev/null +++ b/BMW-Dynatrace-config/CD_tsr-vu/conditional-naming-service/conditional-naming-service.yaml @@ -0,0 +1,8 @@ +config: +- CDtsr-vu: template.json + +CDtsr-vu: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: tsr-vu +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_tsr-vu/conditional-naming-service/template.json b/BMW-Dynatrace-config/CD_tsr-vu/conditional-naming-service/template.json new file mode 100644 index 00000000..5d4fac56 --- /dev/null +++ b/BMW-Dynatrace-config/CD_tsr-vu/conditional-naming-service/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "type": "SERVICE" +} \ 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 index d41c4c77..5f35e5c1 100644 --- a/BMW-Dynatrace-config/CD_tsr-vu/custom-service-java/README.md +++ b/BMW-Dynatrace-config/CD_tsr-vu/custom-service-java/README.md @@ -1,30 +1,4 @@ -## 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 configure custom services? -## 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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Custom+Services) page to configure your custom services. \ 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 index 92e734fa..1695924c 100644 --- a/BMW-Dynatrace-config/CD_tsr-vu/synthetic-monitor/README.md +++ b/BMW-Dynatrace-config/CD_tsr-vu/synthetic-monitor/README.md @@ -1,37 +1,4 @@ -# Synthetic Configuration -To calculate the Availability KPI, a synthetic must be configured. +### How to configure synthetics? -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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Synthetic+Monitors) page to configure your synthetics. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_tsrservice/conditional-naming-processgroup/README.md b/BMW-Dynatrace-config/CD_tsrservice/conditional-naming-processgroup/README.md new file mode 100644 index 00000000..f94196a5 --- /dev/null +++ b/BMW-Dynatrace-config/CD_tsrservice/conditional-naming-processgroup/README.md @@ -0,0 +1,67 @@ +### Process Group Detection Rules and Naming + +#### Detection Rule or Naming? + +For the explanation, we're using a real example of the Infotainment application: + +!(PGNaming1)[../../../../img/PGNaming1.PNG] + +Before working with your dashboards and alerting profiles, an important task to do when working with Dynatrace is checking +the structure of your applications (process groups). You can do that clicking under *technologies* and filter using your +application Management Zone. + +In the picture above, there are two Process Groups called bon-information-prod. **If you see duplicated process groups like in** +**this case, you MUST follow this guideline** + +Next step would be to open both process groups and compare the metadata. In that way, you can identify if all process instances are +part of the same application or not. An easy way to do that is asking yourself: how many instances of my application do i have? + +If you have 4 instances in total and you're able to see 2 in one PG and other 2 in other PG it means that **they are part of the ** +**same application** + +Another situation could be that checking on the metadata, then you see that are **two different application** and Dynatrace is just naming +the process group in the same way + +*Same application* +- Problem: Dynatrace is creating two different process groups, what transalates in two separated services for the same application. Instead of +seeing all the traffic in one service, you will have it splitted and it will complicate your monitoring +- Solution: create a process group detection rule. Contact Dynatrace Expert + +*Different application* +- Problem: Dynatrace is just naming in the same way applications that are different. +- Solution: This case is less severe, since it can be fixed with a process group naming rule. + + +What about our example? +!(PGNaming2)[../../../../img/PGNaming2.PNG] +!(PGNaming3)[../../../../img/PGNaming3.PNG] + +Based on the feedback of the infotaiment team, each process group is a different application (microservice) and it's visible in the kubernetes container/workload +within the metadata of each Process Group. + +#### How to create a Process Group Detection Rule +1. Open the *conditional-naming-processgroup.yaml* file and create a rule that looks like this: +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName} +- tag: Infotainment +- skipDeployment: false +``` +The result of the rule will be renaming the PG to this: +``` +bon-information-prod ipa +bon-information-prod rsl +``` + +Other possible placeholders that you can use are for example: +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName/[^\\-]*$} +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesFullPodName/buffet-(.*?)-} +{ProcessGroup:DetectedName} - {HostGroup:Name/[^\\_]*$} +{ProcessGroup:KubernetesNamespace} +{ProcessGroup:CommandLineArgs/.*?\\-f\\s\\/www\\/(.*?)\\/generated\\/httpd\\.conf.*?} + +You can combine different ones. Check the (documentation)[link] for more \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_tsrservice/conditional-naming-processgroup/conditional-naming-processgroup.yaml b/BMW-Dynatrace-config/CD_tsrservice/conditional-naming-processgroup/conditional-naming-processgroup.yaml new file mode 100644 index 00000000..2e66c73a --- /dev/null +++ b/BMW-Dynatrace-config/CD_tsrservice/conditional-naming-processgroup/conditional-naming-processgroup.yaml @@ -0,0 +1,8 @@ +config: +- CDtsrservice: template.json + +CDtsrservice: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: tsrservice +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_tsrservice/conditional-naming-processgroup/template.json b/BMW-Dynatrace-config/CD_tsrservice/conditional-naming-processgroup/template.json new file mode 100644 index 00000000..7c039808 --- /dev/null +++ b/BMW-Dynatrace-config/CD_tsrservice/conditional-naming-processgroup/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "type": "PROCESS_GROUP" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_tsrservice/conditional-naming-service/README.md b/BMW-Dynatrace-config/CD_tsrservice/conditional-naming-service/README.md new file mode 100644 index 00000000..c34ef308 --- /dev/null +++ b/BMW-Dynatrace-config/CD_tsrservice/conditional-naming-service/README.md @@ -0,0 +1,35 @@ +### Service Naming Rules + +A typical case could be that you access to *Transaction & Services* and you find two services that are exactly the same: +*DataDownloadV1* +*DataDownloadV1* + +If you drilldown into the service and you check in the process group, you may have a PROD and a E2E for each service. + +*Note: if you see that both process group are exactly the same, please contact a Dynatrace expert to create a Process* +*Group detection rule* + +In the case the PG are PROD and E2E, then we need to create a rule that looks like this: + +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {Service:DetectedName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +- tag: Infotainment +- skipDeployment: false +``` + +The rule will get the Service Detected Name (current name) and it will extract (with a regex) the part of the kubernetes namespace after the "-", so -prod or -e2e, resulting in: +*DataDownloadV1 - prod* +*DataDownloadV1 - e2e* + +Now, services will be easy to identify. + +You can create rules based on any property/metadata. Some other placeholder's eamples: +{Service:DatabaseName} - E2E +{Service:WebServiceName} - {ProcessGroup:Kubernetes:microservice} - {ProcessGroup:Kubernetes:environment} +{Service:DetectedName} - {ProcessGroup:KubernetesContainerName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +{Service:DetectedName} - {ProcessGroup:SpringBootProfileName/[^\\-]*$} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_tsrservice/conditional-naming-service/conditional-naming-service.yaml b/BMW-Dynatrace-config/CD_tsrservice/conditional-naming-service/conditional-naming-service.yaml new file mode 100644 index 00000000..2e66c73a --- /dev/null +++ b/BMW-Dynatrace-config/CD_tsrservice/conditional-naming-service/conditional-naming-service.yaml @@ -0,0 +1,8 @@ +config: +- CDtsrservice: template.json + +CDtsrservice: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: tsrservice +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_tsrservice/conditional-naming-service/template.json b/BMW-Dynatrace-config/CD_tsrservice/conditional-naming-service/template.json new file mode 100644 index 00000000..5d4fac56 --- /dev/null +++ b/BMW-Dynatrace-config/CD_tsrservice/conditional-naming-service/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "type": "SERVICE" +} \ 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 index d41c4c77..5f35e5c1 100644 --- a/BMW-Dynatrace-config/CD_tsrservice/custom-service-java/README.md +++ b/BMW-Dynatrace-config/CD_tsrservice/custom-service-java/README.md @@ -1,30 +1,4 @@ -## 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 configure custom services? -## 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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Custom+Services) page to configure your custom services. \ 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 index 92e734fa..1695924c 100644 --- a/BMW-Dynatrace-config/CD_tsrservice/synthetic-monitor/README.md +++ b/BMW-Dynatrace-config/CD_tsrservice/synthetic-monitor/README.md @@ -1,37 +1,4 @@ -# Synthetic Configuration -To calculate the Availability KPI, a synthetic must be configured. +### How to configure synthetics? -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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Synthetic+Monitors) page to configure your synthetics. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_user-activity-service/conditional-naming-processgroup/README.md b/BMW-Dynatrace-config/CD_user-activity-service/conditional-naming-processgroup/README.md new file mode 100644 index 00000000..f94196a5 --- /dev/null +++ b/BMW-Dynatrace-config/CD_user-activity-service/conditional-naming-processgroup/README.md @@ -0,0 +1,67 @@ +### Process Group Detection Rules and Naming + +#### Detection Rule or Naming? + +For the explanation, we're using a real example of the Infotainment application: + +!(PGNaming1)[../../../../img/PGNaming1.PNG] + +Before working with your dashboards and alerting profiles, an important task to do when working with Dynatrace is checking +the structure of your applications (process groups). You can do that clicking under *technologies* and filter using your +application Management Zone. + +In the picture above, there are two Process Groups called bon-information-prod. **If you see duplicated process groups like in** +**this case, you MUST follow this guideline** + +Next step would be to open both process groups and compare the metadata. In that way, you can identify if all process instances are +part of the same application or not. An easy way to do that is asking yourself: how many instances of my application do i have? + +If you have 4 instances in total and you're able to see 2 in one PG and other 2 in other PG it means that **they are part of the ** +**same application** + +Another situation could be that checking on the metadata, then you see that are **two different application** and Dynatrace is just naming +the process group in the same way + +*Same application* +- Problem: Dynatrace is creating two different process groups, what transalates in two separated services for the same application. Instead of +seeing all the traffic in one service, you will have it splitted and it will complicate your monitoring +- Solution: create a process group detection rule. Contact Dynatrace Expert + +*Different application* +- Problem: Dynatrace is just naming in the same way applications that are different. +- Solution: This case is less severe, since it can be fixed with a process group naming rule. + + +What about our example? +!(PGNaming2)[../../../../img/PGNaming2.PNG] +!(PGNaming3)[../../../../img/PGNaming3.PNG] + +Based on the feedback of the infotaiment team, each process group is a different application (microservice) and it's visible in the kubernetes container/workload +within the metadata of each Process Group. + +#### How to create a Process Group Detection Rule +1. Open the *conditional-naming-processgroup.yaml* file and create a rule that looks like this: +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName} +- tag: Infotainment +- skipDeployment: false +``` +The result of the rule will be renaming the PG to this: +``` +bon-information-prod ipa +bon-information-prod rsl +``` + +Other possible placeholders that you can use are for example: +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName/[^\\-]*$} +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesFullPodName/buffet-(.*?)-} +{ProcessGroup:DetectedName} - {HostGroup:Name/[^\\_]*$} +{ProcessGroup:KubernetesNamespace} +{ProcessGroup:CommandLineArgs/.*?\\-f\\s\\/www\\/(.*?)\\/generated\\/httpd\\.conf.*?} + +You can combine different ones. Check the (documentation)[link] for more \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_user-activity-service/conditional-naming-processgroup/conditional-naming-processgroup.yaml b/BMW-Dynatrace-config/CD_user-activity-service/conditional-naming-processgroup/conditional-naming-processgroup.yaml new file mode 100644 index 00000000..115fcd3c --- /dev/null +++ b/BMW-Dynatrace-config/CD_user-activity-service/conditional-naming-processgroup/conditional-naming-processgroup.yaml @@ -0,0 +1,8 @@ +config: +- CDuser-activity-service: template.json + +CDuser-activity-service: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: user-activity-service +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_user-activity-service/conditional-naming-processgroup/template.json b/BMW-Dynatrace-config/CD_user-activity-service/conditional-naming-processgroup/template.json new file mode 100644 index 00000000..7c039808 --- /dev/null +++ b/BMW-Dynatrace-config/CD_user-activity-service/conditional-naming-processgroup/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "type": "PROCESS_GROUP" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_user-activity-service/conditional-naming-service/README.md b/BMW-Dynatrace-config/CD_user-activity-service/conditional-naming-service/README.md new file mode 100644 index 00000000..c34ef308 --- /dev/null +++ b/BMW-Dynatrace-config/CD_user-activity-service/conditional-naming-service/README.md @@ -0,0 +1,35 @@ +### Service Naming Rules + +A typical case could be that you access to *Transaction & Services* and you find two services that are exactly the same: +*DataDownloadV1* +*DataDownloadV1* + +If you drilldown into the service and you check in the process group, you may have a PROD and a E2E for each service. + +*Note: if you see that both process group are exactly the same, please contact a Dynatrace expert to create a Process* +*Group detection rule* + +In the case the PG are PROD and E2E, then we need to create a rule that looks like this: + +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {Service:DetectedName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +- tag: Infotainment +- skipDeployment: false +``` + +The rule will get the Service Detected Name (current name) and it will extract (with a regex) the part of the kubernetes namespace after the "-", so -prod or -e2e, resulting in: +*DataDownloadV1 - prod* +*DataDownloadV1 - e2e* + +Now, services will be easy to identify. + +You can create rules based on any property/metadata. Some other placeholder's eamples: +{Service:DatabaseName} - E2E +{Service:WebServiceName} - {ProcessGroup:Kubernetes:microservice} - {ProcessGroup:Kubernetes:environment} +{Service:DetectedName} - {ProcessGroup:KubernetesContainerName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +{Service:DetectedName} - {ProcessGroup:SpringBootProfileName/[^\\-]*$} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_user-activity-service/conditional-naming-service/conditional-naming-service.yaml b/BMW-Dynatrace-config/CD_user-activity-service/conditional-naming-service/conditional-naming-service.yaml new file mode 100644 index 00000000..115fcd3c --- /dev/null +++ b/BMW-Dynatrace-config/CD_user-activity-service/conditional-naming-service/conditional-naming-service.yaml @@ -0,0 +1,8 @@ +config: +- CDuser-activity-service: template.json + +CDuser-activity-service: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: user-activity-service +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_user-activity-service/conditional-naming-service/template.json b/BMW-Dynatrace-config/CD_user-activity-service/conditional-naming-service/template.json new file mode 100644 index 00000000..5d4fac56 --- /dev/null +++ b/BMW-Dynatrace-config/CD_user-activity-service/conditional-naming-service/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "type": "SERVICE" +} \ 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 index d41c4c77..5f35e5c1 100644 --- 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 @@ -1,30 +1,4 @@ -## 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 configure custom services? -## 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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Custom+Services) page to configure your custom services. \ 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 index 92e734fa..1695924c 100644 --- a/BMW-Dynatrace-config/CD_user-activity-service/synthetic-monitor/README.md +++ b/BMW-Dynatrace-config/CD_user-activity-service/synthetic-monitor/README.md @@ -1,37 +1,4 @@ -# Synthetic Configuration -To calculate the Availability KPI, a synthetic must be configured. +### How to configure synthetics? -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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Synthetic+Monitors) page to configure your synthetics. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_user-attributes-service/conditional-naming-processgroup/README.md b/BMW-Dynatrace-config/CD_user-attributes-service/conditional-naming-processgroup/README.md new file mode 100644 index 00000000..f94196a5 --- /dev/null +++ b/BMW-Dynatrace-config/CD_user-attributes-service/conditional-naming-processgroup/README.md @@ -0,0 +1,67 @@ +### Process Group Detection Rules and Naming + +#### Detection Rule or Naming? + +For the explanation, we're using a real example of the Infotainment application: + +!(PGNaming1)[../../../../img/PGNaming1.PNG] + +Before working with your dashboards and alerting profiles, an important task to do when working with Dynatrace is checking +the structure of your applications (process groups). You can do that clicking under *technologies* and filter using your +application Management Zone. + +In the picture above, there are two Process Groups called bon-information-prod. **If you see duplicated process groups like in** +**this case, you MUST follow this guideline** + +Next step would be to open both process groups and compare the metadata. In that way, you can identify if all process instances are +part of the same application or not. An easy way to do that is asking yourself: how many instances of my application do i have? + +If you have 4 instances in total and you're able to see 2 in one PG and other 2 in other PG it means that **they are part of the ** +**same application** + +Another situation could be that checking on the metadata, then you see that are **two different application** and Dynatrace is just naming +the process group in the same way + +*Same application* +- Problem: Dynatrace is creating two different process groups, what transalates in two separated services for the same application. Instead of +seeing all the traffic in one service, you will have it splitted and it will complicate your monitoring +- Solution: create a process group detection rule. Contact Dynatrace Expert + +*Different application* +- Problem: Dynatrace is just naming in the same way applications that are different. +- Solution: This case is less severe, since it can be fixed with a process group naming rule. + + +What about our example? +!(PGNaming2)[../../../../img/PGNaming2.PNG] +!(PGNaming3)[../../../../img/PGNaming3.PNG] + +Based on the feedback of the infotaiment team, each process group is a different application (microservice) and it's visible in the kubernetes container/workload +within the metadata of each Process Group. + +#### How to create a Process Group Detection Rule +1. Open the *conditional-naming-processgroup.yaml* file and create a rule that looks like this: +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName} +- tag: Infotainment +- skipDeployment: false +``` +The result of the rule will be renaming the PG to this: +``` +bon-information-prod ipa +bon-information-prod rsl +``` + +Other possible placeholders that you can use are for example: +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName/[^\\-]*$} +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesFullPodName/buffet-(.*?)-} +{ProcessGroup:DetectedName} - {HostGroup:Name/[^\\_]*$} +{ProcessGroup:KubernetesNamespace} +{ProcessGroup:CommandLineArgs/.*?\\-f\\s\\/www\\/(.*?)\\/generated\\/httpd\\.conf.*?} + +You can combine different ones. Check the (documentation)[link] for more \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_user-attributes-service/conditional-naming-processgroup/conditional-naming-processgroup.yaml b/BMW-Dynatrace-config/CD_user-attributes-service/conditional-naming-processgroup/conditional-naming-processgroup.yaml new file mode 100644 index 00000000..f61910ee --- /dev/null +++ b/BMW-Dynatrace-config/CD_user-attributes-service/conditional-naming-processgroup/conditional-naming-processgroup.yaml @@ -0,0 +1,8 @@ +config: +- CDuser-attributes-service: template.json + +CDuser-attributes-service: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: user-attributes-service +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_user-attributes-service/conditional-naming-processgroup/template.json b/BMW-Dynatrace-config/CD_user-attributes-service/conditional-naming-processgroup/template.json new file mode 100644 index 00000000..7c039808 --- /dev/null +++ b/BMW-Dynatrace-config/CD_user-attributes-service/conditional-naming-processgroup/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "type": "PROCESS_GROUP" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_user-attributes-service/conditional-naming-service/README.md b/BMW-Dynatrace-config/CD_user-attributes-service/conditional-naming-service/README.md new file mode 100644 index 00000000..c34ef308 --- /dev/null +++ b/BMW-Dynatrace-config/CD_user-attributes-service/conditional-naming-service/README.md @@ -0,0 +1,35 @@ +### Service Naming Rules + +A typical case could be that you access to *Transaction & Services* and you find two services that are exactly the same: +*DataDownloadV1* +*DataDownloadV1* + +If you drilldown into the service and you check in the process group, you may have a PROD and a E2E for each service. + +*Note: if you see that both process group are exactly the same, please contact a Dynatrace expert to create a Process* +*Group detection rule* + +In the case the PG are PROD and E2E, then we need to create a rule that looks like this: + +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {Service:DetectedName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +- tag: Infotainment +- skipDeployment: false +``` + +The rule will get the Service Detected Name (current name) and it will extract (with a regex) the part of the kubernetes namespace after the "-", so -prod or -e2e, resulting in: +*DataDownloadV1 - prod* +*DataDownloadV1 - e2e* + +Now, services will be easy to identify. + +You can create rules based on any property/metadata. Some other placeholder's eamples: +{Service:DatabaseName} - E2E +{Service:WebServiceName} - {ProcessGroup:Kubernetes:microservice} - {ProcessGroup:Kubernetes:environment} +{Service:DetectedName} - {ProcessGroup:KubernetesContainerName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +{Service:DetectedName} - {ProcessGroup:SpringBootProfileName/[^\\-]*$} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_user-attributes-service/conditional-naming-service/conditional-naming-service.yaml b/BMW-Dynatrace-config/CD_user-attributes-service/conditional-naming-service/conditional-naming-service.yaml new file mode 100644 index 00000000..f61910ee --- /dev/null +++ b/BMW-Dynatrace-config/CD_user-attributes-service/conditional-naming-service/conditional-naming-service.yaml @@ -0,0 +1,8 @@ +config: +- CDuser-attributes-service: template.json + +CDuser-attributes-service: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: user-attributes-service +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_user-attributes-service/conditional-naming-service/template.json b/BMW-Dynatrace-config/CD_user-attributes-service/conditional-naming-service/template.json new file mode 100644 index 00000000..5d4fac56 --- /dev/null +++ b/BMW-Dynatrace-config/CD_user-attributes-service/conditional-naming-service/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "type": "SERVICE" +} \ 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 index d41c4c77..5f35e5c1 100644 --- 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 @@ -1,30 +1,4 @@ -## 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 configure custom services? -## 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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Custom+Services) page to configure your custom services. \ 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 index 92e734fa..1695924c 100644 --- a/BMW-Dynatrace-config/CD_user-attributes-service/synthetic-monitor/README.md +++ b/BMW-Dynatrace-config/CD_user-attributes-service/synthetic-monitor/README.md @@ -1,37 +1,4 @@ -# Synthetic Configuration -To calculate the Availability KPI, a synthetic must be configured. +### How to configure synthetics? -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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Synthetic+Monitors) page to configure your synthetics. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_user-composite-service/conditional-naming-processgroup/README.md b/BMW-Dynatrace-config/CD_user-composite-service/conditional-naming-processgroup/README.md new file mode 100644 index 00000000..f94196a5 --- /dev/null +++ b/BMW-Dynatrace-config/CD_user-composite-service/conditional-naming-processgroup/README.md @@ -0,0 +1,67 @@ +### Process Group Detection Rules and Naming + +#### Detection Rule or Naming? + +For the explanation, we're using a real example of the Infotainment application: + +!(PGNaming1)[../../../../img/PGNaming1.PNG] + +Before working with your dashboards and alerting profiles, an important task to do when working with Dynatrace is checking +the structure of your applications (process groups). You can do that clicking under *technologies* and filter using your +application Management Zone. + +In the picture above, there are two Process Groups called bon-information-prod. **If you see duplicated process groups like in** +**this case, you MUST follow this guideline** + +Next step would be to open both process groups and compare the metadata. In that way, you can identify if all process instances are +part of the same application or not. An easy way to do that is asking yourself: how many instances of my application do i have? + +If you have 4 instances in total and you're able to see 2 in one PG and other 2 in other PG it means that **they are part of the ** +**same application** + +Another situation could be that checking on the metadata, then you see that are **two different application** and Dynatrace is just naming +the process group in the same way + +*Same application* +- Problem: Dynatrace is creating two different process groups, what transalates in two separated services for the same application. Instead of +seeing all the traffic in one service, you will have it splitted and it will complicate your monitoring +- Solution: create a process group detection rule. Contact Dynatrace Expert + +*Different application* +- Problem: Dynatrace is just naming in the same way applications that are different. +- Solution: This case is less severe, since it can be fixed with a process group naming rule. + + +What about our example? +!(PGNaming2)[../../../../img/PGNaming2.PNG] +!(PGNaming3)[../../../../img/PGNaming3.PNG] + +Based on the feedback of the infotaiment team, each process group is a different application (microservice) and it's visible in the kubernetes container/workload +within the metadata of each Process Group. + +#### How to create a Process Group Detection Rule +1. Open the *conditional-naming-processgroup.yaml* file and create a rule that looks like this: +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName} +- tag: Infotainment +- skipDeployment: false +``` +The result of the rule will be renaming the PG to this: +``` +bon-information-prod ipa +bon-information-prod rsl +``` + +Other possible placeholders that you can use are for example: +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName/[^\\-]*$} +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesFullPodName/buffet-(.*?)-} +{ProcessGroup:DetectedName} - {HostGroup:Name/[^\\_]*$} +{ProcessGroup:KubernetesNamespace} +{ProcessGroup:CommandLineArgs/.*?\\-f\\s\\/www\\/(.*?)\\/generated\\/httpd\\.conf.*?} + +You can combine different ones. Check the (documentation)[link] for more \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_user-composite-service/conditional-naming-processgroup/conditional-naming-processgroup.yaml b/BMW-Dynatrace-config/CD_user-composite-service/conditional-naming-processgroup/conditional-naming-processgroup.yaml new file mode 100644 index 00000000..b67256ff --- /dev/null +++ b/BMW-Dynatrace-config/CD_user-composite-service/conditional-naming-processgroup/conditional-naming-processgroup.yaml @@ -0,0 +1,8 @@ +config: +- CDuser-composite-service: template.json + +CDuser-composite-service: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: user-composite-service +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_user-composite-service/conditional-naming-processgroup/template.json b/BMW-Dynatrace-config/CD_user-composite-service/conditional-naming-processgroup/template.json new file mode 100644 index 00000000..7c039808 --- /dev/null +++ b/BMW-Dynatrace-config/CD_user-composite-service/conditional-naming-processgroup/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "type": "PROCESS_GROUP" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_user-composite-service/conditional-naming-service/README.md b/BMW-Dynatrace-config/CD_user-composite-service/conditional-naming-service/README.md new file mode 100644 index 00000000..c34ef308 --- /dev/null +++ b/BMW-Dynatrace-config/CD_user-composite-service/conditional-naming-service/README.md @@ -0,0 +1,35 @@ +### Service Naming Rules + +A typical case could be that you access to *Transaction & Services* and you find two services that are exactly the same: +*DataDownloadV1* +*DataDownloadV1* + +If you drilldown into the service and you check in the process group, you may have a PROD and a E2E for each service. + +*Note: if you see that both process group are exactly the same, please contact a Dynatrace expert to create a Process* +*Group detection rule* + +In the case the PG are PROD and E2E, then we need to create a rule that looks like this: + +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {Service:DetectedName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +- tag: Infotainment +- skipDeployment: false +``` + +The rule will get the Service Detected Name (current name) and it will extract (with a regex) the part of the kubernetes namespace after the "-", so -prod or -e2e, resulting in: +*DataDownloadV1 - prod* +*DataDownloadV1 - e2e* + +Now, services will be easy to identify. + +You can create rules based on any property/metadata. Some other placeholder's eamples: +{Service:DatabaseName} - E2E +{Service:WebServiceName} - {ProcessGroup:Kubernetes:microservice} - {ProcessGroup:Kubernetes:environment} +{Service:DetectedName} - {ProcessGroup:KubernetesContainerName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +{Service:DetectedName} - {ProcessGroup:SpringBootProfileName/[^\\-]*$} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_user-composite-service/conditional-naming-service/conditional-naming-service.yaml b/BMW-Dynatrace-config/CD_user-composite-service/conditional-naming-service/conditional-naming-service.yaml new file mode 100644 index 00000000..b67256ff --- /dev/null +++ b/BMW-Dynatrace-config/CD_user-composite-service/conditional-naming-service/conditional-naming-service.yaml @@ -0,0 +1,8 @@ +config: +- CDuser-composite-service: template.json + +CDuser-composite-service: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: user-composite-service +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_user-composite-service/conditional-naming-service/template.json b/BMW-Dynatrace-config/CD_user-composite-service/conditional-naming-service/template.json new file mode 100644 index 00000000..5d4fac56 --- /dev/null +++ b/BMW-Dynatrace-config/CD_user-composite-service/conditional-naming-service/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "type": "SERVICE" +} \ 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 index d41c4c77..5f35e5c1 100644 --- 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 @@ -1,30 +1,4 @@ -## 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 configure custom services? -## 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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Custom+Services) page to configure your custom services. \ 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 index 92e734fa..1695924c 100644 --- a/BMW-Dynatrace-config/CD_user-composite-service/synthetic-monitor/README.md +++ b/BMW-Dynatrace-config/CD_user-composite-service/synthetic-monitor/README.md @@ -1,37 +1,4 @@ -# Synthetic Configuration -To calculate the Availability KPI, a synthetic must be configured. +### How to configure synthetics? -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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Synthetic+Monitors) page to configure your synthetics. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_user-delete-service/conditional-naming-processgroup/README.md b/BMW-Dynatrace-config/CD_user-delete-service/conditional-naming-processgroup/README.md new file mode 100644 index 00000000..f94196a5 --- /dev/null +++ b/BMW-Dynatrace-config/CD_user-delete-service/conditional-naming-processgroup/README.md @@ -0,0 +1,67 @@ +### Process Group Detection Rules and Naming + +#### Detection Rule or Naming? + +For the explanation, we're using a real example of the Infotainment application: + +!(PGNaming1)[../../../../img/PGNaming1.PNG] + +Before working with your dashboards and alerting profiles, an important task to do when working with Dynatrace is checking +the structure of your applications (process groups). You can do that clicking under *technologies* and filter using your +application Management Zone. + +In the picture above, there are two Process Groups called bon-information-prod. **If you see duplicated process groups like in** +**this case, you MUST follow this guideline** + +Next step would be to open both process groups and compare the metadata. In that way, you can identify if all process instances are +part of the same application or not. An easy way to do that is asking yourself: how many instances of my application do i have? + +If you have 4 instances in total and you're able to see 2 in one PG and other 2 in other PG it means that **they are part of the ** +**same application** + +Another situation could be that checking on the metadata, then you see that are **two different application** and Dynatrace is just naming +the process group in the same way + +*Same application* +- Problem: Dynatrace is creating two different process groups, what transalates in two separated services for the same application. Instead of +seeing all the traffic in one service, you will have it splitted and it will complicate your monitoring +- Solution: create a process group detection rule. Contact Dynatrace Expert + +*Different application* +- Problem: Dynatrace is just naming in the same way applications that are different. +- Solution: This case is less severe, since it can be fixed with a process group naming rule. + + +What about our example? +!(PGNaming2)[../../../../img/PGNaming2.PNG] +!(PGNaming3)[../../../../img/PGNaming3.PNG] + +Based on the feedback of the infotaiment team, each process group is a different application (microservice) and it's visible in the kubernetes container/workload +within the metadata of each Process Group. + +#### How to create a Process Group Detection Rule +1. Open the *conditional-naming-processgroup.yaml* file and create a rule that looks like this: +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName} +- tag: Infotainment +- skipDeployment: false +``` +The result of the rule will be renaming the PG to this: +``` +bon-information-prod ipa +bon-information-prod rsl +``` + +Other possible placeholders that you can use are for example: +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName/[^\\-]*$} +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesFullPodName/buffet-(.*?)-} +{ProcessGroup:DetectedName} - {HostGroup:Name/[^\\_]*$} +{ProcessGroup:KubernetesNamespace} +{ProcessGroup:CommandLineArgs/.*?\\-f\\s\\/www\\/(.*?)\\/generated\\/httpd\\.conf.*?} + +You can combine different ones. Check the (documentation)[link] for more \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_user-delete-service/conditional-naming-processgroup/conditional-naming-processgroup.yaml b/BMW-Dynatrace-config/CD_user-delete-service/conditional-naming-processgroup/conditional-naming-processgroup.yaml new file mode 100644 index 00000000..437b137b --- /dev/null +++ b/BMW-Dynatrace-config/CD_user-delete-service/conditional-naming-processgroup/conditional-naming-processgroup.yaml @@ -0,0 +1,8 @@ +config: +- CDuser-delete-service: template.json + +CDuser-delete-service: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: user-delete-service +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_user-delete-service/conditional-naming-processgroup/template.json b/BMW-Dynatrace-config/CD_user-delete-service/conditional-naming-processgroup/template.json new file mode 100644 index 00000000..7c039808 --- /dev/null +++ b/BMW-Dynatrace-config/CD_user-delete-service/conditional-naming-processgroup/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "type": "PROCESS_GROUP" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_user-delete-service/conditional-naming-service/README.md b/BMW-Dynatrace-config/CD_user-delete-service/conditional-naming-service/README.md new file mode 100644 index 00000000..c34ef308 --- /dev/null +++ b/BMW-Dynatrace-config/CD_user-delete-service/conditional-naming-service/README.md @@ -0,0 +1,35 @@ +### Service Naming Rules + +A typical case could be that you access to *Transaction & Services* and you find two services that are exactly the same: +*DataDownloadV1* +*DataDownloadV1* + +If you drilldown into the service and you check in the process group, you may have a PROD and a E2E for each service. + +*Note: if you see that both process group are exactly the same, please contact a Dynatrace expert to create a Process* +*Group detection rule* + +In the case the PG are PROD and E2E, then we need to create a rule that looks like this: + +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {Service:DetectedName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +- tag: Infotainment +- skipDeployment: false +``` + +The rule will get the Service Detected Name (current name) and it will extract (with a regex) the part of the kubernetes namespace after the "-", so -prod or -e2e, resulting in: +*DataDownloadV1 - prod* +*DataDownloadV1 - e2e* + +Now, services will be easy to identify. + +You can create rules based on any property/metadata. Some other placeholder's eamples: +{Service:DatabaseName} - E2E +{Service:WebServiceName} - {ProcessGroup:Kubernetes:microservice} - {ProcessGroup:Kubernetes:environment} +{Service:DetectedName} - {ProcessGroup:KubernetesContainerName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +{Service:DetectedName} - {ProcessGroup:SpringBootProfileName/[^\\-]*$} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_user-delete-service/conditional-naming-service/conditional-naming-service.yaml b/BMW-Dynatrace-config/CD_user-delete-service/conditional-naming-service/conditional-naming-service.yaml new file mode 100644 index 00000000..437b137b --- /dev/null +++ b/BMW-Dynatrace-config/CD_user-delete-service/conditional-naming-service/conditional-naming-service.yaml @@ -0,0 +1,8 @@ +config: +- CDuser-delete-service: template.json + +CDuser-delete-service: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: user-delete-service +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_user-delete-service/conditional-naming-service/template.json b/BMW-Dynatrace-config/CD_user-delete-service/conditional-naming-service/template.json new file mode 100644 index 00000000..5d4fac56 --- /dev/null +++ b/BMW-Dynatrace-config/CD_user-delete-service/conditional-naming-service/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "type": "SERVICE" +} \ 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 index d41c4c77..5f35e5c1 100644 --- 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 @@ -1,30 +1,4 @@ -## 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 configure custom services? -## 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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Custom+Services) page to configure your custom services. \ 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 index 92e734fa..1695924c 100644 --- a/BMW-Dynatrace-config/CD_user-delete-service/synthetic-monitor/README.md +++ b/BMW-Dynatrace-config/CD_user-delete-service/synthetic-monitor/README.md @@ -1,37 +1,4 @@ -# Synthetic Configuration -To calculate the Availability KPI, a synthetic must be configured. +### How to configure synthetics? -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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Synthetic+Monitors) page to configure your synthetics. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_user-position-service/conditional-naming-processgroup/README.md b/BMW-Dynatrace-config/CD_user-position-service/conditional-naming-processgroup/README.md new file mode 100644 index 00000000..f94196a5 --- /dev/null +++ b/BMW-Dynatrace-config/CD_user-position-service/conditional-naming-processgroup/README.md @@ -0,0 +1,67 @@ +### Process Group Detection Rules and Naming + +#### Detection Rule or Naming? + +For the explanation, we're using a real example of the Infotainment application: + +!(PGNaming1)[../../../../img/PGNaming1.PNG] + +Before working with your dashboards and alerting profiles, an important task to do when working with Dynatrace is checking +the structure of your applications (process groups). You can do that clicking under *technologies* and filter using your +application Management Zone. + +In the picture above, there are two Process Groups called bon-information-prod. **If you see duplicated process groups like in** +**this case, you MUST follow this guideline** + +Next step would be to open both process groups and compare the metadata. In that way, you can identify if all process instances are +part of the same application or not. An easy way to do that is asking yourself: how many instances of my application do i have? + +If you have 4 instances in total and you're able to see 2 in one PG and other 2 in other PG it means that **they are part of the ** +**same application** + +Another situation could be that checking on the metadata, then you see that are **two different application** and Dynatrace is just naming +the process group in the same way + +*Same application* +- Problem: Dynatrace is creating two different process groups, what transalates in two separated services for the same application. Instead of +seeing all the traffic in one service, you will have it splitted and it will complicate your monitoring +- Solution: create a process group detection rule. Contact Dynatrace Expert + +*Different application* +- Problem: Dynatrace is just naming in the same way applications that are different. +- Solution: This case is less severe, since it can be fixed with a process group naming rule. + + +What about our example? +!(PGNaming2)[../../../../img/PGNaming2.PNG] +!(PGNaming3)[../../../../img/PGNaming3.PNG] + +Based on the feedback of the infotaiment team, each process group is a different application (microservice) and it's visible in the kubernetes container/workload +within the metadata of each Process Group. + +#### How to create a Process Group Detection Rule +1. Open the *conditional-naming-processgroup.yaml* file and create a rule that looks like this: +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName} +- tag: Infotainment +- skipDeployment: false +``` +The result of the rule will be renaming the PG to this: +``` +bon-information-prod ipa +bon-information-prod rsl +``` + +Other possible placeholders that you can use are for example: +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName/[^\\-]*$} +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesFullPodName/buffet-(.*?)-} +{ProcessGroup:DetectedName} - {HostGroup:Name/[^\\_]*$} +{ProcessGroup:KubernetesNamespace} +{ProcessGroup:CommandLineArgs/.*?\\-f\\s\\/www\\/(.*?)\\/generated\\/httpd\\.conf.*?} + +You can combine different ones. Check the (documentation)[link] for more \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_user-position-service/conditional-naming-processgroup/conditional-naming-processgroup.yaml b/BMW-Dynatrace-config/CD_user-position-service/conditional-naming-processgroup/conditional-naming-processgroup.yaml new file mode 100644 index 00000000..8726f56a --- /dev/null +++ b/BMW-Dynatrace-config/CD_user-position-service/conditional-naming-processgroup/conditional-naming-processgroup.yaml @@ -0,0 +1,8 @@ +config: +- CDuser-position-service: template.json + +CDuser-position-service: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: user-position-service +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_user-position-service/conditional-naming-processgroup/template.json b/BMW-Dynatrace-config/CD_user-position-service/conditional-naming-processgroup/template.json new file mode 100644 index 00000000..7c039808 --- /dev/null +++ b/BMW-Dynatrace-config/CD_user-position-service/conditional-naming-processgroup/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "type": "PROCESS_GROUP" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_user-position-service/conditional-naming-service/README.md b/BMW-Dynatrace-config/CD_user-position-service/conditional-naming-service/README.md new file mode 100644 index 00000000..c34ef308 --- /dev/null +++ b/BMW-Dynatrace-config/CD_user-position-service/conditional-naming-service/README.md @@ -0,0 +1,35 @@ +### Service Naming Rules + +A typical case could be that you access to *Transaction & Services* and you find two services that are exactly the same: +*DataDownloadV1* +*DataDownloadV1* + +If you drilldown into the service and you check in the process group, you may have a PROD and a E2E for each service. + +*Note: if you see that both process group are exactly the same, please contact a Dynatrace expert to create a Process* +*Group detection rule* + +In the case the PG are PROD and E2E, then we need to create a rule that looks like this: + +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {Service:DetectedName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +- tag: Infotainment +- skipDeployment: false +``` + +The rule will get the Service Detected Name (current name) and it will extract (with a regex) the part of the kubernetes namespace after the "-", so -prod or -e2e, resulting in: +*DataDownloadV1 - prod* +*DataDownloadV1 - e2e* + +Now, services will be easy to identify. + +You can create rules based on any property/metadata. Some other placeholder's eamples: +{Service:DatabaseName} - E2E +{Service:WebServiceName} - {ProcessGroup:Kubernetes:microservice} - {ProcessGroup:Kubernetes:environment} +{Service:DetectedName} - {ProcessGroup:KubernetesContainerName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +{Service:DetectedName} - {ProcessGroup:SpringBootProfileName/[^\\-]*$} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_user-position-service/conditional-naming-service/conditional-naming-service.yaml b/BMW-Dynatrace-config/CD_user-position-service/conditional-naming-service/conditional-naming-service.yaml new file mode 100644 index 00000000..8726f56a --- /dev/null +++ b/BMW-Dynatrace-config/CD_user-position-service/conditional-naming-service/conditional-naming-service.yaml @@ -0,0 +1,8 @@ +config: +- CDuser-position-service: template.json + +CDuser-position-service: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: user-position-service +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_user-position-service/conditional-naming-service/template.json b/BMW-Dynatrace-config/CD_user-position-service/conditional-naming-service/template.json new file mode 100644 index 00000000..5d4fac56 --- /dev/null +++ b/BMW-Dynatrace-config/CD_user-position-service/conditional-naming-service/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "type": "SERVICE" +} \ 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 index d41c4c77..5f35e5c1 100644 --- 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 @@ -1,30 +1,4 @@ -## 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 configure custom services? -## 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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Custom+Services) page to configure your custom services. \ 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 index 92e734fa..1695924c 100644 --- a/BMW-Dynatrace-config/CD_user-position-service/synthetic-monitor/README.md +++ b/BMW-Dynatrace-config/CD_user-position-service/synthetic-monitor/README.md @@ -1,37 +1,4 @@ -# Synthetic Configuration -To calculate the Availability KPI, a synthetic must be configured. +### How to configure synthetics? -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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Synthetic+Monitors) page to configure your synthetics. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_user-profile-service/conditional-naming-processgroup/README.md b/BMW-Dynatrace-config/CD_user-profile-service/conditional-naming-processgroup/README.md new file mode 100644 index 00000000..f94196a5 --- /dev/null +++ b/BMW-Dynatrace-config/CD_user-profile-service/conditional-naming-processgroup/README.md @@ -0,0 +1,67 @@ +### Process Group Detection Rules and Naming + +#### Detection Rule or Naming? + +For the explanation, we're using a real example of the Infotainment application: + +!(PGNaming1)[../../../../img/PGNaming1.PNG] + +Before working with your dashboards and alerting profiles, an important task to do when working with Dynatrace is checking +the structure of your applications (process groups). You can do that clicking under *technologies* and filter using your +application Management Zone. + +In the picture above, there are two Process Groups called bon-information-prod. **If you see duplicated process groups like in** +**this case, you MUST follow this guideline** + +Next step would be to open both process groups and compare the metadata. In that way, you can identify if all process instances are +part of the same application or not. An easy way to do that is asking yourself: how many instances of my application do i have? + +If you have 4 instances in total and you're able to see 2 in one PG and other 2 in other PG it means that **they are part of the ** +**same application** + +Another situation could be that checking on the metadata, then you see that are **two different application** and Dynatrace is just naming +the process group in the same way + +*Same application* +- Problem: Dynatrace is creating two different process groups, what transalates in two separated services for the same application. Instead of +seeing all the traffic in one service, you will have it splitted and it will complicate your monitoring +- Solution: create a process group detection rule. Contact Dynatrace Expert + +*Different application* +- Problem: Dynatrace is just naming in the same way applications that are different. +- Solution: This case is less severe, since it can be fixed with a process group naming rule. + + +What about our example? +!(PGNaming2)[../../../../img/PGNaming2.PNG] +!(PGNaming3)[../../../../img/PGNaming3.PNG] + +Based on the feedback of the infotaiment team, each process group is a different application (microservice) and it's visible in the kubernetes container/workload +within the metadata of each Process Group. + +#### How to create a Process Group Detection Rule +1. Open the *conditional-naming-processgroup.yaml* file and create a rule that looks like this: +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName} +- tag: Infotainment +- skipDeployment: false +``` +The result of the rule will be renaming the PG to this: +``` +bon-information-prod ipa +bon-information-prod rsl +``` + +Other possible placeholders that you can use are for example: +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName/[^\\-]*$} +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesFullPodName/buffet-(.*?)-} +{ProcessGroup:DetectedName} - {HostGroup:Name/[^\\_]*$} +{ProcessGroup:KubernetesNamespace} +{ProcessGroup:CommandLineArgs/.*?\\-f\\s\\/www\\/(.*?)\\/generated\\/httpd\\.conf.*?} + +You can combine different ones. Check the (documentation)[link] for more \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_user-profile-service/conditional-naming-processgroup/conditional-naming-processgroup.yaml b/BMW-Dynatrace-config/CD_user-profile-service/conditional-naming-processgroup/conditional-naming-processgroup.yaml new file mode 100644 index 00000000..f3f43338 --- /dev/null +++ b/BMW-Dynatrace-config/CD_user-profile-service/conditional-naming-processgroup/conditional-naming-processgroup.yaml @@ -0,0 +1,8 @@ +config: +- CDuser-profile-service: template.json + +CDuser-profile-service: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: user-profile-service +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_user-profile-service/conditional-naming-processgroup/template.json b/BMW-Dynatrace-config/CD_user-profile-service/conditional-naming-processgroup/template.json new file mode 100644 index 00000000..7c039808 --- /dev/null +++ b/BMW-Dynatrace-config/CD_user-profile-service/conditional-naming-processgroup/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "type": "PROCESS_GROUP" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_user-profile-service/conditional-naming-service/README.md b/BMW-Dynatrace-config/CD_user-profile-service/conditional-naming-service/README.md new file mode 100644 index 00000000..c34ef308 --- /dev/null +++ b/BMW-Dynatrace-config/CD_user-profile-service/conditional-naming-service/README.md @@ -0,0 +1,35 @@ +### Service Naming Rules + +A typical case could be that you access to *Transaction & Services* and you find two services that are exactly the same: +*DataDownloadV1* +*DataDownloadV1* + +If you drilldown into the service and you check in the process group, you may have a PROD and a E2E for each service. + +*Note: if you see that both process group are exactly the same, please contact a Dynatrace expert to create a Process* +*Group detection rule* + +In the case the PG are PROD and E2E, then we need to create a rule that looks like this: + +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {Service:DetectedName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +- tag: Infotainment +- skipDeployment: false +``` + +The rule will get the Service Detected Name (current name) and it will extract (with a regex) the part of the kubernetes namespace after the "-", so -prod or -e2e, resulting in: +*DataDownloadV1 - prod* +*DataDownloadV1 - e2e* + +Now, services will be easy to identify. + +You can create rules based on any property/metadata. Some other placeholder's eamples: +{Service:DatabaseName} - E2E +{Service:WebServiceName} - {ProcessGroup:Kubernetes:microservice} - {ProcessGroup:Kubernetes:environment} +{Service:DetectedName} - {ProcessGroup:KubernetesContainerName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +{Service:DetectedName} - {ProcessGroup:SpringBootProfileName/[^\\-]*$} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_user-profile-service/conditional-naming-service/conditional-naming-service.yaml b/BMW-Dynatrace-config/CD_user-profile-service/conditional-naming-service/conditional-naming-service.yaml new file mode 100644 index 00000000..f3f43338 --- /dev/null +++ b/BMW-Dynatrace-config/CD_user-profile-service/conditional-naming-service/conditional-naming-service.yaml @@ -0,0 +1,8 @@ +config: +- CDuser-profile-service: template.json + +CDuser-profile-service: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: user-profile-service +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_user-profile-service/conditional-naming-service/template.json b/BMW-Dynatrace-config/CD_user-profile-service/conditional-naming-service/template.json new file mode 100644 index 00000000..5d4fac56 --- /dev/null +++ b/BMW-Dynatrace-config/CD_user-profile-service/conditional-naming-service/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "type": "SERVICE" +} \ 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 index d41c4c77..5f35e5c1 100644 --- 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 @@ -1,30 +1,4 @@ -## 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 configure custom services? -## 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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Custom+Services) page to configure your custom services. \ 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 index 92e734fa..1695924c 100644 --- a/BMW-Dynatrace-config/CD_user-profile-service/synthetic-monitor/README.md +++ b/BMW-Dynatrace-config/CD_user-profile-service/synthetic-monitor/README.md @@ -1,37 +1,4 @@ -# Synthetic Configuration -To calculate the Availability KPI, a synthetic must be configured. +### How to configure synthetics? -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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Synthetic+Monitors) page to configure your synthetics. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_usid-filter-service/conditional-naming-processgroup/README.md b/BMW-Dynatrace-config/CD_usid-filter-service/conditional-naming-processgroup/README.md new file mode 100644 index 00000000..f94196a5 --- /dev/null +++ b/BMW-Dynatrace-config/CD_usid-filter-service/conditional-naming-processgroup/README.md @@ -0,0 +1,67 @@ +### Process Group Detection Rules and Naming + +#### Detection Rule or Naming? + +For the explanation, we're using a real example of the Infotainment application: + +!(PGNaming1)[../../../../img/PGNaming1.PNG] + +Before working with your dashboards and alerting profiles, an important task to do when working with Dynatrace is checking +the structure of your applications (process groups). You can do that clicking under *technologies* and filter using your +application Management Zone. + +In the picture above, there are two Process Groups called bon-information-prod. **If you see duplicated process groups like in** +**this case, you MUST follow this guideline** + +Next step would be to open both process groups and compare the metadata. In that way, you can identify if all process instances are +part of the same application or not. An easy way to do that is asking yourself: how many instances of my application do i have? + +If you have 4 instances in total and you're able to see 2 in one PG and other 2 in other PG it means that **they are part of the ** +**same application** + +Another situation could be that checking on the metadata, then you see that are **two different application** and Dynatrace is just naming +the process group in the same way + +*Same application* +- Problem: Dynatrace is creating two different process groups, what transalates in two separated services for the same application. Instead of +seeing all the traffic in one service, you will have it splitted and it will complicate your monitoring +- Solution: create a process group detection rule. Contact Dynatrace Expert + +*Different application* +- Problem: Dynatrace is just naming in the same way applications that are different. +- Solution: This case is less severe, since it can be fixed with a process group naming rule. + + +What about our example? +!(PGNaming2)[../../../../img/PGNaming2.PNG] +!(PGNaming3)[../../../../img/PGNaming3.PNG] + +Based on the feedback of the infotaiment team, each process group is a different application (microservice) and it's visible in the kubernetes container/workload +within the metadata of each Process Group. + +#### How to create a Process Group Detection Rule +1. Open the *conditional-naming-processgroup.yaml* file and create a rule that looks like this: +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName} +- tag: Infotainment +- skipDeployment: false +``` +The result of the rule will be renaming the PG to this: +``` +bon-information-prod ipa +bon-information-prod rsl +``` + +Other possible placeholders that you can use are for example: +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName/[^\\-]*$} +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesFullPodName/buffet-(.*?)-} +{ProcessGroup:DetectedName} - {HostGroup:Name/[^\\_]*$} +{ProcessGroup:KubernetesNamespace} +{ProcessGroup:CommandLineArgs/.*?\\-f\\s\\/www\\/(.*?)\\/generated\\/httpd\\.conf.*?} + +You can combine different ones. Check the (documentation)[link] for more \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_usid-filter-service/conditional-naming-processgroup/conditional-naming-processgroup.yaml b/BMW-Dynatrace-config/CD_usid-filter-service/conditional-naming-processgroup/conditional-naming-processgroup.yaml new file mode 100644 index 00000000..d719e65f --- /dev/null +++ b/BMW-Dynatrace-config/CD_usid-filter-service/conditional-naming-processgroup/conditional-naming-processgroup.yaml @@ -0,0 +1,8 @@ +config: +- CDusid-filter-service: template.json + +CDusid-filter-service: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: usid-filter-service +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_usid-filter-service/conditional-naming-processgroup/template.json b/BMW-Dynatrace-config/CD_usid-filter-service/conditional-naming-processgroup/template.json new file mode 100644 index 00000000..7c039808 --- /dev/null +++ b/BMW-Dynatrace-config/CD_usid-filter-service/conditional-naming-processgroup/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "type": "PROCESS_GROUP" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_usid-filter-service/conditional-naming-service/README.md b/BMW-Dynatrace-config/CD_usid-filter-service/conditional-naming-service/README.md new file mode 100644 index 00000000..c34ef308 --- /dev/null +++ b/BMW-Dynatrace-config/CD_usid-filter-service/conditional-naming-service/README.md @@ -0,0 +1,35 @@ +### Service Naming Rules + +A typical case could be that you access to *Transaction & Services* and you find two services that are exactly the same: +*DataDownloadV1* +*DataDownloadV1* + +If you drilldown into the service and you check in the process group, you may have a PROD and a E2E for each service. + +*Note: if you see that both process group are exactly the same, please contact a Dynatrace expert to create a Process* +*Group detection rule* + +In the case the PG are PROD and E2E, then we need to create a rule that looks like this: + +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {Service:DetectedName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +- tag: Infotainment +- skipDeployment: false +``` + +The rule will get the Service Detected Name (current name) and it will extract (with a regex) the part of the kubernetes namespace after the "-", so -prod or -e2e, resulting in: +*DataDownloadV1 - prod* +*DataDownloadV1 - e2e* + +Now, services will be easy to identify. + +You can create rules based on any property/metadata. Some other placeholder's eamples: +{Service:DatabaseName} - E2E +{Service:WebServiceName} - {ProcessGroup:Kubernetes:microservice} - {ProcessGroup:Kubernetes:environment} +{Service:DetectedName} - {ProcessGroup:KubernetesContainerName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +{Service:DetectedName} - {ProcessGroup:SpringBootProfileName/[^\\-]*$} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_usid-filter-service/conditional-naming-service/conditional-naming-service.yaml b/BMW-Dynatrace-config/CD_usid-filter-service/conditional-naming-service/conditional-naming-service.yaml new file mode 100644 index 00000000..d719e65f --- /dev/null +++ b/BMW-Dynatrace-config/CD_usid-filter-service/conditional-naming-service/conditional-naming-service.yaml @@ -0,0 +1,8 @@ +config: +- CDusid-filter-service: template.json + +CDusid-filter-service: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: usid-filter-service +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_usid-filter-service/conditional-naming-service/template.json b/BMW-Dynatrace-config/CD_usid-filter-service/conditional-naming-service/template.json new file mode 100644 index 00000000..5d4fac56 --- /dev/null +++ b/BMW-Dynatrace-config/CD_usid-filter-service/conditional-naming-service/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "type": "SERVICE" +} \ 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 index d41c4c77..5f35e5c1 100644 --- 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 @@ -1,30 +1,4 @@ -## 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 configure custom services? -## 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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Custom+Services) page to configure your custom services. \ 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 index 92e734fa..1695924c 100644 --- a/BMW-Dynatrace-config/CD_usid-filter-service/synthetic-monitor/README.md +++ b/BMW-Dynatrace-config/CD_usid-filter-service/synthetic-monitor/README.md @@ -1,37 +1,4 @@ -# Synthetic Configuration -To calculate the Availability KPI, a synthetic must be configured. +### How to configure synthetics? -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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Synthetic+Monitors) page to configure your synthetics. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vehicle-composite-service/conditional-naming-processgroup/README.md b/BMW-Dynatrace-config/CD_vehicle-composite-service/conditional-naming-processgroup/README.md new file mode 100644 index 00000000..f94196a5 --- /dev/null +++ b/BMW-Dynatrace-config/CD_vehicle-composite-service/conditional-naming-processgroup/README.md @@ -0,0 +1,67 @@ +### Process Group Detection Rules and Naming + +#### Detection Rule or Naming? + +For the explanation, we're using a real example of the Infotainment application: + +!(PGNaming1)[../../../../img/PGNaming1.PNG] + +Before working with your dashboards and alerting profiles, an important task to do when working with Dynatrace is checking +the structure of your applications (process groups). You can do that clicking under *technologies* and filter using your +application Management Zone. + +In the picture above, there are two Process Groups called bon-information-prod. **If you see duplicated process groups like in** +**this case, you MUST follow this guideline** + +Next step would be to open both process groups and compare the metadata. In that way, you can identify if all process instances are +part of the same application or not. An easy way to do that is asking yourself: how many instances of my application do i have? + +If you have 4 instances in total and you're able to see 2 in one PG and other 2 in other PG it means that **they are part of the ** +**same application** + +Another situation could be that checking on the metadata, then you see that are **two different application** and Dynatrace is just naming +the process group in the same way + +*Same application* +- Problem: Dynatrace is creating two different process groups, what transalates in two separated services for the same application. Instead of +seeing all the traffic in one service, you will have it splitted and it will complicate your monitoring +- Solution: create a process group detection rule. Contact Dynatrace Expert + +*Different application* +- Problem: Dynatrace is just naming in the same way applications that are different. +- Solution: This case is less severe, since it can be fixed with a process group naming rule. + + +What about our example? +!(PGNaming2)[../../../../img/PGNaming2.PNG] +!(PGNaming3)[../../../../img/PGNaming3.PNG] + +Based on the feedback of the infotaiment team, each process group is a different application (microservice) and it's visible in the kubernetes container/workload +within the metadata of each Process Group. + +#### How to create a Process Group Detection Rule +1. Open the *conditional-naming-processgroup.yaml* file and create a rule that looks like this: +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName} +- tag: Infotainment +- skipDeployment: false +``` +The result of the rule will be renaming the PG to this: +``` +bon-information-prod ipa +bon-information-prod rsl +``` + +Other possible placeholders that you can use are for example: +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName/[^\\-]*$} +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesFullPodName/buffet-(.*?)-} +{ProcessGroup:DetectedName} - {HostGroup:Name/[^\\_]*$} +{ProcessGroup:KubernetesNamespace} +{ProcessGroup:CommandLineArgs/.*?\\-f\\s\\/www\\/(.*?)\\/generated\\/httpd\\.conf.*?} + +You can combine different ones. Check the (documentation)[link] for more \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vehicle-composite-service/conditional-naming-processgroup/conditional-naming-processgroup.yaml b/BMW-Dynatrace-config/CD_vehicle-composite-service/conditional-naming-processgroup/conditional-naming-processgroup.yaml new file mode 100644 index 00000000..64f4cfd9 --- /dev/null +++ b/BMW-Dynatrace-config/CD_vehicle-composite-service/conditional-naming-processgroup/conditional-naming-processgroup.yaml @@ -0,0 +1,8 @@ +config: +- CDvehicle-composite-service: template.json + +CDvehicle-composite-service: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: vehicle-composite-service +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_vehicle-composite-service/conditional-naming-processgroup/template.json b/BMW-Dynatrace-config/CD_vehicle-composite-service/conditional-naming-processgroup/template.json new file mode 100644 index 00000000..7c039808 --- /dev/null +++ b/BMW-Dynatrace-config/CD_vehicle-composite-service/conditional-naming-processgroup/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "type": "PROCESS_GROUP" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vehicle-composite-service/conditional-naming-service/README.md b/BMW-Dynatrace-config/CD_vehicle-composite-service/conditional-naming-service/README.md new file mode 100644 index 00000000..c34ef308 --- /dev/null +++ b/BMW-Dynatrace-config/CD_vehicle-composite-service/conditional-naming-service/README.md @@ -0,0 +1,35 @@ +### Service Naming Rules + +A typical case could be that you access to *Transaction & Services* and you find two services that are exactly the same: +*DataDownloadV1* +*DataDownloadV1* + +If you drilldown into the service and you check in the process group, you may have a PROD and a E2E for each service. + +*Note: if you see that both process group are exactly the same, please contact a Dynatrace expert to create a Process* +*Group detection rule* + +In the case the PG are PROD and E2E, then we need to create a rule that looks like this: + +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {Service:DetectedName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +- tag: Infotainment +- skipDeployment: false +``` + +The rule will get the Service Detected Name (current name) and it will extract (with a regex) the part of the kubernetes namespace after the "-", so -prod or -e2e, resulting in: +*DataDownloadV1 - prod* +*DataDownloadV1 - e2e* + +Now, services will be easy to identify. + +You can create rules based on any property/metadata. Some other placeholder's eamples: +{Service:DatabaseName} - E2E +{Service:WebServiceName} - {ProcessGroup:Kubernetes:microservice} - {ProcessGroup:Kubernetes:environment} +{Service:DetectedName} - {ProcessGroup:KubernetesContainerName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +{Service:DetectedName} - {ProcessGroup:SpringBootProfileName/[^\\-]*$} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vehicle-composite-service/conditional-naming-service/conditional-naming-service.yaml b/BMW-Dynatrace-config/CD_vehicle-composite-service/conditional-naming-service/conditional-naming-service.yaml new file mode 100644 index 00000000..64f4cfd9 --- /dev/null +++ b/BMW-Dynatrace-config/CD_vehicle-composite-service/conditional-naming-service/conditional-naming-service.yaml @@ -0,0 +1,8 @@ +config: +- CDvehicle-composite-service: template.json + +CDvehicle-composite-service: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: vehicle-composite-service +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_vehicle-composite-service/conditional-naming-service/template.json b/BMW-Dynatrace-config/CD_vehicle-composite-service/conditional-naming-service/template.json new file mode 100644 index 00000000..5d4fac56 --- /dev/null +++ b/BMW-Dynatrace-config/CD_vehicle-composite-service/conditional-naming-service/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "type": "SERVICE" +} \ 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 index d41c4c77..5f35e5c1 100644 --- 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 @@ -1,30 +1,4 @@ -## 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 configure custom services? -## 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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Custom+Services) page to configure your custom services. \ 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 index 92e734fa..1695924c 100644 --- a/BMW-Dynatrace-config/CD_vehicle-composite-service/synthetic-monitor/README.md +++ b/BMW-Dynatrace-config/CD_vehicle-composite-service/synthetic-monitor/README.md @@ -1,37 +1,4 @@ -# Synthetic Configuration -To calculate the Availability KPI, a synthetic must be configured. +### How to configure synthetics? -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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Synthetic+Monitors) page to configure your synthetics. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vehicle-features-service/conditional-naming-processgroup/README.md b/BMW-Dynatrace-config/CD_vehicle-features-service/conditional-naming-processgroup/README.md new file mode 100644 index 00000000..f94196a5 --- /dev/null +++ b/BMW-Dynatrace-config/CD_vehicle-features-service/conditional-naming-processgroup/README.md @@ -0,0 +1,67 @@ +### Process Group Detection Rules and Naming + +#### Detection Rule or Naming? + +For the explanation, we're using a real example of the Infotainment application: + +!(PGNaming1)[../../../../img/PGNaming1.PNG] + +Before working with your dashboards and alerting profiles, an important task to do when working with Dynatrace is checking +the structure of your applications (process groups). You can do that clicking under *technologies* and filter using your +application Management Zone. + +In the picture above, there are two Process Groups called bon-information-prod. **If you see duplicated process groups like in** +**this case, you MUST follow this guideline** + +Next step would be to open both process groups and compare the metadata. In that way, you can identify if all process instances are +part of the same application or not. An easy way to do that is asking yourself: how many instances of my application do i have? + +If you have 4 instances in total and you're able to see 2 in one PG and other 2 in other PG it means that **they are part of the ** +**same application** + +Another situation could be that checking on the metadata, then you see that are **two different application** and Dynatrace is just naming +the process group in the same way + +*Same application* +- Problem: Dynatrace is creating two different process groups, what transalates in two separated services for the same application. Instead of +seeing all the traffic in one service, you will have it splitted and it will complicate your monitoring +- Solution: create a process group detection rule. Contact Dynatrace Expert + +*Different application* +- Problem: Dynatrace is just naming in the same way applications that are different. +- Solution: This case is less severe, since it can be fixed with a process group naming rule. + + +What about our example? +!(PGNaming2)[../../../../img/PGNaming2.PNG] +!(PGNaming3)[../../../../img/PGNaming3.PNG] + +Based on the feedback of the infotaiment team, each process group is a different application (microservice) and it's visible in the kubernetes container/workload +within the metadata of each Process Group. + +#### How to create a Process Group Detection Rule +1. Open the *conditional-naming-processgroup.yaml* file and create a rule that looks like this: +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName} +- tag: Infotainment +- skipDeployment: false +``` +The result of the rule will be renaming the PG to this: +``` +bon-information-prod ipa +bon-information-prod rsl +``` + +Other possible placeholders that you can use are for example: +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName/[^\\-]*$} +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesFullPodName/buffet-(.*?)-} +{ProcessGroup:DetectedName} - {HostGroup:Name/[^\\_]*$} +{ProcessGroup:KubernetesNamespace} +{ProcessGroup:CommandLineArgs/.*?\\-f\\s\\/www\\/(.*?)\\/generated\\/httpd\\.conf.*?} + +You can combine different ones. Check the (documentation)[link] for more \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vehicle-features-service/conditional-naming-processgroup/conditional-naming-processgroup.yaml b/BMW-Dynatrace-config/CD_vehicle-features-service/conditional-naming-processgroup/conditional-naming-processgroup.yaml new file mode 100644 index 00000000..a96b7888 --- /dev/null +++ b/BMW-Dynatrace-config/CD_vehicle-features-service/conditional-naming-processgroup/conditional-naming-processgroup.yaml @@ -0,0 +1,8 @@ +config: +- CDvehicle-features-service: template.json + +CDvehicle-features-service: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: vehicle-features-service +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_vehicle-features-service/conditional-naming-processgroup/template.json b/BMW-Dynatrace-config/CD_vehicle-features-service/conditional-naming-processgroup/template.json new file mode 100644 index 00000000..7c039808 --- /dev/null +++ b/BMW-Dynatrace-config/CD_vehicle-features-service/conditional-naming-processgroup/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "type": "PROCESS_GROUP" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vehicle-features-service/conditional-naming-service/README.md b/BMW-Dynatrace-config/CD_vehicle-features-service/conditional-naming-service/README.md new file mode 100644 index 00000000..c34ef308 --- /dev/null +++ b/BMW-Dynatrace-config/CD_vehicle-features-service/conditional-naming-service/README.md @@ -0,0 +1,35 @@ +### Service Naming Rules + +A typical case could be that you access to *Transaction & Services* and you find two services that are exactly the same: +*DataDownloadV1* +*DataDownloadV1* + +If you drilldown into the service and you check in the process group, you may have a PROD and a E2E for each service. + +*Note: if you see that both process group are exactly the same, please contact a Dynatrace expert to create a Process* +*Group detection rule* + +In the case the PG are PROD and E2E, then we need to create a rule that looks like this: + +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {Service:DetectedName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +- tag: Infotainment +- skipDeployment: false +``` + +The rule will get the Service Detected Name (current name) and it will extract (with a regex) the part of the kubernetes namespace after the "-", so -prod or -e2e, resulting in: +*DataDownloadV1 - prod* +*DataDownloadV1 - e2e* + +Now, services will be easy to identify. + +You can create rules based on any property/metadata. Some other placeholder's eamples: +{Service:DatabaseName} - E2E +{Service:WebServiceName} - {ProcessGroup:Kubernetes:microservice} - {ProcessGroup:Kubernetes:environment} +{Service:DetectedName} - {ProcessGroup:KubernetesContainerName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +{Service:DetectedName} - {ProcessGroup:SpringBootProfileName/[^\\-]*$} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vehicle-features-service/conditional-naming-service/conditional-naming-service.yaml b/BMW-Dynatrace-config/CD_vehicle-features-service/conditional-naming-service/conditional-naming-service.yaml new file mode 100644 index 00000000..a96b7888 --- /dev/null +++ b/BMW-Dynatrace-config/CD_vehicle-features-service/conditional-naming-service/conditional-naming-service.yaml @@ -0,0 +1,8 @@ +config: +- CDvehicle-features-service: template.json + +CDvehicle-features-service: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: vehicle-features-service +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_vehicle-features-service/conditional-naming-service/template.json b/BMW-Dynatrace-config/CD_vehicle-features-service/conditional-naming-service/template.json new file mode 100644 index 00000000..5d4fac56 --- /dev/null +++ b/BMW-Dynatrace-config/CD_vehicle-features-service/conditional-naming-service/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "type": "SERVICE" +} \ 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 index d41c4c77..5f35e5c1 100644 --- 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 @@ -1,30 +1,4 @@ -## 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 configure custom services? -## 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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Custom+Services) page to configure your custom services. \ 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 index 92e734fa..1695924c 100644 --- a/BMW-Dynatrace-config/CD_vehicle-features-service/synthetic-monitor/README.md +++ b/BMW-Dynatrace-config/CD_vehicle-features-service/synthetic-monitor/README.md @@ -1,37 +1,4 @@ -# Synthetic Configuration -To calculate the Availability KPI, a synthetic must be configured. +### How to configure synthetics? -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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Synthetic+Monitors) page to configure your synthetics. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vehicle-list-proxy-service/conditional-naming-processgroup/README.md b/BMW-Dynatrace-config/CD_vehicle-list-proxy-service/conditional-naming-processgroup/README.md new file mode 100644 index 00000000..f94196a5 --- /dev/null +++ b/BMW-Dynatrace-config/CD_vehicle-list-proxy-service/conditional-naming-processgroup/README.md @@ -0,0 +1,67 @@ +### Process Group Detection Rules and Naming + +#### Detection Rule or Naming? + +For the explanation, we're using a real example of the Infotainment application: + +!(PGNaming1)[../../../../img/PGNaming1.PNG] + +Before working with your dashboards and alerting profiles, an important task to do when working with Dynatrace is checking +the structure of your applications (process groups). You can do that clicking under *technologies* and filter using your +application Management Zone. + +In the picture above, there are two Process Groups called bon-information-prod. **If you see duplicated process groups like in** +**this case, you MUST follow this guideline** + +Next step would be to open both process groups and compare the metadata. In that way, you can identify if all process instances are +part of the same application or not. An easy way to do that is asking yourself: how many instances of my application do i have? + +If you have 4 instances in total and you're able to see 2 in one PG and other 2 in other PG it means that **they are part of the ** +**same application** + +Another situation could be that checking on the metadata, then you see that are **two different application** and Dynatrace is just naming +the process group in the same way + +*Same application* +- Problem: Dynatrace is creating two different process groups, what transalates in two separated services for the same application. Instead of +seeing all the traffic in one service, you will have it splitted and it will complicate your monitoring +- Solution: create a process group detection rule. Contact Dynatrace Expert + +*Different application* +- Problem: Dynatrace is just naming in the same way applications that are different. +- Solution: This case is less severe, since it can be fixed with a process group naming rule. + + +What about our example? +!(PGNaming2)[../../../../img/PGNaming2.PNG] +!(PGNaming3)[../../../../img/PGNaming3.PNG] + +Based on the feedback of the infotaiment team, each process group is a different application (microservice) and it's visible in the kubernetes container/workload +within the metadata of each Process Group. + +#### How to create a Process Group Detection Rule +1. Open the *conditional-naming-processgroup.yaml* file and create a rule that looks like this: +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName} +- tag: Infotainment +- skipDeployment: false +``` +The result of the rule will be renaming the PG to this: +``` +bon-information-prod ipa +bon-information-prod rsl +``` + +Other possible placeholders that you can use are for example: +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName/[^\\-]*$} +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesFullPodName/buffet-(.*?)-} +{ProcessGroup:DetectedName} - {HostGroup:Name/[^\\_]*$} +{ProcessGroup:KubernetesNamespace} +{ProcessGroup:CommandLineArgs/.*?\\-f\\s\\/www\\/(.*?)\\/generated\\/httpd\\.conf.*?} + +You can combine different ones. Check the (documentation)[link] for more \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vehicle-list-proxy-service/conditional-naming-processgroup/conditional-naming-processgroup.yaml b/BMW-Dynatrace-config/CD_vehicle-list-proxy-service/conditional-naming-processgroup/conditional-naming-processgroup.yaml new file mode 100644 index 00000000..2d5b28d2 --- /dev/null +++ b/BMW-Dynatrace-config/CD_vehicle-list-proxy-service/conditional-naming-processgroup/conditional-naming-processgroup.yaml @@ -0,0 +1,8 @@ +config: +- CDvehicle-list-proxy-service: template.json + +CDvehicle-list-proxy-service: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: vehicle-list-proxy-service +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_vehicle-list-proxy-service/conditional-naming-processgroup/template.json b/BMW-Dynatrace-config/CD_vehicle-list-proxy-service/conditional-naming-processgroup/template.json new file mode 100644 index 00000000..7c039808 --- /dev/null +++ b/BMW-Dynatrace-config/CD_vehicle-list-proxy-service/conditional-naming-processgroup/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "type": "PROCESS_GROUP" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vehicle-list-proxy-service/conditional-naming-service/README.md b/BMW-Dynatrace-config/CD_vehicle-list-proxy-service/conditional-naming-service/README.md new file mode 100644 index 00000000..c34ef308 --- /dev/null +++ b/BMW-Dynatrace-config/CD_vehicle-list-proxy-service/conditional-naming-service/README.md @@ -0,0 +1,35 @@ +### Service Naming Rules + +A typical case could be that you access to *Transaction & Services* and you find two services that are exactly the same: +*DataDownloadV1* +*DataDownloadV1* + +If you drilldown into the service and you check in the process group, you may have a PROD and a E2E for each service. + +*Note: if you see that both process group are exactly the same, please contact a Dynatrace expert to create a Process* +*Group detection rule* + +In the case the PG are PROD and E2E, then we need to create a rule that looks like this: + +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {Service:DetectedName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +- tag: Infotainment +- skipDeployment: false +``` + +The rule will get the Service Detected Name (current name) and it will extract (with a regex) the part of the kubernetes namespace after the "-", so -prod or -e2e, resulting in: +*DataDownloadV1 - prod* +*DataDownloadV1 - e2e* + +Now, services will be easy to identify. + +You can create rules based on any property/metadata. Some other placeholder's eamples: +{Service:DatabaseName} - E2E +{Service:WebServiceName} - {ProcessGroup:Kubernetes:microservice} - {ProcessGroup:Kubernetes:environment} +{Service:DetectedName} - {ProcessGroup:KubernetesContainerName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +{Service:DetectedName} - {ProcessGroup:SpringBootProfileName/[^\\-]*$} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vehicle-list-proxy-service/conditional-naming-service/conditional-naming-service.yaml b/BMW-Dynatrace-config/CD_vehicle-list-proxy-service/conditional-naming-service/conditional-naming-service.yaml new file mode 100644 index 00000000..2d5b28d2 --- /dev/null +++ b/BMW-Dynatrace-config/CD_vehicle-list-proxy-service/conditional-naming-service/conditional-naming-service.yaml @@ -0,0 +1,8 @@ +config: +- CDvehicle-list-proxy-service: template.json + +CDvehicle-list-proxy-service: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: vehicle-list-proxy-service +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_vehicle-list-proxy-service/conditional-naming-service/template.json b/BMW-Dynatrace-config/CD_vehicle-list-proxy-service/conditional-naming-service/template.json new file mode 100644 index 00000000..5d4fac56 --- /dev/null +++ b/BMW-Dynatrace-config/CD_vehicle-list-proxy-service/conditional-naming-service/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "type": "SERVICE" +} \ 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 index d41c4c77..5f35e5c1 100644 --- 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 @@ -1,30 +1,4 @@ -## 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 configure custom services? -## 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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Custom+Services) page to configure your custom services. \ 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 index 92e734fa..1695924c 100644 --- 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 @@ -1,37 +1,4 @@ -# Synthetic Configuration -To calculate the Availability KPI, a synthetic must be configured. +### How to configure synthetics? -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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Synthetic+Monitors) page to configure your synthetics. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vehicle-mapping-composite-service/conditional-naming-processgroup/README.md b/BMW-Dynatrace-config/CD_vehicle-mapping-composite-service/conditional-naming-processgroup/README.md new file mode 100644 index 00000000..f94196a5 --- /dev/null +++ b/BMW-Dynatrace-config/CD_vehicle-mapping-composite-service/conditional-naming-processgroup/README.md @@ -0,0 +1,67 @@ +### Process Group Detection Rules and Naming + +#### Detection Rule or Naming? + +For the explanation, we're using a real example of the Infotainment application: + +!(PGNaming1)[../../../../img/PGNaming1.PNG] + +Before working with your dashboards and alerting profiles, an important task to do when working with Dynatrace is checking +the structure of your applications (process groups). You can do that clicking under *technologies* and filter using your +application Management Zone. + +In the picture above, there are two Process Groups called bon-information-prod. **If you see duplicated process groups like in** +**this case, you MUST follow this guideline** + +Next step would be to open both process groups and compare the metadata. In that way, you can identify if all process instances are +part of the same application or not. An easy way to do that is asking yourself: how many instances of my application do i have? + +If you have 4 instances in total and you're able to see 2 in one PG and other 2 in other PG it means that **they are part of the ** +**same application** + +Another situation could be that checking on the metadata, then you see that are **two different application** and Dynatrace is just naming +the process group in the same way + +*Same application* +- Problem: Dynatrace is creating two different process groups, what transalates in two separated services for the same application. Instead of +seeing all the traffic in one service, you will have it splitted and it will complicate your monitoring +- Solution: create a process group detection rule. Contact Dynatrace Expert + +*Different application* +- Problem: Dynatrace is just naming in the same way applications that are different. +- Solution: This case is less severe, since it can be fixed with a process group naming rule. + + +What about our example? +!(PGNaming2)[../../../../img/PGNaming2.PNG] +!(PGNaming3)[../../../../img/PGNaming3.PNG] + +Based on the feedback of the infotaiment team, each process group is a different application (microservice) and it's visible in the kubernetes container/workload +within the metadata of each Process Group. + +#### How to create a Process Group Detection Rule +1. Open the *conditional-naming-processgroup.yaml* file and create a rule that looks like this: +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName} +- tag: Infotainment +- skipDeployment: false +``` +The result of the rule will be renaming the PG to this: +``` +bon-information-prod ipa +bon-information-prod rsl +``` + +Other possible placeholders that you can use are for example: +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName/[^\\-]*$} +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesFullPodName/buffet-(.*?)-} +{ProcessGroup:DetectedName} - {HostGroup:Name/[^\\_]*$} +{ProcessGroup:KubernetesNamespace} +{ProcessGroup:CommandLineArgs/.*?\\-f\\s\\/www\\/(.*?)\\/generated\\/httpd\\.conf.*?} + +You can combine different ones. Check the (documentation)[link] for more \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vehicle-mapping-composite-service/conditional-naming-processgroup/conditional-naming-processgroup.yaml b/BMW-Dynatrace-config/CD_vehicle-mapping-composite-service/conditional-naming-processgroup/conditional-naming-processgroup.yaml new file mode 100644 index 00000000..2d30b96c --- /dev/null +++ b/BMW-Dynatrace-config/CD_vehicle-mapping-composite-service/conditional-naming-processgroup/conditional-naming-processgroup.yaml @@ -0,0 +1,8 @@ +config: +- CDvehicle-mapping-composite-service: template.json + +CDvehicle-mapping-composite-service: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: vehicle-mapping-composite-service +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_vehicle-mapping-composite-service/conditional-naming-processgroup/template.json b/BMW-Dynatrace-config/CD_vehicle-mapping-composite-service/conditional-naming-processgroup/template.json new file mode 100644 index 00000000..7c039808 --- /dev/null +++ b/BMW-Dynatrace-config/CD_vehicle-mapping-composite-service/conditional-naming-processgroup/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "type": "PROCESS_GROUP" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vehicle-mapping-composite-service/conditional-naming-service/README.md b/BMW-Dynatrace-config/CD_vehicle-mapping-composite-service/conditional-naming-service/README.md new file mode 100644 index 00000000..c34ef308 --- /dev/null +++ b/BMW-Dynatrace-config/CD_vehicle-mapping-composite-service/conditional-naming-service/README.md @@ -0,0 +1,35 @@ +### Service Naming Rules + +A typical case could be that you access to *Transaction & Services* and you find two services that are exactly the same: +*DataDownloadV1* +*DataDownloadV1* + +If you drilldown into the service and you check in the process group, you may have a PROD and a E2E for each service. + +*Note: if you see that both process group are exactly the same, please contact a Dynatrace expert to create a Process* +*Group detection rule* + +In the case the PG are PROD and E2E, then we need to create a rule that looks like this: + +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {Service:DetectedName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +- tag: Infotainment +- skipDeployment: false +``` + +The rule will get the Service Detected Name (current name) and it will extract (with a regex) the part of the kubernetes namespace after the "-", so -prod or -e2e, resulting in: +*DataDownloadV1 - prod* +*DataDownloadV1 - e2e* + +Now, services will be easy to identify. + +You can create rules based on any property/metadata. Some other placeholder's eamples: +{Service:DatabaseName} - E2E +{Service:WebServiceName} - {ProcessGroup:Kubernetes:microservice} - {ProcessGroup:Kubernetes:environment} +{Service:DetectedName} - {ProcessGroup:KubernetesContainerName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +{Service:DetectedName} - {ProcessGroup:SpringBootProfileName/[^\\-]*$} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vehicle-mapping-composite-service/conditional-naming-service/conditional-naming-service.yaml b/BMW-Dynatrace-config/CD_vehicle-mapping-composite-service/conditional-naming-service/conditional-naming-service.yaml new file mode 100644 index 00000000..2d30b96c --- /dev/null +++ b/BMW-Dynatrace-config/CD_vehicle-mapping-composite-service/conditional-naming-service/conditional-naming-service.yaml @@ -0,0 +1,8 @@ +config: +- CDvehicle-mapping-composite-service: template.json + +CDvehicle-mapping-composite-service: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: vehicle-mapping-composite-service +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_vehicle-mapping-composite-service/conditional-naming-service/template.json b/BMW-Dynatrace-config/CD_vehicle-mapping-composite-service/conditional-naming-service/template.json new file mode 100644 index 00000000..5d4fac56 --- /dev/null +++ b/BMW-Dynatrace-config/CD_vehicle-mapping-composite-service/conditional-naming-service/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "type": "SERVICE" +} \ 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 index d41c4c77..5f35e5c1 100644 --- 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 @@ -1,30 +1,4 @@ -## 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 configure custom services? -## 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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Custom+Services) page to configure your custom services. \ 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 index 92e734fa..1695924c 100644 --- 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 @@ -1,37 +1,4 @@ -# Synthetic Configuration -To calculate the Availability KPI, a synthetic must be configured. +### How to configure synthetics? -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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Synthetic+Monitors) page to configure your synthetics. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vehicle-mapping-service/conditional-naming-processgroup/README.md b/BMW-Dynatrace-config/CD_vehicle-mapping-service/conditional-naming-processgroup/README.md new file mode 100644 index 00000000..f94196a5 --- /dev/null +++ b/BMW-Dynatrace-config/CD_vehicle-mapping-service/conditional-naming-processgroup/README.md @@ -0,0 +1,67 @@ +### Process Group Detection Rules and Naming + +#### Detection Rule or Naming? + +For the explanation, we're using a real example of the Infotainment application: + +!(PGNaming1)[../../../../img/PGNaming1.PNG] + +Before working with your dashboards and alerting profiles, an important task to do when working with Dynatrace is checking +the structure of your applications (process groups). You can do that clicking under *technologies* and filter using your +application Management Zone. + +In the picture above, there are two Process Groups called bon-information-prod. **If you see duplicated process groups like in** +**this case, you MUST follow this guideline** + +Next step would be to open both process groups and compare the metadata. In that way, you can identify if all process instances are +part of the same application or not. An easy way to do that is asking yourself: how many instances of my application do i have? + +If you have 4 instances in total and you're able to see 2 in one PG and other 2 in other PG it means that **they are part of the ** +**same application** + +Another situation could be that checking on the metadata, then you see that are **two different application** and Dynatrace is just naming +the process group in the same way + +*Same application* +- Problem: Dynatrace is creating two different process groups, what transalates in two separated services for the same application. Instead of +seeing all the traffic in one service, you will have it splitted and it will complicate your monitoring +- Solution: create a process group detection rule. Contact Dynatrace Expert + +*Different application* +- Problem: Dynatrace is just naming in the same way applications that are different. +- Solution: This case is less severe, since it can be fixed with a process group naming rule. + + +What about our example? +!(PGNaming2)[../../../../img/PGNaming2.PNG] +!(PGNaming3)[../../../../img/PGNaming3.PNG] + +Based on the feedback of the infotaiment team, each process group is a different application (microservice) and it's visible in the kubernetes container/workload +within the metadata of each Process Group. + +#### How to create a Process Group Detection Rule +1. Open the *conditional-naming-processgroup.yaml* file and create a rule that looks like this: +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName} +- tag: Infotainment +- skipDeployment: false +``` +The result of the rule will be renaming the PG to this: +``` +bon-information-prod ipa +bon-information-prod rsl +``` + +Other possible placeholders that you can use are for example: +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName/[^\\-]*$} +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesFullPodName/buffet-(.*?)-} +{ProcessGroup:DetectedName} - {HostGroup:Name/[^\\_]*$} +{ProcessGroup:KubernetesNamespace} +{ProcessGroup:CommandLineArgs/.*?\\-f\\s\\/www\\/(.*?)\\/generated\\/httpd\\.conf.*?} + +You can combine different ones. Check the (documentation)[link] for more \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vehicle-mapping-service/conditional-naming-processgroup/conditional-naming-processgroup.yaml b/BMW-Dynatrace-config/CD_vehicle-mapping-service/conditional-naming-processgroup/conditional-naming-processgroup.yaml new file mode 100644 index 00000000..ad19cc2d --- /dev/null +++ b/BMW-Dynatrace-config/CD_vehicle-mapping-service/conditional-naming-processgroup/conditional-naming-processgroup.yaml @@ -0,0 +1,8 @@ +config: +- CDvehicle-mapping-service: template.json + +CDvehicle-mapping-service: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: vehicle-mapping-service +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_vehicle-mapping-service/conditional-naming-processgroup/template.json b/BMW-Dynatrace-config/CD_vehicle-mapping-service/conditional-naming-processgroup/template.json new file mode 100644 index 00000000..7c039808 --- /dev/null +++ b/BMW-Dynatrace-config/CD_vehicle-mapping-service/conditional-naming-processgroup/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "type": "PROCESS_GROUP" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vehicle-mapping-service/conditional-naming-service/README.md b/BMW-Dynatrace-config/CD_vehicle-mapping-service/conditional-naming-service/README.md new file mode 100644 index 00000000..c34ef308 --- /dev/null +++ b/BMW-Dynatrace-config/CD_vehicle-mapping-service/conditional-naming-service/README.md @@ -0,0 +1,35 @@ +### Service Naming Rules + +A typical case could be that you access to *Transaction & Services* and you find two services that are exactly the same: +*DataDownloadV1* +*DataDownloadV1* + +If you drilldown into the service and you check in the process group, you may have a PROD and a E2E for each service. + +*Note: if you see that both process group are exactly the same, please contact a Dynatrace expert to create a Process* +*Group detection rule* + +In the case the PG are PROD and E2E, then we need to create a rule that looks like this: + +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {Service:DetectedName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +- tag: Infotainment +- skipDeployment: false +``` + +The rule will get the Service Detected Name (current name) and it will extract (with a regex) the part of the kubernetes namespace after the "-", so -prod or -e2e, resulting in: +*DataDownloadV1 - prod* +*DataDownloadV1 - e2e* + +Now, services will be easy to identify. + +You can create rules based on any property/metadata. Some other placeholder's eamples: +{Service:DatabaseName} - E2E +{Service:WebServiceName} - {ProcessGroup:Kubernetes:microservice} - {ProcessGroup:Kubernetes:environment} +{Service:DetectedName} - {ProcessGroup:KubernetesContainerName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +{Service:DetectedName} - {ProcessGroup:SpringBootProfileName/[^\\-]*$} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vehicle-mapping-service/conditional-naming-service/conditional-naming-service.yaml b/BMW-Dynatrace-config/CD_vehicle-mapping-service/conditional-naming-service/conditional-naming-service.yaml new file mode 100644 index 00000000..ad19cc2d --- /dev/null +++ b/BMW-Dynatrace-config/CD_vehicle-mapping-service/conditional-naming-service/conditional-naming-service.yaml @@ -0,0 +1,8 @@ +config: +- CDvehicle-mapping-service: template.json + +CDvehicle-mapping-service: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: vehicle-mapping-service +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_vehicle-mapping-service/conditional-naming-service/template.json b/BMW-Dynatrace-config/CD_vehicle-mapping-service/conditional-naming-service/template.json new file mode 100644 index 00000000..5d4fac56 --- /dev/null +++ b/BMW-Dynatrace-config/CD_vehicle-mapping-service/conditional-naming-service/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "type": "SERVICE" +} \ 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 index d41c4c77..5f35e5c1 100644 --- 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 @@ -1,30 +1,4 @@ -## 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 configure custom services? -## 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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Custom+Services) page to configure your custom services. \ 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 index 92e734fa..1695924c 100644 --- a/BMW-Dynatrace-config/CD_vehicle-mapping-service/synthetic-monitor/README.md +++ b/BMW-Dynatrace-config/CD_vehicle-mapping-service/synthetic-monitor/README.md @@ -1,37 +1,4 @@ -# Synthetic Configuration -To calculate the Availability KPI, a synthetic must be configured. +### How to configure synthetics? -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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Synthetic+Monitors) page to configure your synthetics. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vehicle-remote-commands-composite-service/conditional-naming-processgroup/README.md b/BMW-Dynatrace-config/CD_vehicle-remote-commands-composite-service/conditional-naming-processgroup/README.md new file mode 100644 index 00000000..f94196a5 --- /dev/null +++ b/BMW-Dynatrace-config/CD_vehicle-remote-commands-composite-service/conditional-naming-processgroup/README.md @@ -0,0 +1,67 @@ +### Process Group Detection Rules and Naming + +#### Detection Rule or Naming? + +For the explanation, we're using a real example of the Infotainment application: + +!(PGNaming1)[../../../../img/PGNaming1.PNG] + +Before working with your dashboards and alerting profiles, an important task to do when working with Dynatrace is checking +the structure of your applications (process groups). You can do that clicking under *technologies* and filter using your +application Management Zone. + +In the picture above, there are two Process Groups called bon-information-prod. **If you see duplicated process groups like in** +**this case, you MUST follow this guideline** + +Next step would be to open both process groups and compare the metadata. In that way, you can identify if all process instances are +part of the same application or not. An easy way to do that is asking yourself: how many instances of my application do i have? + +If you have 4 instances in total and you're able to see 2 in one PG and other 2 in other PG it means that **they are part of the ** +**same application** + +Another situation could be that checking on the metadata, then you see that are **two different application** and Dynatrace is just naming +the process group in the same way + +*Same application* +- Problem: Dynatrace is creating two different process groups, what transalates in two separated services for the same application. Instead of +seeing all the traffic in one service, you will have it splitted and it will complicate your monitoring +- Solution: create a process group detection rule. Contact Dynatrace Expert + +*Different application* +- Problem: Dynatrace is just naming in the same way applications that are different. +- Solution: This case is less severe, since it can be fixed with a process group naming rule. + + +What about our example? +!(PGNaming2)[../../../../img/PGNaming2.PNG] +!(PGNaming3)[../../../../img/PGNaming3.PNG] + +Based on the feedback of the infotaiment team, each process group is a different application (microservice) and it's visible in the kubernetes container/workload +within the metadata of each Process Group. + +#### How to create a Process Group Detection Rule +1. Open the *conditional-naming-processgroup.yaml* file and create a rule that looks like this: +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName} +- tag: Infotainment +- skipDeployment: false +``` +The result of the rule will be renaming the PG to this: +``` +bon-information-prod ipa +bon-information-prod rsl +``` + +Other possible placeholders that you can use are for example: +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName/[^\\-]*$} +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesFullPodName/buffet-(.*?)-} +{ProcessGroup:DetectedName} - {HostGroup:Name/[^\\_]*$} +{ProcessGroup:KubernetesNamespace} +{ProcessGroup:CommandLineArgs/.*?\\-f\\s\\/www\\/(.*?)\\/generated\\/httpd\\.conf.*?} + +You can combine different ones. Check the (documentation)[link] for more \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vehicle-remote-commands-composite-service/conditional-naming-processgroup/conditional-naming-processgroup.yaml b/BMW-Dynatrace-config/CD_vehicle-remote-commands-composite-service/conditional-naming-processgroup/conditional-naming-processgroup.yaml new file mode 100644 index 00000000..238d627e --- /dev/null +++ b/BMW-Dynatrace-config/CD_vehicle-remote-commands-composite-service/conditional-naming-processgroup/conditional-naming-processgroup.yaml @@ -0,0 +1,8 @@ +config: +- CDvehicle-remote-commands-composite-service: template.json + +CDvehicle-remote-commands-composite-service: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: vehicle-remote-commands-composite-service +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_vehicle-remote-commands-composite-service/conditional-naming-processgroup/template.json b/BMW-Dynatrace-config/CD_vehicle-remote-commands-composite-service/conditional-naming-processgroup/template.json new file mode 100644 index 00000000..7c039808 --- /dev/null +++ b/BMW-Dynatrace-config/CD_vehicle-remote-commands-composite-service/conditional-naming-processgroup/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "type": "PROCESS_GROUP" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vehicle-remote-commands-composite-service/conditional-naming-service/README.md b/BMW-Dynatrace-config/CD_vehicle-remote-commands-composite-service/conditional-naming-service/README.md new file mode 100644 index 00000000..c34ef308 --- /dev/null +++ b/BMW-Dynatrace-config/CD_vehicle-remote-commands-composite-service/conditional-naming-service/README.md @@ -0,0 +1,35 @@ +### Service Naming Rules + +A typical case could be that you access to *Transaction & Services* and you find two services that are exactly the same: +*DataDownloadV1* +*DataDownloadV1* + +If you drilldown into the service and you check in the process group, you may have a PROD and a E2E for each service. + +*Note: if you see that both process group are exactly the same, please contact a Dynatrace expert to create a Process* +*Group detection rule* + +In the case the PG are PROD and E2E, then we need to create a rule that looks like this: + +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {Service:DetectedName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +- tag: Infotainment +- skipDeployment: false +``` + +The rule will get the Service Detected Name (current name) and it will extract (with a regex) the part of the kubernetes namespace after the "-", so -prod or -e2e, resulting in: +*DataDownloadV1 - prod* +*DataDownloadV1 - e2e* + +Now, services will be easy to identify. + +You can create rules based on any property/metadata. Some other placeholder's eamples: +{Service:DatabaseName} - E2E +{Service:WebServiceName} - {ProcessGroup:Kubernetes:microservice} - {ProcessGroup:Kubernetes:environment} +{Service:DetectedName} - {ProcessGroup:KubernetesContainerName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +{Service:DetectedName} - {ProcessGroup:SpringBootProfileName/[^\\-]*$} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vehicle-remote-commands-composite-service/conditional-naming-service/conditional-naming-service.yaml b/BMW-Dynatrace-config/CD_vehicle-remote-commands-composite-service/conditional-naming-service/conditional-naming-service.yaml new file mode 100644 index 00000000..238d627e --- /dev/null +++ b/BMW-Dynatrace-config/CD_vehicle-remote-commands-composite-service/conditional-naming-service/conditional-naming-service.yaml @@ -0,0 +1,8 @@ +config: +- CDvehicle-remote-commands-composite-service: template.json + +CDvehicle-remote-commands-composite-service: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: vehicle-remote-commands-composite-service +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_vehicle-remote-commands-composite-service/conditional-naming-service/template.json b/BMW-Dynatrace-config/CD_vehicle-remote-commands-composite-service/conditional-naming-service/template.json new file mode 100644 index 00000000..5d4fac56 --- /dev/null +++ b/BMW-Dynatrace-config/CD_vehicle-remote-commands-composite-service/conditional-naming-service/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "type": "SERVICE" +} \ 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 index d41c4c77..5f35e5c1 100644 --- 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 @@ -1,30 +1,4 @@ -## 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 configure custom services? -## 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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Custom+Services) page to configure your custom services. \ 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 index 92e734fa..1695924c 100644 --- 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 @@ -1,37 +1,4 @@ -# Synthetic Configuration -To calculate the Availability KPI, a synthetic must be configured. +### How to configure synthetics? -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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Synthetic+Monitors) page to configure your synthetics. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vehicle-service-alert/conditional-naming-processgroup/README.md b/BMW-Dynatrace-config/CD_vehicle-service-alert/conditional-naming-processgroup/README.md new file mode 100644 index 00000000..f94196a5 --- /dev/null +++ b/BMW-Dynatrace-config/CD_vehicle-service-alert/conditional-naming-processgroup/README.md @@ -0,0 +1,67 @@ +### Process Group Detection Rules and Naming + +#### Detection Rule or Naming? + +For the explanation, we're using a real example of the Infotainment application: + +!(PGNaming1)[../../../../img/PGNaming1.PNG] + +Before working with your dashboards and alerting profiles, an important task to do when working with Dynatrace is checking +the structure of your applications (process groups). You can do that clicking under *technologies* and filter using your +application Management Zone. + +In the picture above, there are two Process Groups called bon-information-prod. **If you see duplicated process groups like in** +**this case, you MUST follow this guideline** + +Next step would be to open both process groups and compare the metadata. In that way, you can identify if all process instances are +part of the same application or not. An easy way to do that is asking yourself: how many instances of my application do i have? + +If you have 4 instances in total and you're able to see 2 in one PG and other 2 in other PG it means that **they are part of the ** +**same application** + +Another situation could be that checking on the metadata, then you see that are **two different application** and Dynatrace is just naming +the process group in the same way + +*Same application* +- Problem: Dynatrace is creating two different process groups, what transalates in two separated services for the same application. Instead of +seeing all the traffic in one service, you will have it splitted and it will complicate your monitoring +- Solution: create a process group detection rule. Contact Dynatrace Expert + +*Different application* +- Problem: Dynatrace is just naming in the same way applications that are different. +- Solution: This case is less severe, since it can be fixed with a process group naming rule. + + +What about our example? +!(PGNaming2)[../../../../img/PGNaming2.PNG] +!(PGNaming3)[../../../../img/PGNaming3.PNG] + +Based on the feedback of the infotaiment team, each process group is a different application (microservice) and it's visible in the kubernetes container/workload +within the metadata of each Process Group. + +#### How to create a Process Group Detection Rule +1. Open the *conditional-naming-processgroup.yaml* file and create a rule that looks like this: +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName} +- tag: Infotainment +- skipDeployment: false +``` +The result of the rule will be renaming the PG to this: +``` +bon-information-prod ipa +bon-information-prod rsl +``` + +Other possible placeholders that you can use are for example: +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName/[^\\-]*$} +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesFullPodName/buffet-(.*?)-} +{ProcessGroup:DetectedName} - {HostGroup:Name/[^\\_]*$} +{ProcessGroup:KubernetesNamespace} +{ProcessGroup:CommandLineArgs/.*?\\-f\\s\\/www\\/(.*?)\\/generated\\/httpd\\.conf.*?} + +You can combine different ones. Check the (documentation)[link] for more \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vehicle-service-alert/conditional-naming-processgroup/conditional-naming-processgroup.yaml b/BMW-Dynatrace-config/CD_vehicle-service-alert/conditional-naming-processgroup/conditional-naming-processgroup.yaml new file mode 100644 index 00000000..7261d9c4 --- /dev/null +++ b/BMW-Dynatrace-config/CD_vehicle-service-alert/conditional-naming-processgroup/conditional-naming-processgroup.yaml @@ -0,0 +1,8 @@ +config: +- CDvehicle-service-alert: template.json + +CDvehicle-service-alert: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: vehicle-service-alert +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_vehicle-service-alert/conditional-naming-processgroup/template.json b/BMW-Dynatrace-config/CD_vehicle-service-alert/conditional-naming-processgroup/template.json new file mode 100644 index 00000000..7c039808 --- /dev/null +++ b/BMW-Dynatrace-config/CD_vehicle-service-alert/conditional-naming-processgroup/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "type": "PROCESS_GROUP" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vehicle-service-alert/conditional-naming-service/README.md b/BMW-Dynatrace-config/CD_vehicle-service-alert/conditional-naming-service/README.md new file mode 100644 index 00000000..c34ef308 --- /dev/null +++ b/BMW-Dynatrace-config/CD_vehicle-service-alert/conditional-naming-service/README.md @@ -0,0 +1,35 @@ +### Service Naming Rules + +A typical case could be that you access to *Transaction & Services* and you find two services that are exactly the same: +*DataDownloadV1* +*DataDownloadV1* + +If you drilldown into the service and you check in the process group, you may have a PROD and a E2E for each service. + +*Note: if you see that both process group are exactly the same, please contact a Dynatrace expert to create a Process* +*Group detection rule* + +In the case the PG are PROD and E2E, then we need to create a rule that looks like this: + +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {Service:DetectedName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +- tag: Infotainment +- skipDeployment: false +``` + +The rule will get the Service Detected Name (current name) and it will extract (with a regex) the part of the kubernetes namespace after the "-", so -prod or -e2e, resulting in: +*DataDownloadV1 - prod* +*DataDownloadV1 - e2e* + +Now, services will be easy to identify. + +You can create rules based on any property/metadata. Some other placeholder's eamples: +{Service:DatabaseName} - E2E +{Service:WebServiceName} - {ProcessGroup:Kubernetes:microservice} - {ProcessGroup:Kubernetes:environment} +{Service:DetectedName} - {ProcessGroup:KubernetesContainerName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +{Service:DetectedName} - {ProcessGroup:SpringBootProfileName/[^\\-]*$} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vehicle-service-alert/conditional-naming-service/conditional-naming-service.yaml b/BMW-Dynatrace-config/CD_vehicle-service-alert/conditional-naming-service/conditional-naming-service.yaml new file mode 100644 index 00000000..7261d9c4 --- /dev/null +++ b/BMW-Dynatrace-config/CD_vehicle-service-alert/conditional-naming-service/conditional-naming-service.yaml @@ -0,0 +1,8 @@ +config: +- CDvehicle-service-alert: template.json + +CDvehicle-service-alert: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: vehicle-service-alert +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_vehicle-service-alert/conditional-naming-service/template.json b/BMW-Dynatrace-config/CD_vehicle-service-alert/conditional-naming-service/template.json new file mode 100644 index 00000000..5d4fac56 --- /dev/null +++ b/BMW-Dynatrace-config/CD_vehicle-service-alert/conditional-naming-service/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "type": "SERVICE" +} \ 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 index d41c4c77..5f35e5c1 100644 --- 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 @@ -1,30 +1,4 @@ -## 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 configure custom services? -## 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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Custom+Services) page to configure your custom services. \ 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 index 92e734fa..1695924c 100644 --- a/BMW-Dynatrace-config/CD_vehicle-service-alert/synthetic-monitor/README.md +++ b/BMW-Dynatrace-config/CD_vehicle-service-alert/synthetic-monitor/README.md @@ -1,37 +1,4 @@ -# Synthetic Configuration -To calculate the Availability KPI, a synthetic must be configured. +### How to configure synthetics? -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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Synthetic+Monitors) page to configure your synthetics. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vehicle-service-background/conditional-naming-processgroup/README.md b/BMW-Dynatrace-config/CD_vehicle-service-background/conditional-naming-processgroup/README.md new file mode 100644 index 00000000..f94196a5 --- /dev/null +++ b/BMW-Dynatrace-config/CD_vehicle-service-background/conditional-naming-processgroup/README.md @@ -0,0 +1,67 @@ +### Process Group Detection Rules and Naming + +#### Detection Rule or Naming? + +For the explanation, we're using a real example of the Infotainment application: + +!(PGNaming1)[../../../../img/PGNaming1.PNG] + +Before working with your dashboards and alerting profiles, an important task to do when working with Dynatrace is checking +the structure of your applications (process groups). You can do that clicking under *technologies* and filter using your +application Management Zone. + +In the picture above, there are two Process Groups called bon-information-prod. **If you see duplicated process groups like in** +**this case, you MUST follow this guideline** + +Next step would be to open both process groups and compare the metadata. In that way, you can identify if all process instances are +part of the same application or not. An easy way to do that is asking yourself: how many instances of my application do i have? + +If you have 4 instances in total and you're able to see 2 in one PG and other 2 in other PG it means that **they are part of the ** +**same application** + +Another situation could be that checking on the metadata, then you see that are **two different application** and Dynatrace is just naming +the process group in the same way + +*Same application* +- Problem: Dynatrace is creating two different process groups, what transalates in two separated services for the same application. Instead of +seeing all the traffic in one service, you will have it splitted and it will complicate your monitoring +- Solution: create a process group detection rule. Contact Dynatrace Expert + +*Different application* +- Problem: Dynatrace is just naming in the same way applications that are different. +- Solution: This case is less severe, since it can be fixed with a process group naming rule. + + +What about our example? +!(PGNaming2)[../../../../img/PGNaming2.PNG] +!(PGNaming3)[../../../../img/PGNaming3.PNG] + +Based on the feedback of the infotaiment team, each process group is a different application (microservice) and it's visible in the kubernetes container/workload +within the metadata of each Process Group. + +#### How to create a Process Group Detection Rule +1. Open the *conditional-naming-processgroup.yaml* file and create a rule that looks like this: +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName} +- tag: Infotainment +- skipDeployment: false +``` +The result of the rule will be renaming the PG to this: +``` +bon-information-prod ipa +bon-information-prod rsl +``` + +Other possible placeholders that you can use are for example: +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName/[^\\-]*$} +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesFullPodName/buffet-(.*?)-} +{ProcessGroup:DetectedName} - {HostGroup:Name/[^\\_]*$} +{ProcessGroup:KubernetesNamespace} +{ProcessGroup:CommandLineArgs/.*?\\-f\\s\\/www\\/(.*?)\\/generated\\/httpd\\.conf.*?} + +You can combine different ones. Check the (documentation)[link] for more \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vehicle-service-background/conditional-naming-processgroup/conditional-naming-processgroup.yaml b/BMW-Dynatrace-config/CD_vehicle-service-background/conditional-naming-processgroup/conditional-naming-processgroup.yaml new file mode 100644 index 00000000..18c7418d --- /dev/null +++ b/BMW-Dynatrace-config/CD_vehicle-service-background/conditional-naming-processgroup/conditional-naming-processgroup.yaml @@ -0,0 +1,8 @@ +config: +- CDvehicle-service-background: template.json + +CDvehicle-service-background: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: vehicle-service-background +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_vehicle-service-background/conditional-naming-processgroup/template.json b/BMW-Dynatrace-config/CD_vehicle-service-background/conditional-naming-processgroup/template.json new file mode 100644 index 00000000..7c039808 --- /dev/null +++ b/BMW-Dynatrace-config/CD_vehicle-service-background/conditional-naming-processgroup/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "type": "PROCESS_GROUP" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vehicle-service-background/conditional-naming-service/README.md b/BMW-Dynatrace-config/CD_vehicle-service-background/conditional-naming-service/README.md new file mode 100644 index 00000000..c34ef308 --- /dev/null +++ b/BMW-Dynatrace-config/CD_vehicle-service-background/conditional-naming-service/README.md @@ -0,0 +1,35 @@ +### Service Naming Rules + +A typical case could be that you access to *Transaction & Services* and you find two services that are exactly the same: +*DataDownloadV1* +*DataDownloadV1* + +If you drilldown into the service and you check in the process group, you may have a PROD and a E2E for each service. + +*Note: if you see that both process group are exactly the same, please contact a Dynatrace expert to create a Process* +*Group detection rule* + +In the case the PG are PROD and E2E, then we need to create a rule that looks like this: + +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {Service:DetectedName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +- tag: Infotainment +- skipDeployment: false +``` + +The rule will get the Service Detected Name (current name) and it will extract (with a regex) the part of the kubernetes namespace after the "-", so -prod or -e2e, resulting in: +*DataDownloadV1 - prod* +*DataDownloadV1 - e2e* + +Now, services will be easy to identify. + +You can create rules based on any property/metadata. Some other placeholder's eamples: +{Service:DatabaseName} - E2E +{Service:WebServiceName} - {ProcessGroup:Kubernetes:microservice} - {ProcessGroup:Kubernetes:environment} +{Service:DetectedName} - {ProcessGroup:KubernetesContainerName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +{Service:DetectedName} - {ProcessGroup:SpringBootProfileName/[^\\-]*$} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vehicle-service-background/conditional-naming-service/conditional-naming-service.yaml b/BMW-Dynatrace-config/CD_vehicle-service-background/conditional-naming-service/conditional-naming-service.yaml new file mode 100644 index 00000000..18c7418d --- /dev/null +++ b/BMW-Dynatrace-config/CD_vehicle-service-background/conditional-naming-service/conditional-naming-service.yaml @@ -0,0 +1,8 @@ +config: +- CDvehicle-service-background: template.json + +CDvehicle-service-background: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: vehicle-service-background +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_vehicle-service-background/conditional-naming-service/template.json b/BMW-Dynatrace-config/CD_vehicle-service-background/conditional-naming-service/template.json new file mode 100644 index 00000000..5d4fac56 --- /dev/null +++ b/BMW-Dynatrace-config/CD_vehicle-service-background/conditional-naming-service/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "type": "SERVICE" +} \ 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 index d41c4c77..5f35e5c1 100644 --- 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 @@ -1,30 +1,4 @@ -## 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 configure custom services? -## 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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Custom+Services) page to configure your custom services. \ 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 index 92e734fa..1695924c 100644 --- a/BMW-Dynatrace-config/CD_vehicle-service-background/synthetic-monitor/README.md +++ b/BMW-Dynatrace-config/CD_vehicle-service-background/synthetic-monitor/README.md @@ -1,37 +1,4 @@ -# Synthetic Configuration -To calculate the Availability KPI, a synthetic must be configured. +### How to configure synthetics? -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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Synthetic+Monitors) page to configure your synthetics. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vehicle-service-staging/conditional-naming-processgroup/README.md b/BMW-Dynatrace-config/CD_vehicle-service-staging/conditional-naming-processgroup/README.md new file mode 100644 index 00000000..f94196a5 --- /dev/null +++ b/BMW-Dynatrace-config/CD_vehicle-service-staging/conditional-naming-processgroup/README.md @@ -0,0 +1,67 @@ +### Process Group Detection Rules and Naming + +#### Detection Rule or Naming? + +For the explanation, we're using a real example of the Infotainment application: + +!(PGNaming1)[../../../../img/PGNaming1.PNG] + +Before working with your dashboards and alerting profiles, an important task to do when working with Dynatrace is checking +the structure of your applications (process groups). You can do that clicking under *technologies* and filter using your +application Management Zone. + +In the picture above, there are two Process Groups called bon-information-prod. **If you see duplicated process groups like in** +**this case, you MUST follow this guideline** + +Next step would be to open both process groups and compare the metadata. In that way, you can identify if all process instances are +part of the same application or not. An easy way to do that is asking yourself: how many instances of my application do i have? + +If you have 4 instances in total and you're able to see 2 in one PG and other 2 in other PG it means that **they are part of the ** +**same application** + +Another situation could be that checking on the metadata, then you see that are **two different application** and Dynatrace is just naming +the process group in the same way + +*Same application* +- Problem: Dynatrace is creating two different process groups, what transalates in two separated services for the same application. Instead of +seeing all the traffic in one service, you will have it splitted and it will complicate your monitoring +- Solution: create a process group detection rule. Contact Dynatrace Expert + +*Different application* +- Problem: Dynatrace is just naming in the same way applications that are different. +- Solution: This case is less severe, since it can be fixed with a process group naming rule. + + +What about our example? +!(PGNaming2)[../../../../img/PGNaming2.PNG] +!(PGNaming3)[../../../../img/PGNaming3.PNG] + +Based on the feedback of the infotaiment team, each process group is a different application (microservice) and it's visible in the kubernetes container/workload +within the metadata of each Process Group. + +#### How to create a Process Group Detection Rule +1. Open the *conditional-naming-processgroup.yaml* file and create a rule that looks like this: +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName} +- tag: Infotainment +- skipDeployment: false +``` +The result of the rule will be renaming the PG to this: +``` +bon-information-prod ipa +bon-information-prod rsl +``` + +Other possible placeholders that you can use are for example: +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName/[^\\-]*$} +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesFullPodName/buffet-(.*?)-} +{ProcessGroup:DetectedName} - {HostGroup:Name/[^\\_]*$} +{ProcessGroup:KubernetesNamespace} +{ProcessGroup:CommandLineArgs/.*?\\-f\\s\\/www\\/(.*?)\\/generated\\/httpd\\.conf.*?} + +You can combine different ones. Check the (documentation)[link] for more \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vehicle-service-staging/conditional-naming-processgroup/conditional-naming-processgroup.yaml b/BMW-Dynatrace-config/CD_vehicle-service-staging/conditional-naming-processgroup/conditional-naming-processgroup.yaml new file mode 100644 index 00000000..7e129df3 --- /dev/null +++ b/BMW-Dynatrace-config/CD_vehicle-service-staging/conditional-naming-processgroup/conditional-naming-processgroup.yaml @@ -0,0 +1,8 @@ +config: +- CDvehicle-service-staging: template.json + +CDvehicle-service-staging: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: vehicle-service-staging +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_vehicle-service-staging/conditional-naming-processgroup/template.json b/BMW-Dynatrace-config/CD_vehicle-service-staging/conditional-naming-processgroup/template.json new file mode 100644 index 00000000..7c039808 --- /dev/null +++ b/BMW-Dynatrace-config/CD_vehicle-service-staging/conditional-naming-processgroup/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "type": "PROCESS_GROUP" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vehicle-service-staging/conditional-naming-service/README.md b/BMW-Dynatrace-config/CD_vehicle-service-staging/conditional-naming-service/README.md new file mode 100644 index 00000000..c34ef308 --- /dev/null +++ b/BMW-Dynatrace-config/CD_vehicle-service-staging/conditional-naming-service/README.md @@ -0,0 +1,35 @@ +### Service Naming Rules + +A typical case could be that you access to *Transaction & Services* and you find two services that are exactly the same: +*DataDownloadV1* +*DataDownloadV1* + +If you drilldown into the service and you check in the process group, you may have a PROD and a E2E for each service. + +*Note: if you see that both process group are exactly the same, please contact a Dynatrace expert to create a Process* +*Group detection rule* + +In the case the PG are PROD and E2E, then we need to create a rule that looks like this: + +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {Service:DetectedName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +- tag: Infotainment +- skipDeployment: false +``` + +The rule will get the Service Detected Name (current name) and it will extract (with a regex) the part of the kubernetes namespace after the "-", so -prod or -e2e, resulting in: +*DataDownloadV1 - prod* +*DataDownloadV1 - e2e* + +Now, services will be easy to identify. + +You can create rules based on any property/metadata. Some other placeholder's eamples: +{Service:DatabaseName} - E2E +{Service:WebServiceName} - {ProcessGroup:Kubernetes:microservice} - {ProcessGroup:Kubernetes:environment} +{Service:DetectedName} - {ProcessGroup:KubernetesContainerName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +{Service:DetectedName} - {ProcessGroup:SpringBootProfileName/[^\\-]*$} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vehicle-service-staging/conditional-naming-service/conditional-naming-service.yaml b/BMW-Dynatrace-config/CD_vehicle-service-staging/conditional-naming-service/conditional-naming-service.yaml new file mode 100644 index 00000000..7e129df3 --- /dev/null +++ b/BMW-Dynatrace-config/CD_vehicle-service-staging/conditional-naming-service/conditional-naming-service.yaml @@ -0,0 +1,8 @@ +config: +- CDvehicle-service-staging: template.json + +CDvehicle-service-staging: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: vehicle-service-staging +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_vehicle-service-staging/conditional-naming-service/template.json b/BMW-Dynatrace-config/CD_vehicle-service-staging/conditional-naming-service/template.json new file mode 100644 index 00000000..5d4fac56 --- /dev/null +++ b/BMW-Dynatrace-config/CD_vehicle-service-staging/conditional-naming-service/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "type": "SERVICE" +} \ 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 index d41c4c77..5f35e5c1 100644 --- 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 @@ -1,30 +1,4 @@ -## 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 configure custom services? -## 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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Custom+Services) page to configure your custom services. \ 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 index 92e734fa..1695924c 100644 --- a/BMW-Dynatrace-config/CD_vehicle-service-staging/synthetic-monitor/README.md +++ b/BMW-Dynatrace-config/CD_vehicle-service-staging/synthetic-monitor/README.md @@ -1,37 +1,4 @@ -# Synthetic Configuration -To calculate the Availability KPI, a synthetic must be configured. +### How to configure synthetics? -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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Synthetic+Monitors) page to configure your synthetics. \ 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 index d41c4c77..5f35e5c1 100644 --- a/BMW-Dynatrace-config/CD_vehicle-service/custom-service-java/README.md +++ b/BMW-Dynatrace-config/CD_vehicle-service/custom-service-java/README.md @@ -1,30 +1,4 @@ -## 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 configure custom services? -## 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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Custom+Services) page to configure your custom services. \ 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 index 92e734fa..1695924c 100644 --- a/BMW-Dynatrace-config/CD_vehicle-service/synthetic-monitor/README.md +++ b/BMW-Dynatrace-config/CD_vehicle-service/synthetic-monitor/README.md @@ -1,37 +1,4 @@ -# Synthetic Configuration -To calculate the Availability KPI, a synthetic must be configured. +### How to configure synthetics? -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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Synthetic+Monitors) page to configure your synthetics. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vehicle-shadow-event-processor/conditional-naming-processgroup/README.md b/BMW-Dynatrace-config/CD_vehicle-shadow-event-processor/conditional-naming-processgroup/README.md new file mode 100644 index 00000000..f94196a5 --- /dev/null +++ b/BMW-Dynatrace-config/CD_vehicle-shadow-event-processor/conditional-naming-processgroup/README.md @@ -0,0 +1,67 @@ +### Process Group Detection Rules and Naming + +#### Detection Rule or Naming? + +For the explanation, we're using a real example of the Infotainment application: + +!(PGNaming1)[../../../../img/PGNaming1.PNG] + +Before working with your dashboards and alerting profiles, an important task to do when working with Dynatrace is checking +the structure of your applications (process groups). You can do that clicking under *technologies* and filter using your +application Management Zone. + +In the picture above, there are two Process Groups called bon-information-prod. **If you see duplicated process groups like in** +**this case, you MUST follow this guideline** + +Next step would be to open both process groups and compare the metadata. In that way, you can identify if all process instances are +part of the same application or not. An easy way to do that is asking yourself: how many instances of my application do i have? + +If you have 4 instances in total and you're able to see 2 in one PG and other 2 in other PG it means that **they are part of the ** +**same application** + +Another situation could be that checking on the metadata, then you see that are **two different application** and Dynatrace is just naming +the process group in the same way + +*Same application* +- Problem: Dynatrace is creating two different process groups, what transalates in two separated services for the same application. Instead of +seeing all the traffic in one service, you will have it splitted and it will complicate your monitoring +- Solution: create a process group detection rule. Contact Dynatrace Expert + +*Different application* +- Problem: Dynatrace is just naming in the same way applications that are different. +- Solution: This case is less severe, since it can be fixed with a process group naming rule. + + +What about our example? +!(PGNaming2)[../../../../img/PGNaming2.PNG] +!(PGNaming3)[../../../../img/PGNaming3.PNG] + +Based on the feedback of the infotaiment team, each process group is a different application (microservice) and it's visible in the kubernetes container/workload +within the metadata of each Process Group. + +#### How to create a Process Group Detection Rule +1. Open the *conditional-naming-processgroup.yaml* file and create a rule that looks like this: +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName} +- tag: Infotainment +- skipDeployment: false +``` +The result of the rule will be renaming the PG to this: +``` +bon-information-prod ipa +bon-information-prod rsl +``` + +Other possible placeholders that you can use are for example: +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName/[^\\-]*$} +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesFullPodName/buffet-(.*?)-} +{ProcessGroup:DetectedName} - {HostGroup:Name/[^\\_]*$} +{ProcessGroup:KubernetesNamespace} +{ProcessGroup:CommandLineArgs/.*?\\-f\\s\\/www\\/(.*?)\\/generated\\/httpd\\.conf.*?} + +You can combine different ones. Check the (documentation)[link] for more \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vehicle-shadow-event-processor/conditional-naming-processgroup/conditional-naming-processgroup.yaml b/BMW-Dynatrace-config/CD_vehicle-shadow-event-processor/conditional-naming-processgroup/conditional-naming-processgroup.yaml new file mode 100644 index 00000000..7faa3ce5 --- /dev/null +++ b/BMW-Dynatrace-config/CD_vehicle-shadow-event-processor/conditional-naming-processgroup/conditional-naming-processgroup.yaml @@ -0,0 +1,8 @@ +config: +- CDvehicle-shadow-event-processor: template.json + +CDvehicle-shadow-event-processor: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: vehicle-shadow-event-processor +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_vehicle-shadow-event-processor/conditional-naming-processgroup/template.json b/BMW-Dynatrace-config/CD_vehicle-shadow-event-processor/conditional-naming-processgroup/template.json new file mode 100644 index 00000000..7c039808 --- /dev/null +++ b/BMW-Dynatrace-config/CD_vehicle-shadow-event-processor/conditional-naming-processgroup/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "type": "PROCESS_GROUP" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vehicle-shadow-event-processor/conditional-naming-service/README.md b/BMW-Dynatrace-config/CD_vehicle-shadow-event-processor/conditional-naming-service/README.md new file mode 100644 index 00000000..c34ef308 --- /dev/null +++ b/BMW-Dynatrace-config/CD_vehicle-shadow-event-processor/conditional-naming-service/README.md @@ -0,0 +1,35 @@ +### Service Naming Rules + +A typical case could be that you access to *Transaction & Services* and you find two services that are exactly the same: +*DataDownloadV1* +*DataDownloadV1* + +If you drilldown into the service and you check in the process group, you may have a PROD and a E2E for each service. + +*Note: if you see that both process group are exactly the same, please contact a Dynatrace expert to create a Process* +*Group detection rule* + +In the case the PG are PROD and E2E, then we need to create a rule that looks like this: + +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {Service:DetectedName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +- tag: Infotainment +- skipDeployment: false +``` + +The rule will get the Service Detected Name (current name) and it will extract (with a regex) the part of the kubernetes namespace after the "-", so -prod or -e2e, resulting in: +*DataDownloadV1 - prod* +*DataDownloadV1 - e2e* + +Now, services will be easy to identify. + +You can create rules based on any property/metadata. Some other placeholder's eamples: +{Service:DatabaseName} - E2E +{Service:WebServiceName} - {ProcessGroup:Kubernetes:microservice} - {ProcessGroup:Kubernetes:environment} +{Service:DetectedName} - {ProcessGroup:KubernetesContainerName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +{Service:DetectedName} - {ProcessGroup:SpringBootProfileName/[^\\-]*$} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vehicle-shadow-event-processor/conditional-naming-service/conditional-naming-service.yaml b/BMW-Dynatrace-config/CD_vehicle-shadow-event-processor/conditional-naming-service/conditional-naming-service.yaml new file mode 100644 index 00000000..7faa3ce5 --- /dev/null +++ b/BMW-Dynatrace-config/CD_vehicle-shadow-event-processor/conditional-naming-service/conditional-naming-service.yaml @@ -0,0 +1,8 @@ +config: +- CDvehicle-shadow-event-processor: template.json + +CDvehicle-shadow-event-processor: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: vehicle-shadow-event-processor +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_vehicle-shadow-event-processor/conditional-naming-service/template.json b/BMW-Dynatrace-config/CD_vehicle-shadow-event-processor/conditional-naming-service/template.json new file mode 100644 index 00000000..5d4fac56 --- /dev/null +++ b/BMW-Dynatrace-config/CD_vehicle-shadow-event-processor/conditional-naming-service/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "type": "SERVICE" +} \ 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 index d41c4c77..5f35e5c1 100644 --- 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 @@ -1,30 +1,4 @@ -## 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 configure custom services? -## 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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Custom+Services) page to configure your custom services. \ 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 index 92e734fa..1695924c 100644 --- 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 @@ -1,37 +1,4 @@ -# Synthetic Configuration -To calculate the Availability KPI, a synthetic must be configured. +### How to configure synthetics? -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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Synthetic+Monitors) page to configure your synthetics. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vehicle-status-proxy-service/conditional-naming-processgroup/README.md b/BMW-Dynatrace-config/CD_vehicle-status-proxy-service/conditional-naming-processgroup/README.md new file mode 100644 index 00000000..f94196a5 --- /dev/null +++ b/BMW-Dynatrace-config/CD_vehicle-status-proxy-service/conditional-naming-processgroup/README.md @@ -0,0 +1,67 @@ +### Process Group Detection Rules and Naming + +#### Detection Rule or Naming? + +For the explanation, we're using a real example of the Infotainment application: + +!(PGNaming1)[../../../../img/PGNaming1.PNG] + +Before working with your dashboards and alerting profiles, an important task to do when working with Dynatrace is checking +the structure of your applications (process groups). You can do that clicking under *technologies* and filter using your +application Management Zone. + +In the picture above, there are two Process Groups called bon-information-prod. **If you see duplicated process groups like in** +**this case, you MUST follow this guideline** + +Next step would be to open both process groups and compare the metadata. In that way, you can identify if all process instances are +part of the same application or not. An easy way to do that is asking yourself: how many instances of my application do i have? + +If you have 4 instances in total and you're able to see 2 in one PG and other 2 in other PG it means that **they are part of the ** +**same application** + +Another situation could be that checking on the metadata, then you see that are **two different application** and Dynatrace is just naming +the process group in the same way + +*Same application* +- Problem: Dynatrace is creating two different process groups, what transalates in two separated services for the same application. Instead of +seeing all the traffic in one service, you will have it splitted and it will complicate your monitoring +- Solution: create a process group detection rule. Contact Dynatrace Expert + +*Different application* +- Problem: Dynatrace is just naming in the same way applications that are different. +- Solution: This case is less severe, since it can be fixed with a process group naming rule. + + +What about our example? +!(PGNaming2)[../../../../img/PGNaming2.PNG] +!(PGNaming3)[../../../../img/PGNaming3.PNG] + +Based on the feedback of the infotaiment team, each process group is a different application (microservice) and it's visible in the kubernetes container/workload +within the metadata of each Process Group. + +#### How to create a Process Group Detection Rule +1. Open the *conditional-naming-processgroup.yaml* file and create a rule that looks like this: +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName} +- tag: Infotainment +- skipDeployment: false +``` +The result of the rule will be renaming the PG to this: +``` +bon-information-prod ipa +bon-information-prod rsl +``` + +Other possible placeholders that you can use are for example: +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName/[^\\-]*$} +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesFullPodName/buffet-(.*?)-} +{ProcessGroup:DetectedName} - {HostGroup:Name/[^\\_]*$} +{ProcessGroup:KubernetesNamespace} +{ProcessGroup:CommandLineArgs/.*?\\-f\\s\\/www\\/(.*?)\\/generated\\/httpd\\.conf.*?} + +You can combine different ones. Check the (documentation)[link] for more \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vehicle-status-proxy-service/conditional-naming-processgroup/conditional-naming-processgroup.yaml b/BMW-Dynatrace-config/CD_vehicle-status-proxy-service/conditional-naming-processgroup/conditional-naming-processgroup.yaml new file mode 100644 index 00000000..ded74860 --- /dev/null +++ b/BMW-Dynatrace-config/CD_vehicle-status-proxy-service/conditional-naming-processgroup/conditional-naming-processgroup.yaml @@ -0,0 +1,8 @@ +config: +- CDvehicle-status-proxy-service: template.json + +CDvehicle-status-proxy-service: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: vehicle-status-proxy-service +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_vehicle-status-proxy-service/conditional-naming-processgroup/template.json b/BMW-Dynatrace-config/CD_vehicle-status-proxy-service/conditional-naming-processgroup/template.json new file mode 100644 index 00000000..7c039808 --- /dev/null +++ b/BMW-Dynatrace-config/CD_vehicle-status-proxy-service/conditional-naming-processgroup/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "type": "PROCESS_GROUP" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vehicle-status-proxy-service/conditional-naming-service/README.md b/BMW-Dynatrace-config/CD_vehicle-status-proxy-service/conditional-naming-service/README.md new file mode 100644 index 00000000..c34ef308 --- /dev/null +++ b/BMW-Dynatrace-config/CD_vehicle-status-proxy-service/conditional-naming-service/README.md @@ -0,0 +1,35 @@ +### Service Naming Rules + +A typical case could be that you access to *Transaction & Services* and you find two services that are exactly the same: +*DataDownloadV1* +*DataDownloadV1* + +If you drilldown into the service and you check in the process group, you may have a PROD and a E2E for each service. + +*Note: if you see that both process group are exactly the same, please contact a Dynatrace expert to create a Process* +*Group detection rule* + +In the case the PG are PROD and E2E, then we need to create a rule that looks like this: + +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {Service:DetectedName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +- tag: Infotainment +- skipDeployment: false +``` + +The rule will get the Service Detected Name (current name) and it will extract (with a regex) the part of the kubernetes namespace after the "-", so -prod or -e2e, resulting in: +*DataDownloadV1 - prod* +*DataDownloadV1 - e2e* + +Now, services will be easy to identify. + +You can create rules based on any property/metadata. Some other placeholder's eamples: +{Service:DatabaseName} - E2E +{Service:WebServiceName} - {ProcessGroup:Kubernetes:microservice} - {ProcessGroup:Kubernetes:environment} +{Service:DetectedName} - {ProcessGroup:KubernetesContainerName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +{Service:DetectedName} - {ProcessGroup:SpringBootProfileName/[^\\-]*$} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vehicle-status-proxy-service/conditional-naming-service/conditional-naming-service.yaml b/BMW-Dynatrace-config/CD_vehicle-status-proxy-service/conditional-naming-service/conditional-naming-service.yaml new file mode 100644 index 00000000..ded74860 --- /dev/null +++ b/BMW-Dynatrace-config/CD_vehicle-status-proxy-service/conditional-naming-service/conditional-naming-service.yaml @@ -0,0 +1,8 @@ +config: +- CDvehicle-status-proxy-service: template.json + +CDvehicle-status-proxy-service: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: vehicle-status-proxy-service +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_vehicle-status-proxy-service/conditional-naming-service/template.json b/BMW-Dynatrace-config/CD_vehicle-status-proxy-service/conditional-naming-service/template.json new file mode 100644 index 00000000..5d4fac56 --- /dev/null +++ b/BMW-Dynatrace-config/CD_vehicle-status-proxy-service/conditional-naming-service/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "type": "SERVICE" +} \ 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 index d41c4c77..5f35e5c1 100644 --- 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 @@ -1,30 +1,4 @@ -## 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 configure custom services? -## 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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Custom+Services) page to configure your custom services. \ 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 index 92e734fa..1695924c 100644 --- 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 @@ -1,37 +1,4 @@ -# Synthetic Configuration -To calculate the Availability KPI, a synthetic must be configured. +### How to configure synthetics? -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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Synthetic+Monitors) page to configure your synthetics. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vehicle-user-relationship-service/conditional-naming-processgroup/README.md b/BMW-Dynatrace-config/CD_vehicle-user-relationship-service/conditional-naming-processgroup/README.md new file mode 100644 index 00000000..f94196a5 --- /dev/null +++ b/BMW-Dynatrace-config/CD_vehicle-user-relationship-service/conditional-naming-processgroup/README.md @@ -0,0 +1,67 @@ +### Process Group Detection Rules and Naming + +#### Detection Rule or Naming? + +For the explanation, we're using a real example of the Infotainment application: + +!(PGNaming1)[../../../../img/PGNaming1.PNG] + +Before working with your dashboards and alerting profiles, an important task to do when working with Dynatrace is checking +the structure of your applications (process groups). You can do that clicking under *technologies* and filter using your +application Management Zone. + +In the picture above, there are two Process Groups called bon-information-prod. **If you see duplicated process groups like in** +**this case, you MUST follow this guideline** + +Next step would be to open both process groups and compare the metadata. In that way, you can identify if all process instances are +part of the same application or not. An easy way to do that is asking yourself: how many instances of my application do i have? + +If you have 4 instances in total and you're able to see 2 in one PG and other 2 in other PG it means that **they are part of the ** +**same application** + +Another situation could be that checking on the metadata, then you see that are **two different application** and Dynatrace is just naming +the process group in the same way + +*Same application* +- Problem: Dynatrace is creating two different process groups, what transalates in two separated services for the same application. Instead of +seeing all the traffic in one service, you will have it splitted and it will complicate your monitoring +- Solution: create a process group detection rule. Contact Dynatrace Expert + +*Different application* +- Problem: Dynatrace is just naming in the same way applications that are different. +- Solution: This case is less severe, since it can be fixed with a process group naming rule. + + +What about our example? +!(PGNaming2)[../../../../img/PGNaming2.PNG] +!(PGNaming3)[../../../../img/PGNaming3.PNG] + +Based on the feedback of the infotaiment team, each process group is a different application (microservice) and it's visible in the kubernetes container/workload +within the metadata of each Process Group. + +#### How to create a Process Group Detection Rule +1. Open the *conditional-naming-processgroup.yaml* file and create a rule that looks like this: +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName} +- tag: Infotainment +- skipDeployment: false +``` +The result of the rule will be renaming the PG to this: +``` +bon-information-prod ipa +bon-information-prod rsl +``` + +Other possible placeholders that you can use are for example: +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName/[^\\-]*$} +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesFullPodName/buffet-(.*?)-} +{ProcessGroup:DetectedName} - {HostGroup:Name/[^\\_]*$} +{ProcessGroup:KubernetesNamespace} +{ProcessGroup:CommandLineArgs/.*?\\-f\\s\\/www\\/(.*?)\\/generated\\/httpd\\.conf.*?} + +You can combine different ones. Check the (documentation)[link] for more \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vehicle-user-relationship-service/conditional-naming-processgroup/conditional-naming-processgroup.yaml b/BMW-Dynatrace-config/CD_vehicle-user-relationship-service/conditional-naming-processgroup/conditional-naming-processgroup.yaml new file mode 100644 index 00000000..005ef857 --- /dev/null +++ b/BMW-Dynatrace-config/CD_vehicle-user-relationship-service/conditional-naming-processgroup/conditional-naming-processgroup.yaml @@ -0,0 +1,8 @@ +config: +- CDvehicle-user-relationship-service: template.json + +CDvehicle-user-relationship-service: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: vehicle-user-relationship-service +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_vehicle-user-relationship-service/conditional-naming-processgroup/template.json b/BMW-Dynatrace-config/CD_vehicle-user-relationship-service/conditional-naming-processgroup/template.json new file mode 100644 index 00000000..7c039808 --- /dev/null +++ b/BMW-Dynatrace-config/CD_vehicle-user-relationship-service/conditional-naming-processgroup/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "type": "PROCESS_GROUP" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vehicle-user-relationship-service/conditional-naming-service/README.md b/BMW-Dynatrace-config/CD_vehicle-user-relationship-service/conditional-naming-service/README.md new file mode 100644 index 00000000..c34ef308 --- /dev/null +++ b/BMW-Dynatrace-config/CD_vehicle-user-relationship-service/conditional-naming-service/README.md @@ -0,0 +1,35 @@ +### Service Naming Rules + +A typical case could be that you access to *Transaction & Services* and you find two services that are exactly the same: +*DataDownloadV1* +*DataDownloadV1* + +If you drilldown into the service and you check in the process group, you may have a PROD and a E2E for each service. + +*Note: if you see that both process group are exactly the same, please contact a Dynatrace expert to create a Process* +*Group detection rule* + +In the case the PG are PROD and E2E, then we need to create a rule that looks like this: + +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {Service:DetectedName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +- tag: Infotainment +- skipDeployment: false +``` + +The rule will get the Service Detected Name (current name) and it will extract (with a regex) the part of the kubernetes namespace after the "-", so -prod or -e2e, resulting in: +*DataDownloadV1 - prod* +*DataDownloadV1 - e2e* + +Now, services will be easy to identify. + +You can create rules based on any property/metadata. Some other placeholder's eamples: +{Service:DatabaseName} - E2E +{Service:WebServiceName} - {ProcessGroup:Kubernetes:microservice} - {ProcessGroup:Kubernetes:environment} +{Service:DetectedName} - {ProcessGroup:KubernetesContainerName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +{Service:DetectedName} - {ProcessGroup:SpringBootProfileName/[^\\-]*$} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vehicle-user-relationship-service/conditional-naming-service/conditional-naming-service.yaml b/BMW-Dynatrace-config/CD_vehicle-user-relationship-service/conditional-naming-service/conditional-naming-service.yaml new file mode 100644 index 00000000..005ef857 --- /dev/null +++ b/BMW-Dynatrace-config/CD_vehicle-user-relationship-service/conditional-naming-service/conditional-naming-service.yaml @@ -0,0 +1,8 @@ +config: +- CDvehicle-user-relationship-service: template.json + +CDvehicle-user-relationship-service: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: vehicle-user-relationship-service +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_vehicle-user-relationship-service/conditional-naming-service/template.json b/BMW-Dynatrace-config/CD_vehicle-user-relationship-service/conditional-naming-service/template.json new file mode 100644 index 00000000..5d4fac56 --- /dev/null +++ b/BMW-Dynatrace-config/CD_vehicle-user-relationship-service/conditional-naming-service/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "type": "SERVICE" +} \ 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 index d41c4c77..5f35e5c1 100644 --- 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 @@ -1,30 +1,4 @@ -## 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 configure custom services? -## 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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Custom+Services) page to configure your custom services. \ 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 index 92e734fa..1695924c 100644 --- 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 @@ -1,37 +1,4 @@ -# Synthetic Configuration -To calculate the Availability KPI, a synthetic must be configured. +### How to configure synthetics? -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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Synthetic+Monitors) page to configure your synthetics. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vin-list-generator-service/conditional-naming-processgroup/README.md b/BMW-Dynatrace-config/CD_vin-list-generator-service/conditional-naming-processgroup/README.md new file mode 100644 index 00000000..f94196a5 --- /dev/null +++ b/BMW-Dynatrace-config/CD_vin-list-generator-service/conditional-naming-processgroup/README.md @@ -0,0 +1,67 @@ +### Process Group Detection Rules and Naming + +#### Detection Rule or Naming? + +For the explanation, we're using a real example of the Infotainment application: + +!(PGNaming1)[../../../../img/PGNaming1.PNG] + +Before working with your dashboards and alerting profiles, an important task to do when working with Dynatrace is checking +the structure of your applications (process groups). You can do that clicking under *technologies* and filter using your +application Management Zone. + +In the picture above, there are two Process Groups called bon-information-prod. **If you see duplicated process groups like in** +**this case, you MUST follow this guideline** + +Next step would be to open both process groups and compare the metadata. In that way, you can identify if all process instances are +part of the same application or not. An easy way to do that is asking yourself: how many instances of my application do i have? + +If you have 4 instances in total and you're able to see 2 in one PG and other 2 in other PG it means that **they are part of the ** +**same application** + +Another situation could be that checking on the metadata, then you see that are **two different application** and Dynatrace is just naming +the process group in the same way + +*Same application* +- Problem: Dynatrace is creating two different process groups, what transalates in two separated services for the same application. Instead of +seeing all the traffic in one service, you will have it splitted and it will complicate your monitoring +- Solution: create a process group detection rule. Contact Dynatrace Expert + +*Different application* +- Problem: Dynatrace is just naming in the same way applications that are different. +- Solution: This case is less severe, since it can be fixed with a process group naming rule. + + +What about our example? +!(PGNaming2)[../../../../img/PGNaming2.PNG] +!(PGNaming3)[../../../../img/PGNaming3.PNG] + +Based on the feedback of the infotaiment team, each process group is a different application (microservice) and it's visible in the kubernetes container/workload +within the metadata of each Process Group. + +#### How to create a Process Group Detection Rule +1. Open the *conditional-naming-processgroup.yaml* file and create a rule that looks like this: +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName} +- tag: Infotainment +- skipDeployment: false +``` +The result of the rule will be renaming the PG to this: +``` +bon-information-prod ipa +bon-information-prod rsl +``` + +Other possible placeholders that you can use are for example: +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName/[^\\-]*$} +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesFullPodName/buffet-(.*?)-} +{ProcessGroup:DetectedName} - {HostGroup:Name/[^\\_]*$} +{ProcessGroup:KubernetesNamespace} +{ProcessGroup:CommandLineArgs/.*?\\-f\\s\\/www\\/(.*?)\\/generated\\/httpd\\.conf.*?} + +You can combine different ones. Check the (documentation)[link] for more \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vin-list-generator-service/conditional-naming-processgroup/conditional-naming-processgroup.yaml b/BMW-Dynatrace-config/CD_vin-list-generator-service/conditional-naming-processgroup/conditional-naming-processgroup.yaml new file mode 100644 index 00000000..c0d0a51b --- /dev/null +++ b/BMW-Dynatrace-config/CD_vin-list-generator-service/conditional-naming-processgroup/conditional-naming-processgroup.yaml @@ -0,0 +1,8 @@ +config: +- CDvin-list-generator-service: template.json + +CDvin-list-generator-service: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: vin-list-generator-service +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_vin-list-generator-service/conditional-naming-processgroup/template.json b/BMW-Dynatrace-config/CD_vin-list-generator-service/conditional-naming-processgroup/template.json new file mode 100644 index 00000000..7c039808 --- /dev/null +++ b/BMW-Dynatrace-config/CD_vin-list-generator-service/conditional-naming-processgroup/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "type": "PROCESS_GROUP" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vin-list-generator-service/conditional-naming-service/README.md b/BMW-Dynatrace-config/CD_vin-list-generator-service/conditional-naming-service/README.md new file mode 100644 index 00000000..c34ef308 --- /dev/null +++ b/BMW-Dynatrace-config/CD_vin-list-generator-service/conditional-naming-service/README.md @@ -0,0 +1,35 @@ +### Service Naming Rules + +A typical case could be that you access to *Transaction & Services* and you find two services that are exactly the same: +*DataDownloadV1* +*DataDownloadV1* + +If you drilldown into the service and you check in the process group, you may have a PROD and a E2E for each service. + +*Note: if you see that both process group are exactly the same, please contact a Dynatrace expert to create a Process* +*Group detection rule* + +In the case the PG are PROD and E2E, then we need to create a rule that looks like this: + +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {Service:DetectedName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +- tag: Infotainment +- skipDeployment: false +``` + +The rule will get the Service Detected Name (current name) and it will extract (with a regex) the part of the kubernetes namespace after the "-", so -prod or -e2e, resulting in: +*DataDownloadV1 - prod* +*DataDownloadV1 - e2e* + +Now, services will be easy to identify. + +You can create rules based on any property/metadata. Some other placeholder's eamples: +{Service:DatabaseName} - E2E +{Service:WebServiceName} - {ProcessGroup:Kubernetes:microservice} - {ProcessGroup:Kubernetes:environment} +{Service:DetectedName} - {ProcessGroup:KubernetesContainerName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +{Service:DetectedName} - {ProcessGroup:SpringBootProfileName/[^\\-]*$} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vin-list-generator-service/conditional-naming-service/conditional-naming-service.yaml b/BMW-Dynatrace-config/CD_vin-list-generator-service/conditional-naming-service/conditional-naming-service.yaml new file mode 100644 index 00000000..c0d0a51b --- /dev/null +++ b/BMW-Dynatrace-config/CD_vin-list-generator-service/conditional-naming-service/conditional-naming-service.yaml @@ -0,0 +1,8 @@ +config: +- CDvin-list-generator-service: template.json + +CDvin-list-generator-service: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: vin-list-generator-service +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_vin-list-generator-service/conditional-naming-service/template.json b/BMW-Dynatrace-config/CD_vin-list-generator-service/conditional-naming-service/template.json new file mode 100644 index 00000000..5d4fac56 --- /dev/null +++ b/BMW-Dynatrace-config/CD_vin-list-generator-service/conditional-naming-service/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "type": "SERVICE" +} \ 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 index d41c4c77..5f35e5c1 100644 --- 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 @@ -1,30 +1,4 @@ -## 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 configure custom services? -## 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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Custom+Services) page to configure your custom services. \ 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 index 92e734fa..1695924c 100644 --- 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 @@ -1,37 +1,4 @@ -# Synthetic Configuration -To calculate the Availability KPI, a synthetic must be configured. +### How to configure synthetics? -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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Synthetic+Monitors) page to configure your synthetics. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vps-admin/conditional-naming-processgroup/README.md b/BMW-Dynatrace-config/CD_vps-admin/conditional-naming-processgroup/README.md new file mode 100644 index 00000000..f94196a5 --- /dev/null +++ b/BMW-Dynatrace-config/CD_vps-admin/conditional-naming-processgroup/README.md @@ -0,0 +1,67 @@ +### Process Group Detection Rules and Naming + +#### Detection Rule or Naming? + +For the explanation, we're using a real example of the Infotainment application: + +!(PGNaming1)[../../../../img/PGNaming1.PNG] + +Before working with your dashboards and alerting profiles, an important task to do when working with Dynatrace is checking +the structure of your applications (process groups). You can do that clicking under *technologies* and filter using your +application Management Zone. + +In the picture above, there are two Process Groups called bon-information-prod. **If you see duplicated process groups like in** +**this case, you MUST follow this guideline** + +Next step would be to open both process groups and compare the metadata. In that way, you can identify if all process instances are +part of the same application or not. An easy way to do that is asking yourself: how many instances of my application do i have? + +If you have 4 instances in total and you're able to see 2 in one PG and other 2 in other PG it means that **they are part of the ** +**same application** + +Another situation could be that checking on the metadata, then you see that are **two different application** and Dynatrace is just naming +the process group in the same way + +*Same application* +- Problem: Dynatrace is creating two different process groups, what transalates in two separated services for the same application. Instead of +seeing all the traffic in one service, you will have it splitted and it will complicate your monitoring +- Solution: create a process group detection rule. Contact Dynatrace Expert + +*Different application* +- Problem: Dynatrace is just naming in the same way applications that are different. +- Solution: This case is less severe, since it can be fixed with a process group naming rule. + + +What about our example? +!(PGNaming2)[../../../../img/PGNaming2.PNG] +!(PGNaming3)[../../../../img/PGNaming3.PNG] + +Based on the feedback of the infotaiment team, each process group is a different application (microservice) and it's visible in the kubernetes container/workload +within the metadata of each Process Group. + +#### How to create a Process Group Detection Rule +1. Open the *conditional-naming-processgroup.yaml* file and create a rule that looks like this: +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName} +- tag: Infotainment +- skipDeployment: false +``` +The result of the rule will be renaming the PG to this: +``` +bon-information-prod ipa +bon-information-prod rsl +``` + +Other possible placeholders that you can use are for example: +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName/[^\\-]*$} +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesFullPodName/buffet-(.*?)-} +{ProcessGroup:DetectedName} - {HostGroup:Name/[^\\_]*$} +{ProcessGroup:KubernetesNamespace} +{ProcessGroup:CommandLineArgs/.*?\\-f\\s\\/www\\/(.*?)\\/generated\\/httpd\\.conf.*?} + +You can combine different ones. Check the (documentation)[link] for more \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vps-admin/conditional-naming-processgroup/conditional-naming-processgroup.yaml b/BMW-Dynatrace-config/CD_vps-admin/conditional-naming-processgroup/conditional-naming-processgroup.yaml new file mode 100644 index 00000000..6329c3ba --- /dev/null +++ b/BMW-Dynatrace-config/CD_vps-admin/conditional-naming-processgroup/conditional-naming-processgroup.yaml @@ -0,0 +1,8 @@ +config: +- CDvps-admin: template.json + +CDvps-admin: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: vps-admin +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_vps-admin/conditional-naming-processgroup/template.json b/BMW-Dynatrace-config/CD_vps-admin/conditional-naming-processgroup/template.json new file mode 100644 index 00000000..7c039808 --- /dev/null +++ b/BMW-Dynatrace-config/CD_vps-admin/conditional-naming-processgroup/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "type": "PROCESS_GROUP" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vps-admin/conditional-naming-service/README.md b/BMW-Dynatrace-config/CD_vps-admin/conditional-naming-service/README.md new file mode 100644 index 00000000..c34ef308 --- /dev/null +++ b/BMW-Dynatrace-config/CD_vps-admin/conditional-naming-service/README.md @@ -0,0 +1,35 @@ +### Service Naming Rules + +A typical case could be that you access to *Transaction & Services* and you find two services that are exactly the same: +*DataDownloadV1* +*DataDownloadV1* + +If you drilldown into the service and you check in the process group, you may have a PROD and a E2E for each service. + +*Note: if you see that both process group are exactly the same, please contact a Dynatrace expert to create a Process* +*Group detection rule* + +In the case the PG are PROD and E2E, then we need to create a rule that looks like this: + +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {Service:DetectedName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +- tag: Infotainment +- skipDeployment: false +``` + +The rule will get the Service Detected Name (current name) and it will extract (with a regex) the part of the kubernetes namespace after the "-", so -prod or -e2e, resulting in: +*DataDownloadV1 - prod* +*DataDownloadV1 - e2e* + +Now, services will be easy to identify. + +You can create rules based on any property/metadata. Some other placeholder's eamples: +{Service:DatabaseName} - E2E +{Service:WebServiceName} - {ProcessGroup:Kubernetes:microservice} - {ProcessGroup:Kubernetes:environment} +{Service:DetectedName} - {ProcessGroup:KubernetesContainerName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +{Service:DetectedName} - {ProcessGroup:SpringBootProfileName/[^\\-]*$} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vps-admin/conditional-naming-service/conditional-naming-service.yaml b/BMW-Dynatrace-config/CD_vps-admin/conditional-naming-service/conditional-naming-service.yaml new file mode 100644 index 00000000..6329c3ba --- /dev/null +++ b/BMW-Dynatrace-config/CD_vps-admin/conditional-naming-service/conditional-naming-service.yaml @@ -0,0 +1,8 @@ +config: +- CDvps-admin: template.json + +CDvps-admin: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: vps-admin +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_vps-admin/conditional-naming-service/template.json b/BMW-Dynatrace-config/CD_vps-admin/conditional-naming-service/template.json new file mode 100644 index 00000000..5d4fac56 --- /dev/null +++ b/BMW-Dynatrace-config/CD_vps-admin/conditional-naming-service/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "type": "SERVICE" +} \ 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 index d41c4c77..5f35e5c1 100644 --- a/BMW-Dynatrace-config/CD_vps-admin/custom-service-java/README.md +++ b/BMW-Dynatrace-config/CD_vps-admin/custom-service-java/README.md @@ -1,30 +1,4 @@ -## 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 configure custom services? -## 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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Custom+Services) page to configure your custom services. \ 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 index 92e734fa..1695924c 100644 --- a/BMW-Dynatrace-config/CD_vps-admin/synthetic-monitor/README.md +++ b/BMW-Dynatrace-config/CD_vps-admin/synthetic-monitor/README.md @@ -1,37 +1,4 @@ -# Synthetic Configuration -To calculate the Availability KPI, a synthetic must be configured. +### How to configure synthetics? -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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Synthetic+Monitors) page to configure your synthetics. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vps-archive/conditional-naming-processgroup/README.md b/BMW-Dynatrace-config/CD_vps-archive/conditional-naming-processgroup/README.md new file mode 100644 index 00000000..f94196a5 --- /dev/null +++ b/BMW-Dynatrace-config/CD_vps-archive/conditional-naming-processgroup/README.md @@ -0,0 +1,67 @@ +### Process Group Detection Rules and Naming + +#### Detection Rule or Naming? + +For the explanation, we're using a real example of the Infotainment application: + +!(PGNaming1)[../../../../img/PGNaming1.PNG] + +Before working with your dashboards and alerting profiles, an important task to do when working with Dynatrace is checking +the structure of your applications (process groups). You can do that clicking under *technologies* and filter using your +application Management Zone. + +In the picture above, there are two Process Groups called bon-information-prod. **If you see duplicated process groups like in** +**this case, you MUST follow this guideline** + +Next step would be to open both process groups and compare the metadata. In that way, you can identify if all process instances are +part of the same application or not. An easy way to do that is asking yourself: how many instances of my application do i have? + +If you have 4 instances in total and you're able to see 2 in one PG and other 2 in other PG it means that **they are part of the ** +**same application** + +Another situation could be that checking on the metadata, then you see that are **two different application** and Dynatrace is just naming +the process group in the same way + +*Same application* +- Problem: Dynatrace is creating two different process groups, what transalates in two separated services for the same application. Instead of +seeing all the traffic in one service, you will have it splitted and it will complicate your monitoring +- Solution: create a process group detection rule. Contact Dynatrace Expert + +*Different application* +- Problem: Dynatrace is just naming in the same way applications that are different. +- Solution: This case is less severe, since it can be fixed with a process group naming rule. + + +What about our example? +!(PGNaming2)[../../../../img/PGNaming2.PNG] +!(PGNaming3)[../../../../img/PGNaming3.PNG] + +Based on the feedback of the infotaiment team, each process group is a different application (microservice) and it's visible in the kubernetes container/workload +within the metadata of each Process Group. + +#### How to create a Process Group Detection Rule +1. Open the *conditional-naming-processgroup.yaml* file and create a rule that looks like this: +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName} +- tag: Infotainment +- skipDeployment: false +``` +The result of the rule will be renaming the PG to this: +``` +bon-information-prod ipa +bon-information-prod rsl +``` + +Other possible placeholders that you can use are for example: +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName/[^\\-]*$} +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesFullPodName/buffet-(.*?)-} +{ProcessGroup:DetectedName} - {HostGroup:Name/[^\\_]*$} +{ProcessGroup:KubernetesNamespace} +{ProcessGroup:CommandLineArgs/.*?\\-f\\s\\/www\\/(.*?)\\/generated\\/httpd\\.conf.*?} + +You can combine different ones. Check the (documentation)[link] for more \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vps-archive/conditional-naming-processgroup/conditional-naming-processgroup.yaml b/BMW-Dynatrace-config/CD_vps-archive/conditional-naming-processgroup/conditional-naming-processgroup.yaml new file mode 100644 index 00000000..c34b8d74 --- /dev/null +++ b/BMW-Dynatrace-config/CD_vps-archive/conditional-naming-processgroup/conditional-naming-processgroup.yaml @@ -0,0 +1,8 @@ +config: +- CDvps-archive: template.json + +CDvps-archive: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: vps-archive +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_vps-archive/conditional-naming-processgroup/template.json b/BMW-Dynatrace-config/CD_vps-archive/conditional-naming-processgroup/template.json new file mode 100644 index 00000000..7c039808 --- /dev/null +++ b/BMW-Dynatrace-config/CD_vps-archive/conditional-naming-processgroup/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "type": "PROCESS_GROUP" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vps-archive/conditional-naming-service/README.md b/BMW-Dynatrace-config/CD_vps-archive/conditional-naming-service/README.md new file mode 100644 index 00000000..c34ef308 --- /dev/null +++ b/BMW-Dynatrace-config/CD_vps-archive/conditional-naming-service/README.md @@ -0,0 +1,35 @@ +### Service Naming Rules + +A typical case could be that you access to *Transaction & Services* and you find two services that are exactly the same: +*DataDownloadV1* +*DataDownloadV1* + +If you drilldown into the service and you check in the process group, you may have a PROD and a E2E for each service. + +*Note: if you see that both process group are exactly the same, please contact a Dynatrace expert to create a Process* +*Group detection rule* + +In the case the PG are PROD and E2E, then we need to create a rule that looks like this: + +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {Service:DetectedName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +- tag: Infotainment +- skipDeployment: false +``` + +The rule will get the Service Detected Name (current name) and it will extract (with a regex) the part of the kubernetes namespace after the "-", so -prod or -e2e, resulting in: +*DataDownloadV1 - prod* +*DataDownloadV1 - e2e* + +Now, services will be easy to identify. + +You can create rules based on any property/metadata. Some other placeholder's eamples: +{Service:DatabaseName} - E2E +{Service:WebServiceName} - {ProcessGroup:Kubernetes:microservice} - {ProcessGroup:Kubernetes:environment} +{Service:DetectedName} - {ProcessGroup:KubernetesContainerName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +{Service:DetectedName} - {ProcessGroup:SpringBootProfileName/[^\\-]*$} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vps-archive/conditional-naming-service/conditional-naming-service.yaml b/BMW-Dynatrace-config/CD_vps-archive/conditional-naming-service/conditional-naming-service.yaml new file mode 100644 index 00000000..c34b8d74 --- /dev/null +++ b/BMW-Dynatrace-config/CD_vps-archive/conditional-naming-service/conditional-naming-service.yaml @@ -0,0 +1,8 @@ +config: +- CDvps-archive: template.json + +CDvps-archive: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: vps-archive +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_vps-archive/conditional-naming-service/template.json b/BMW-Dynatrace-config/CD_vps-archive/conditional-naming-service/template.json new file mode 100644 index 00000000..5d4fac56 --- /dev/null +++ b/BMW-Dynatrace-config/CD_vps-archive/conditional-naming-service/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "type": "SERVICE" +} \ 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 index d41c4c77..5f35e5c1 100644 --- a/BMW-Dynatrace-config/CD_vps-archive/custom-service-java/README.md +++ b/BMW-Dynatrace-config/CD_vps-archive/custom-service-java/README.md @@ -1,30 +1,4 @@ -## 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 configure custom services? -## 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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Custom+Services) page to configure your custom services. \ 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 index 92e734fa..1695924c 100644 --- a/BMW-Dynatrace-config/CD_vps-archive/synthetic-monitor/README.md +++ b/BMW-Dynatrace-config/CD_vps-archive/synthetic-monitor/README.md @@ -1,37 +1,4 @@ -# Synthetic Configuration -To calculate the Availability KPI, a synthetic must be configured. +### How to configure synthetics? -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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Synthetic+Monitors) page to configure your synthetics. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vps-monitor/conditional-naming-processgroup/README.md b/BMW-Dynatrace-config/CD_vps-monitor/conditional-naming-processgroup/README.md new file mode 100644 index 00000000..f94196a5 --- /dev/null +++ b/BMW-Dynatrace-config/CD_vps-monitor/conditional-naming-processgroup/README.md @@ -0,0 +1,67 @@ +### Process Group Detection Rules and Naming + +#### Detection Rule or Naming? + +For the explanation, we're using a real example of the Infotainment application: + +!(PGNaming1)[../../../../img/PGNaming1.PNG] + +Before working with your dashboards and alerting profiles, an important task to do when working with Dynatrace is checking +the structure of your applications (process groups). You can do that clicking under *technologies* and filter using your +application Management Zone. + +In the picture above, there are two Process Groups called bon-information-prod. **If you see duplicated process groups like in** +**this case, you MUST follow this guideline** + +Next step would be to open both process groups and compare the metadata. In that way, you can identify if all process instances are +part of the same application or not. An easy way to do that is asking yourself: how many instances of my application do i have? + +If you have 4 instances in total and you're able to see 2 in one PG and other 2 in other PG it means that **they are part of the ** +**same application** + +Another situation could be that checking on the metadata, then you see that are **two different application** and Dynatrace is just naming +the process group in the same way + +*Same application* +- Problem: Dynatrace is creating two different process groups, what transalates in two separated services for the same application. Instead of +seeing all the traffic in one service, you will have it splitted and it will complicate your monitoring +- Solution: create a process group detection rule. Contact Dynatrace Expert + +*Different application* +- Problem: Dynatrace is just naming in the same way applications that are different. +- Solution: This case is less severe, since it can be fixed with a process group naming rule. + + +What about our example? +!(PGNaming2)[../../../../img/PGNaming2.PNG] +!(PGNaming3)[../../../../img/PGNaming3.PNG] + +Based on the feedback of the infotaiment team, each process group is a different application (microservice) and it's visible in the kubernetes container/workload +within the metadata of each Process Group. + +#### How to create a Process Group Detection Rule +1. Open the *conditional-naming-processgroup.yaml* file and create a rule that looks like this: +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName} +- tag: Infotainment +- skipDeployment: false +``` +The result of the rule will be renaming the PG to this: +``` +bon-information-prod ipa +bon-information-prod rsl +``` + +Other possible placeholders that you can use are for example: +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName/[^\\-]*$} +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesFullPodName/buffet-(.*?)-} +{ProcessGroup:DetectedName} - {HostGroup:Name/[^\\_]*$} +{ProcessGroup:KubernetesNamespace} +{ProcessGroup:CommandLineArgs/.*?\\-f\\s\\/www\\/(.*?)\\/generated\\/httpd\\.conf.*?} + +You can combine different ones. Check the (documentation)[link] for more \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vps-monitor/conditional-naming-processgroup/conditional-naming-processgroup.yaml b/BMW-Dynatrace-config/CD_vps-monitor/conditional-naming-processgroup/conditional-naming-processgroup.yaml new file mode 100644 index 00000000..89c591bb --- /dev/null +++ b/BMW-Dynatrace-config/CD_vps-monitor/conditional-naming-processgroup/conditional-naming-processgroup.yaml @@ -0,0 +1,8 @@ +config: +- CDvps-monitor: template.json + +CDvps-monitor: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: vps-monitor +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_vps-monitor/conditional-naming-processgroup/template.json b/BMW-Dynatrace-config/CD_vps-monitor/conditional-naming-processgroup/template.json new file mode 100644 index 00000000..7c039808 --- /dev/null +++ b/BMW-Dynatrace-config/CD_vps-monitor/conditional-naming-processgroup/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "type": "PROCESS_GROUP" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vps-monitor/conditional-naming-service/README.md b/BMW-Dynatrace-config/CD_vps-monitor/conditional-naming-service/README.md new file mode 100644 index 00000000..c34ef308 --- /dev/null +++ b/BMW-Dynatrace-config/CD_vps-monitor/conditional-naming-service/README.md @@ -0,0 +1,35 @@ +### Service Naming Rules + +A typical case could be that you access to *Transaction & Services* and you find two services that are exactly the same: +*DataDownloadV1* +*DataDownloadV1* + +If you drilldown into the service and you check in the process group, you may have a PROD and a E2E for each service. + +*Note: if you see that both process group are exactly the same, please contact a Dynatrace expert to create a Process* +*Group detection rule* + +In the case the PG are PROD and E2E, then we need to create a rule that looks like this: + +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {Service:DetectedName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +- tag: Infotainment +- skipDeployment: false +``` + +The rule will get the Service Detected Name (current name) and it will extract (with a regex) the part of the kubernetes namespace after the "-", so -prod or -e2e, resulting in: +*DataDownloadV1 - prod* +*DataDownloadV1 - e2e* + +Now, services will be easy to identify. + +You can create rules based on any property/metadata. Some other placeholder's eamples: +{Service:DatabaseName} - E2E +{Service:WebServiceName} - {ProcessGroup:Kubernetes:microservice} - {ProcessGroup:Kubernetes:environment} +{Service:DetectedName} - {ProcessGroup:KubernetesContainerName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +{Service:DetectedName} - {ProcessGroup:SpringBootProfileName/[^\\-]*$} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vps-monitor/conditional-naming-service/conditional-naming-service.yaml b/BMW-Dynatrace-config/CD_vps-monitor/conditional-naming-service/conditional-naming-service.yaml new file mode 100644 index 00000000..89c591bb --- /dev/null +++ b/BMW-Dynatrace-config/CD_vps-monitor/conditional-naming-service/conditional-naming-service.yaml @@ -0,0 +1,8 @@ +config: +- CDvps-monitor: template.json + +CDvps-monitor: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: vps-monitor +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_vps-monitor/conditional-naming-service/template.json b/BMW-Dynatrace-config/CD_vps-monitor/conditional-naming-service/template.json new file mode 100644 index 00000000..5d4fac56 --- /dev/null +++ b/BMW-Dynatrace-config/CD_vps-monitor/conditional-naming-service/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "type": "SERVICE" +} \ 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 index d41c4c77..5f35e5c1 100644 --- a/BMW-Dynatrace-config/CD_vps-monitor/custom-service-java/README.md +++ b/BMW-Dynatrace-config/CD_vps-monitor/custom-service-java/README.md @@ -1,30 +1,4 @@ -## 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 configure custom services? -## 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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Custom+Services) page to configure your custom services. \ 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 index 92e734fa..1695924c 100644 --- a/BMW-Dynatrace-config/CD_vps-monitor/synthetic-monitor/README.md +++ b/BMW-Dynatrace-config/CD_vps-monitor/synthetic-monitor/README.md @@ -1,37 +1,4 @@ -# Synthetic Configuration -To calculate the Availability KPI, a synthetic must be configured. +### How to configure synthetics? -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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Synthetic+Monitors) page to configure your synthetics. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vps-prov/conditional-naming-processgroup/README.md b/BMW-Dynatrace-config/CD_vps-prov/conditional-naming-processgroup/README.md new file mode 100644 index 00000000..f94196a5 --- /dev/null +++ b/BMW-Dynatrace-config/CD_vps-prov/conditional-naming-processgroup/README.md @@ -0,0 +1,67 @@ +### Process Group Detection Rules and Naming + +#### Detection Rule or Naming? + +For the explanation, we're using a real example of the Infotainment application: + +!(PGNaming1)[../../../../img/PGNaming1.PNG] + +Before working with your dashboards and alerting profiles, an important task to do when working with Dynatrace is checking +the structure of your applications (process groups). You can do that clicking under *technologies* and filter using your +application Management Zone. + +In the picture above, there are two Process Groups called bon-information-prod. **If you see duplicated process groups like in** +**this case, you MUST follow this guideline** + +Next step would be to open both process groups and compare the metadata. In that way, you can identify if all process instances are +part of the same application or not. An easy way to do that is asking yourself: how many instances of my application do i have? + +If you have 4 instances in total and you're able to see 2 in one PG and other 2 in other PG it means that **they are part of the ** +**same application** + +Another situation could be that checking on the metadata, then you see that are **two different application** and Dynatrace is just naming +the process group in the same way + +*Same application* +- Problem: Dynatrace is creating two different process groups, what transalates in two separated services for the same application. Instead of +seeing all the traffic in one service, you will have it splitted and it will complicate your monitoring +- Solution: create a process group detection rule. Contact Dynatrace Expert + +*Different application* +- Problem: Dynatrace is just naming in the same way applications that are different. +- Solution: This case is less severe, since it can be fixed with a process group naming rule. + + +What about our example? +!(PGNaming2)[../../../../img/PGNaming2.PNG] +!(PGNaming3)[../../../../img/PGNaming3.PNG] + +Based on the feedback of the infotaiment team, each process group is a different application (microservice) and it's visible in the kubernetes container/workload +within the metadata of each Process Group. + +#### How to create a Process Group Detection Rule +1. Open the *conditional-naming-processgroup.yaml* file and create a rule that looks like this: +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName} +- tag: Infotainment +- skipDeployment: false +``` +The result of the rule will be renaming the PG to this: +``` +bon-information-prod ipa +bon-information-prod rsl +``` + +Other possible placeholders that you can use are for example: +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName/[^\\-]*$} +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesFullPodName/buffet-(.*?)-} +{ProcessGroup:DetectedName} - {HostGroup:Name/[^\\_]*$} +{ProcessGroup:KubernetesNamespace} +{ProcessGroup:CommandLineArgs/.*?\\-f\\s\\/www\\/(.*?)\\/generated\\/httpd\\.conf.*?} + +You can combine different ones. Check the (documentation)[link] for more \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vps-prov/conditional-naming-processgroup/conditional-naming-processgroup.yaml b/BMW-Dynatrace-config/CD_vps-prov/conditional-naming-processgroup/conditional-naming-processgroup.yaml new file mode 100644 index 00000000..9764010c --- /dev/null +++ b/BMW-Dynatrace-config/CD_vps-prov/conditional-naming-processgroup/conditional-naming-processgroup.yaml @@ -0,0 +1,8 @@ +config: +- CDvps-prov: template.json + +CDvps-prov: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: vps-prov +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_vps-prov/conditional-naming-processgroup/template.json b/BMW-Dynatrace-config/CD_vps-prov/conditional-naming-processgroup/template.json new file mode 100644 index 00000000..7c039808 --- /dev/null +++ b/BMW-Dynatrace-config/CD_vps-prov/conditional-naming-processgroup/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "type": "PROCESS_GROUP" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vps-prov/conditional-naming-service/README.md b/BMW-Dynatrace-config/CD_vps-prov/conditional-naming-service/README.md new file mode 100644 index 00000000..c34ef308 --- /dev/null +++ b/BMW-Dynatrace-config/CD_vps-prov/conditional-naming-service/README.md @@ -0,0 +1,35 @@ +### Service Naming Rules + +A typical case could be that you access to *Transaction & Services* and you find two services that are exactly the same: +*DataDownloadV1* +*DataDownloadV1* + +If you drilldown into the service and you check in the process group, you may have a PROD and a E2E for each service. + +*Note: if you see that both process group are exactly the same, please contact a Dynatrace expert to create a Process* +*Group detection rule* + +In the case the PG are PROD and E2E, then we need to create a rule that looks like this: + +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {Service:DetectedName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +- tag: Infotainment +- skipDeployment: false +``` + +The rule will get the Service Detected Name (current name) and it will extract (with a regex) the part of the kubernetes namespace after the "-", so -prod or -e2e, resulting in: +*DataDownloadV1 - prod* +*DataDownloadV1 - e2e* + +Now, services will be easy to identify. + +You can create rules based on any property/metadata. Some other placeholder's eamples: +{Service:DatabaseName} - E2E +{Service:WebServiceName} - {ProcessGroup:Kubernetes:microservice} - {ProcessGroup:Kubernetes:environment} +{Service:DetectedName} - {ProcessGroup:KubernetesContainerName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +{Service:DetectedName} - {ProcessGroup:SpringBootProfileName/[^\\-]*$} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vps-prov/conditional-naming-service/conditional-naming-service.yaml b/BMW-Dynatrace-config/CD_vps-prov/conditional-naming-service/conditional-naming-service.yaml new file mode 100644 index 00000000..9764010c --- /dev/null +++ b/BMW-Dynatrace-config/CD_vps-prov/conditional-naming-service/conditional-naming-service.yaml @@ -0,0 +1,8 @@ +config: +- CDvps-prov: template.json + +CDvps-prov: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: vps-prov +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_vps-prov/conditional-naming-service/template.json b/BMW-Dynatrace-config/CD_vps-prov/conditional-naming-service/template.json new file mode 100644 index 00000000..5d4fac56 --- /dev/null +++ b/BMW-Dynatrace-config/CD_vps-prov/conditional-naming-service/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "type": "SERVICE" +} \ 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 index d41c4c77..5f35e5c1 100644 --- a/BMW-Dynatrace-config/CD_vps-prov/custom-service-java/README.md +++ b/BMW-Dynatrace-config/CD_vps-prov/custom-service-java/README.md @@ -1,30 +1,4 @@ -## 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 configure custom services? -## 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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Custom+Services) page to configure your custom services. \ 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 index 92e734fa..1695924c 100644 --- a/BMW-Dynatrace-config/CD_vps-prov/synthetic-monitor/README.md +++ b/BMW-Dynatrace-config/CD_vps-prov/synthetic-monitor/README.md @@ -1,37 +1,4 @@ -# Synthetic Configuration -To calculate the Availability KPI, a synthetic must be configured. +### How to configure synthetics? -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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Synthetic+Monitors) page to configure your synthetics. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vps-trigger/conditional-naming-processgroup/README.md b/BMW-Dynatrace-config/CD_vps-trigger/conditional-naming-processgroup/README.md new file mode 100644 index 00000000..f94196a5 --- /dev/null +++ b/BMW-Dynatrace-config/CD_vps-trigger/conditional-naming-processgroup/README.md @@ -0,0 +1,67 @@ +### Process Group Detection Rules and Naming + +#### Detection Rule or Naming? + +For the explanation, we're using a real example of the Infotainment application: + +!(PGNaming1)[../../../../img/PGNaming1.PNG] + +Before working with your dashboards and alerting profiles, an important task to do when working with Dynatrace is checking +the structure of your applications (process groups). You can do that clicking under *technologies* and filter using your +application Management Zone. + +In the picture above, there are two Process Groups called bon-information-prod. **If you see duplicated process groups like in** +**this case, you MUST follow this guideline** + +Next step would be to open both process groups and compare the metadata. In that way, you can identify if all process instances are +part of the same application or not. An easy way to do that is asking yourself: how many instances of my application do i have? + +If you have 4 instances in total and you're able to see 2 in one PG and other 2 in other PG it means that **they are part of the ** +**same application** + +Another situation could be that checking on the metadata, then you see that are **two different application** and Dynatrace is just naming +the process group in the same way + +*Same application* +- Problem: Dynatrace is creating two different process groups, what transalates in two separated services for the same application. Instead of +seeing all the traffic in one service, you will have it splitted and it will complicate your monitoring +- Solution: create a process group detection rule. Contact Dynatrace Expert + +*Different application* +- Problem: Dynatrace is just naming in the same way applications that are different. +- Solution: This case is less severe, since it can be fixed with a process group naming rule. + + +What about our example? +!(PGNaming2)[../../../../img/PGNaming2.PNG] +!(PGNaming3)[../../../../img/PGNaming3.PNG] + +Based on the feedback of the infotaiment team, each process group is a different application (microservice) and it's visible in the kubernetes container/workload +within the metadata of each Process Group. + +#### How to create a Process Group Detection Rule +1. Open the *conditional-naming-processgroup.yaml* file and create a rule that looks like this: +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName} +- tag: Infotainment +- skipDeployment: false +``` +The result of the rule will be renaming the PG to this: +``` +bon-information-prod ipa +bon-information-prod rsl +``` + +Other possible placeholders that you can use are for example: +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName/[^\\-]*$} +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesFullPodName/buffet-(.*?)-} +{ProcessGroup:DetectedName} - {HostGroup:Name/[^\\_]*$} +{ProcessGroup:KubernetesNamespace} +{ProcessGroup:CommandLineArgs/.*?\\-f\\s\\/www\\/(.*?)\\/generated\\/httpd\\.conf.*?} + +You can combine different ones. Check the (documentation)[link] for more \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vps-trigger/conditional-naming-processgroup/conditional-naming-processgroup.yaml b/BMW-Dynatrace-config/CD_vps-trigger/conditional-naming-processgroup/conditional-naming-processgroup.yaml new file mode 100644 index 00000000..16a5c74e --- /dev/null +++ b/BMW-Dynatrace-config/CD_vps-trigger/conditional-naming-processgroup/conditional-naming-processgroup.yaml @@ -0,0 +1,8 @@ +config: +- CDvps-trigger: template.json + +CDvps-trigger: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: vps-trigger +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_vps-trigger/conditional-naming-processgroup/template.json b/BMW-Dynatrace-config/CD_vps-trigger/conditional-naming-processgroup/template.json new file mode 100644 index 00000000..7c039808 --- /dev/null +++ b/BMW-Dynatrace-config/CD_vps-trigger/conditional-naming-processgroup/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "type": "PROCESS_GROUP" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vps-trigger/conditional-naming-service/README.md b/BMW-Dynatrace-config/CD_vps-trigger/conditional-naming-service/README.md new file mode 100644 index 00000000..c34ef308 --- /dev/null +++ b/BMW-Dynatrace-config/CD_vps-trigger/conditional-naming-service/README.md @@ -0,0 +1,35 @@ +### Service Naming Rules + +A typical case could be that you access to *Transaction & Services* and you find two services that are exactly the same: +*DataDownloadV1* +*DataDownloadV1* + +If you drilldown into the service and you check in the process group, you may have a PROD and a E2E for each service. + +*Note: if you see that both process group are exactly the same, please contact a Dynatrace expert to create a Process* +*Group detection rule* + +In the case the PG are PROD and E2E, then we need to create a rule that looks like this: + +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {Service:DetectedName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +- tag: Infotainment +- skipDeployment: false +``` + +The rule will get the Service Detected Name (current name) and it will extract (with a regex) the part of the kubernetes namespace after the "-", so -prod or -e2e, resulting in: +*DataDownloadV1 - prod* +*DataDownloadV1 - e2e* + +Now, services will be easy to identify. + +You can create rules based on any property/metadata. Some other placeholder's eamples: +{Service:DatabaseName} - E2E +{Service:WebServiceName} - {ProcessGroup:Kubernetes:microservice} - {ProcessGroup:Kubernetes:environment} +{Service:DetectedName} - {ProcessGroup:KubernetesContainerName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +{Service:DetectedName} - {ProcessGroup:SpringBootProfileName/[^\\-]*$} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vps-trigger/conditional-naming-service/conditional-naming-service.yaml b/BMW-Dynatrace-config/CD_vps-trigger/conditional-naming-service/conditional-naming-service.yaml new file mode 100644 index 00000000..16a5c74e --- /dev/null +++ b/BMW-Dynatrace-config/CD_vps-trigger/conditional-naming-service/conditional-naming-service.yaml @@ -0,0 +1,8 @@ +config: +- CDvps-trigger: template.json + +CDvps-trigger: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: vps-trigger +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_vps-trigger/conditional-naming-service/template.json b/BMW-Dynatrace-config/CD_vps-trigger/conditional-naming-service/template.json new file mode 100644 index 00000000..5d4fac56 --- /dev/null +++ b/BMW-Dynatrace-config/CD_vps-trigger/conditional-naming-service/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "type": "SERVICE" +} \ 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 index d41c4c77..5f35e5c1 100644 --- a/BMW-Dynatrace-config/CD_vps-trigger/custom-service-java/README.md +++ b/BMW-Dynatrace-config/CD_vps-trigger/custom-service-java/README.md @@ -1,30 +1,4 @@ -## 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 configure custom services? -## 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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Custom+Services) page to configure your custom services. \ 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 index 92e734fa..1695924c 100644 --- a/BMW-Dynatrace-config/CD_vps-trigger/synthetic-monitor/README.md +++ b/BMW-Dynatrace-config/CD_vps-trigger/synthetic-monitor/README.md @@ -1,37 +1,4 @@ -# Synthetic Configuration -To calculate the Availability KPI, a synthetic must be configured. +### How to configure synthetics? -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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Synthetic+Monitors) page to configure your synthetics. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vs-api/conditional-naming-processgroup/README.md b/BMW-Dynatrace-config/CD_vs-api/conditional-naming-processgroup/README.md new file mode 100644 index 00000000..f94196a5 --- /dev/null +++ b/BMW-Dynatrace-config/CD_vs-api/conditional-naming-processgroup/README.md @@ -0,0 +1,67 @@ +### Process Group Detection Rules and Naming + +#### Detection Rule or Naming? + +For the explanation, we're using a real example of the Infotainment application: + +!(PGNaming1)[../../../../img/PGNaming1.PNG] + +Before working with your dashboards and alerting profiles, an important task to do when working with Dynatrace is checking +the structure of your applications (process groups). You can do that clicking under *technologies* and filter using your +application Management Zone. + +In the picture above, there are two Process Groups called bon-information-prod. **If you see duplicated process groups like in** +**this case, you MUST follow this guideline** + +Next step would be to open both process groups and compare the metadata. In that way, you can identify if all process instances are +part of the same application or not. An easy way to do that is asking yourself: how many instances of my application do i have? + +If you have 4 instances in total and you're able to see 2 in one PG and other 2 in other PG it means that **they are part of the ** +**same application** + +Another situation could be that checking on the metadata, then you see that are **two different application** and Dynatrace is just naming +the process group in the same way + +*Same application* +- Problem: Dynatrace is creating two different process groups, what transalates in two separated services for the same application. Instead of +seeing all the traffic in one service, you will have it splitted and it will complicate your monitoring +- Solution: create a process group detection rule. Contact Dynatrace Expert + +*Different application* +- Problem: Dynatrace is just naming in the same way applications that are different. +- Solution: This case is less severe, since it can be fixed with a process group naming rule. + + +What about our example? +!(PGNaming2)[../../../../img/PGNaming2.PNG] +!(PGNaming3)[../../../../img/PGNaming3.PNG] + +Based on the feedback of the infotaiment team, each process group is a different application (microservice) and it's visible in the kubernetes container/workload +within the metadata of each Process Group. + +#### How to create a Process Group Detection Rule +1. Open the *conditional-naming-processgroup.yaml* file and create a rule that looks like this: +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName} +- tag: Infotainment +- skipDeployment: false +``` +The result of the rule will be renaming the PG to this: +``` +bon-information-prod ipa +bon-information-prod rsl +``` + +Other possible placeholders that you can use are for example: +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName/[^\\-]*$} +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesFullPodName/buffet-(.*?)-} +{ProcessGroup:DetectedName} - {HostGroup:Name/[^\\_]*$} +{ProcessGroup:KubernetesNamespace} +{ProcessGroup:CommandLineArgs/.*?\\-f\\s\\/www\\/(.*?)\\/generated\\/httpd\\.conf.*?} + +You can combine different ones. Check the (documentation)[link] for more \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vs-api/conditional-naming-processgroup/conditional-naming-processgroup.yaml b/BMW-Dynatrace-config/CD_vs-api/conditional-naming-processgroup/conditional-naming-processgroup.yaml new file mode 100644 index 00000000..55c98009 --- /dev/null +++ b/BMW-Dynatrace-config/CD_vs-api/conditional-naming-processgroup/conditional-naming-processgroup.yaml @@ -0,0 +1,8 @@ +config: +- CDvs-api: template.json + +CDvs-api: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: vs-api +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_vs-api/conditional-naming-processgroup/template.json b/BMW-Dynatrace-config/CD_vs-api/conditional-naming-processgroup/template.json new file mode 100644 index 00000000..7c039808 --- /dev/null +++ b/BMW-Dynatrace-config/CD_vs-api/conditional-naming-processgroup/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "type": "PROCESS_GROUP" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vs-api/conditional-naming-service/README.md b/BMW-Dynatrace-config/CD_vs-api/conditional-naming-service/README.md new file mode 100644 index 00000000..c34ef308 --- /dev/null +++ b/BMW-Dynatrace-config/CD_vs-api/conditional-naming-service/README.md @@ -0,0 +1,35 @@ +### Service Naming Rules + +A typical case could be that you access to *Transaction & Services* and you find two services that are exactly the same: +*DataDownloadV1* +*DataDownloadV1* + +If you drilldown into the service and you check in the process group, you may have a PROD and a E2E for each service. + +*Note: if you see that both process group are exactly the same, please contact a Dynatrace expert to create a Process* +*Group detection rule* + +In the case the PG are PROD and E2E, then we need to create a rule that looks like this: + +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {Service:DetectedName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +- tag: Infotainment +- skipDeployment: false +``` + +The rule will get the Service Detected Name (current name) and it will extract (with a regex) the part of the kubernetes namespace after the "-", so -prod or -e2e, resulting in: +*DataDownloadV1 - prod* +*DataDownloadV1 - e2e* + +Now, services will be easy to identify. + +You can create rules based on any property/metadata. Some other placeholder's eamples: +{Service:DatabaseName} - E2E +{Service:WebServiceName} - {ProcessGroup:Kubernetes:microservice} - {ProcessGroup:Kubernetes:environment} +{Service:DetectedName} - {ProcessGroup:KubernetesContainerName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +{Service:DetectedName} - {ProcessGroup:SpringBootProfileName/[^\\-]*$} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_vs-api/conditional-naming-service/conditional-naming-service.yaml b/BMW-Dynatrace-config/CD_vs-api/conditional-naming-service/conditional-naming-service.yaml new file mode 100644 index 00000000..55c98009 --- /dev/null +++ b/BMW-Dynatrace-config/CD_vs-api/conditional-naming-service/conditional-naming-service.yaml @@ -0,0 +1,8 @@ +config: +- CDvs-api: template.json + +CDvs-api: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: vs-api +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_vs-api/conditional-naming-service/template.json b/BMW-Dynatrace-config/CD_vs-api/conditional-naming-service/template.json new file mode 100644 index 00000000..5d4fac56 --- /dev/null +++ b/BMW-Dynatrace-config/CD_vs-api/conditional-naming-service/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "type": "SERVICE" +} \ 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 index d41c4c77..5f35e5c1 100644 --- a/BMW-Dynatrace-config/CD_vs-api/custom-service-java/README.md +++ b/BMW-Dynatrace-config/CD_vs-api/custom-service-java/README.md @@ -1,30 +1,4 @@ -## 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 configure custom services? -## 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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Custom+Services) page to configure your custom services. \ 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 index 92e734fa..1695924c 100644 --- a/BMW-Dynatrace-config/CD_vs-api/synthetic-monitor/README.md +++ b/BMW-Dynatrace-config/CD_vs-api/synthetic-monitor/README.md @@ -1,37 +1,4 @@ -# Synthetic Configuration -To calculate the Availability KPI, a synthetic must be configured. +### How to configure synthetics? -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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Synthetic+Monitors) page to configure your synthetics. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_webapi/conditional-naming-processgroup/README.md b/BMW-Dynatrace-config/CD_webapi/conditional-naming-processgroup/README.md new file mode 100644 index 00000000..f94196a5 --- /dev/null +++ b/BMW-Dynatrace-config/CD_webapi/conditional-naming-processgroup/README.md @@ -0,0 +1,67 @@ +### Process Group Detection Rules and Naming + +#### Detection Rule or Naming? + +For the explanation, we're using a real example of the Infotainment application: + +!(PGNaming1)[../../../../img/PGNaming1.PNG] + +Before working with your dashboards and alerting profiles, an important task to do when working with Dynatrace is checking +the structure of your applications (process groups). You can do that clicking under *technologies* and filter using your +application Management Zone. + +In the picture above, there are two Process Groups called bon-information-prod. **If you see duplicated process groups like in** +**this case, you MUST follow this guideline** + +Next step would be to open both process groups and compare the metadata. In that way, you can identify if all process instances are +part of the same application or not. An easy way to do that is asking yourself: how many instances of my application do i have? + +If you have 4 instances in total and you're able to see 2 in one PG and other 2 in other PG it means that **they are part of the ** +**same application** + +Another situation could be that checking on the metadata, then you see that are **two different application** and Dynatrace is just naming +the process group in the same way + +*Same application* +- Problem: Dynatrace is creating two different process groups, what transalates in two separated services for the same application. Instead of +seeing all the traffic in one service, you will have it splitted and it will complicate your monitoring +- Solution: create a process group detection rule. Contact Dynatrace Expert + +*Different application* +- Problem: Dynatrace is just naming in the same way applications that are different. +- Solution: This case is less severe, since it can be fixed with a process group naming rule. + + +What about our example? +!(PGNaming2)[../../../../img/PGNaming2.PNG] +!(PGNaming3)[../../../../img/PGNaming3.PNG] + +Based on the feedback of the infotaiment team, each process group is a different application (microservice) and it's visible in the kubernetes container/workload +within the metadata of each Process Group. + +#### How to create a Process Group Detection Rule +1. Open the *conditional-naming-processgroup.yaml* file and create a rule that looks like this: +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName} +- tag: Infotainment +- skipDeployment: false +``` +The result of the rule will be renaming the PG to this: +``` +bon-information-prod ipa +bon-information-prod rsl +``` + +Other possible placeholders that you can use are for example: +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName/[^\\-]*$} +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesFullPodName/buffet-(.*?)-} +{ProcessGroup:DetectedName} - {HostGroup:Name/[^\\_]*$} +{ProcessGroup:KubernetesNamespace} +{ProcessGroup:CommandLineArgs/.*?\\-f\\s\\/www\\/(.*?)\\/generated\\/httpd\\.conf.*?} + +You can combine different ones. Check the (documentation)[link] for more \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_webapi/conditional-naming-processgroup/conditional-naming-processgroup.yaml b/BMW-Dynatrace-config/CD_webapi/conditional-naming-processgroup/conditional-naming-processgroup.yaml new file mode 100644 index 00000000..c1fc3f96 --- /dev/null +++ b/BMW-Dynatrace-config/CD_webapi/conditional-naming-processgroup/conditional-naming-processgroup.yaml @@ -0,0 +1,8 @@ +config: +- CDwebapi: template.json + +CDwebapi: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: webapi +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_webapi/conditional-naming-processgroup/template.json b/BMW-Dynatrace-config/CD_webapi/conditional-naming-processgroup/template.json new file mode 100644 index 00000000..7c039808 --- /dev/null +++ b/BMW-Dynatrace-config/CD_webapi/conditional-naming-processgroup/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "type": "PROCESS_GROUP" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_webapi/conditional-naming-service/README.md b/BMW-Dynatrace-config/CD_webapi/conditional-naming-service/README.md new file mode 100644 index 00000000..c34ef308 --- /dev/null +++ b/BMW-Dynatrace-config/CD_webapi/conditional-naming-service/README.md @@ -0,0 +1,35 @@ +### Service Naming Rules + +A typical case could be that you access to *Transaction & Services* and you find two services that are exactly the same: +*DataDownloadV1* +*DataDownloadV1* + +If you drilldown into the service and you check in the process group, you may have a PROD and a E2E for each service. + +*Note: if you see that both process group are exactly the same, please contact a Dynatrace expert to create a Process* +*Group detection rule* + +In the case the PG are PROD and E2E, then we need to create a rule that looks like this: + +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {Service:DetectedName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +- tag: Infotainment +- skipDeployment: false +``` + +The rule will get the Service Detected Name (current name) and it will extract (with a regex) the part of the kubernetes namespace after the "-", so -prod or -e2e, resulting in: +*DataDownloadV1 - prod* +*DataDownloadV1 - e2e* + +Now, services will be easy to identify. + +You can create rules based on any property/metadata. Some other placeholder's eamples: +{Service:DatabaseName} - E2E +{Service:WebServiceName} - {ProcessGroup:Kubernetes:microservice} - {ProcessGroup:Kubernetes:environment} +{Service:DetectedName} - {ProcessGroup:KubernetesContainerName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +{Service:DetectedName} - {ProcessGroup:SpringBootProfileName/[^\\-]*$} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_webapi/conditional-naming-service/conditional-naming-service.yaml b/BMW-Dynatrace-config/CD_webapi/conditional-naming-service/conditional-naming-service.yaml new file mode 100644 index 00000000..c1fc3f96 --- /dev/null +++ b/BMW-Dynatrace-config/CD_webapi/conditional-naming-service/conditional-naming-service.yaml @@ -0,0 +1,8 @@ +config: +- CDwebapi: template.json + +CDwebapi: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: webapi +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_webapi/conditional-naming-service/template.json b/BMW-Dynatrace-config/CD_webapi/conditional-naming-service/template.json new file mode 100644 index 00000000..5d4fac56 --- /dev/null +++ b/BMW-Dynatrace-config/CD_webapi/conditional-naming-service/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "type": "SERVICE" +} \ 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 index d41c4c77..5f35e5c1 100644 --- a/BMW-Dynatrace-config/CD_webapi/custom-service-java/README.md +++ b/BMW-Dynatrace-config/CD_webapi/custom-service-java/README.md @@ -1,30 +1,4 @@ -## 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 configure custom services? -## 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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Custom+Services) page to configure your custom services. \ 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 index 92e734fa..1695924c 100644 --- a/BMW-Dynatrace-config/CD_webapi/synthetic-monitor/README.md +++ b/BMW-Dynatrace-config/CD_webapi/synthetic-monitor/README.md @@ -1,37 +1,4 @@ -# Synthetic Configuration -To calculate the Availability KPI, a synthetic must be configured. +### How to configure synthetics? -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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Synthetic+Monitors) page to configure your synthetics. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_wlmanager/conditional-naming-processgroup/README.md b/BMW-Dynatrace-config/CD_wlmanager/conditional-naming-processgroup/README.md new file mode 100644 index 00000000..f94196a5 --- /dev/null +++ b/BMW-Dynatrace-config/CD_wlmanager/conditional-naming-processgroup/README.md @@ -0,0 +1,67 @@ +### Process Group Detection Rules and Naming + +#### Detection Rule or Naming? + +For the explanation, we're using a real example of the Infotainment application: + +!(PGNaming1)[../../../../img/PGNaming1.PNG] + +Before working with your dashboards and alerting profiles, an important task to do when working with Dynatrace is checking +the structure of your applications (process groups). You can do that clicking under *technologies* and filter using your +application Management Zone. + +In the picture above, there are two Process Groups called bon-information-prod. **If you see duplicated process groups like in** +**this case, you MUST follow this guideline** + +Next step would be to open both process groups and compare the metadata. In that way, you can identify if all process instances are +part of the same application or not. An easy way to do that is asking yourself: how many instances of my application do i have? + +If you have 4 instances in total and you're able to see 2 in one PG and other 2 in other PG it means that **they are part of the ** +**same application** + +Another situation could be that checking on the metadata, then you see that are **two different application** and Dynatrace is just naming +the process group in the same way + +*Same application* +- Problem: Dynatrace is creating two different process groups, what transalates in two separated services for the same application. Instead of +seeing all the traffic in one service, you will have it splitted and it will complicate your monitoring +- Solution: create a process group detection rule. Contact Dynatrace Expert + +*Different application* +- Problem: Dynatrace is just naming in the same way applications that are different. +- Solution: This case is less severe, since it can be fixed with a process group naming rule. + + +What about our example? +!(PGNaming2)[../../../../img/PGNaming2.PNG] +!(PGNaming3)[../../../../img/PGNaming3.PNG] + +Based on the feedback of the infotaiment team, each process group is a different application (microservice) and it's visible in the kubernetes container/workload +within the metadata of each Process Group. + +#### How to create a Process Group Detection Rule +1. Open the *conditional-naming-processgroup.yaml* file and create a rule that looks like this: +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName} +- tag: Infotainment +- skipDeployment: false +``` +The result of the rule will be renaming the PG to this: +``` +bon-information-prod ipa +bon-information-prod rsl +``` + +Other possible placeholders that you can use are for example: +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName/[^\\-]*$} +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesFullPodName/buffet-(.*?)-} +{ProcessGroup:DetectedName} - {HostGroup:Name/[^\\_]*$} +{ProcessGroup:KubernetesNamespace} +{ProcessGroup:CommandLineArgs/.*?\\-f\\s\\/www\\/(.*?)\\/generated\\/httpd\\.conf.*?} + +You can combine different ones. Check the (documentation)[link] for more \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_wlmanager/conditional-naming-processgroup/conditional-naming-processgroup.yaml b/BMW-Dynatrace-config/CD_wlmanager/conditional-naming-processgroup/conditional-naming-processgroup.yaml new file mode 100644 index 00000000..426fc11f --- /dev/null +++ b/BMW-Dynatrace-config/CD_wlmanager/conditional-naming-processgroup/conditional-naming-processgroup.yaml @@ -0,0 +1,8 @@ +config: +- CDwlmanager: template.json + +CDwlmanager: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: wlmanager +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_wlmanager/conditional-naming-processgroup/template.json b/BMW-Dynatrace-config/CD_wlmanager/conditional-naming-processgroup/template.json new file mode 100644 index 00000000..7c039808 --- /dev/null +++ b/BMW-Dynatrace-config/CD_wlmanager/conditional-naming-processgroup/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "type": "PROCESS_GROUP" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_wlmanager/conditional-naming-service/README.md b/BMW-Dynatrace-config/CD_wlmanager/conditional-naming-service/README.md new file mode 100644 index 00000000..c34ef308 --- /dev/null +++ b/BMW-Dynatrace-config/CD_wlmanager/conditional-naming-service/README.md @@ -0,0 +1,35 @@ +### Service Naming Rules + +A typical case could be that you access to *Transaction & Services* and you find two services that are exactly the same: +*DataDownloadV1* +*DataDownloadV1* + +If you drilldown into the service and you check in the process group, you may have a PROD and a E2E for each service. + +*Note: if you see that both process group are exactly the same, please contact a Dynatrace expert to create a Process* +*Group detection rule* + +In the case the PG are PROD and E2E, then we need to create a rule that looks like this: + +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {Service:DetectedName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +- tag: Infotainment +- skipDeployment: false +``` + +The rule will get the Service Detected Name (current name) and it will extract (with a regex) the part of the kubernetes namespace after the "-", so -prod or -e2e, resulting in: +*DataDownloadV1 - prod* +*DataDownloadV1 - e2e* + +Now, services will be easy to identify. + +You can create rules based on any property/metadata. Some other placeholder's eamples: +{Service:DatabaseName} - E2E +{Service:WebServiceName} - {ProcessGroup:Kubernetes:microservice} - {ProcessGroup:Kubernetes:environment} +{Service:DetectedName} - {ProcessGroup:KubernetesContainerName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +{Service:DetectedName} - {ProcessGroup:SpringBootProfileName/[^\\-]*$} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_wlmanager/conditional-naming-service/conditional-naming-service.yaml b/BMW-Dynatrace-config/CD_wlmanager/conditional-naming-service/conditional-naming-service.yaml new file mode 100644 index 00000000..426fc11f --- /dev/null +++ b/BMW-Dynatrace-config/CD_wlmanager/conditional-naming-service/conditional-naming-service.yaml @@ -0,0 +1,8 @@ +config: +- CDwlmanager: template.json + +CDwlmanager: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: wlmanager +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_wlmanager/conditional-naming-service/template.json b/BMW-Dynatrace-config/CD_wlmanager/conditional-naming-service/template.json new file mode 100644 index 00000000..5d4fac56 --- /dev/null +++ b/BMW-Dynatrace-config/CD_wlmanager/conditional-naming-service/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "type": "SERVICE" +} \ 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 index d41c4c77..5f35e5c1 100644 --- a/BMW-Dynatrace-config/CD_wlmanager/custom-service-java/README.md +++ b/BMW-Dynatrace-config/CD_wlmanager/custom-service-java/README.md @@ -1,30 +1,4 @@ -## 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 configure custom services? -## 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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Custom+Services) page to configure your custom services. \ 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 index 92e734fa..1695924c 100644 --- a/BMW-Dynatrace-config/CD_wlmanager/synthetic-monitor/README.md +++ b/BMW-Dynatrace-config/CD_wlmanager/synthetic-monitor/README.md @@ -1,37 +1,4 @@ -# Synthetic Configuration -To calculate the Availability KPI, a synthetic must be configured. +### How to configure synthetics? -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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Synthetic+Monitors) page to configure your synthetics. \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_xfcd/conditional-naming-processgroup/README.md b/BMW-Dynatrace-config/CD_xfcd/conditional-naming-processgroup/README.md new file mode 100644 index 00000000..f94196a5 --- /dev/null +++ b/BMW-Dynatrace-config/CD_xfcd/conditional-naming-processgroup/README.md @@ -0,0 +1,67 @@ +### Process Group Detection Rules and Naming + +#### Detection Rule or Naming? + +For the explanation, we're using a real example of the Infotainment application: + +!(PGNaming1)[../../../../img/PGNaming1.PNG] + +Before working with your dashboards and alerting profiles, an important task to do when working with Dynatrace is checking +the structure of your applications (process groups). You can do that clicking under *technologies* and filter using your +application Management Zone. + +In the picture above, there are two Process Groups called bon-information-prod. **If you see duplicated process groups like in** +**this case, you MUST follow this guideline** + +Next step would be to open both process groups and compare the metadata. In that way, you can identify if all process instances are +part of the same application or not. An easy way to do that is asking yourself: how many instances of my application do i have? + +If you have 4 instances in total and you're able to see 2 in one PG and other 2 in other PG it means that **they are part of the ** +**same application** + +Another situation could be that checking on the metadata, then you see that are **two different application** and Dynatrace is just naming +the process group in the same way + +*Same application* +- Problem: Dynatrace is creating two different process groups, what transalates in two separated services for the same application. Instead of +seeing all the traffic in one service, you will have it splitted and it will complicate your monitoring +- Solution: create a process group detection rule. Contact Dynatrace Expert + +*Different application* +- Problem: Dynatrace is just naming in the same way applications that are different. +- Solution: This case is less severe, since it can be fixed with a process group naming rule. + + +What about our example? +!(PGNaming2)[../../../../img/PGNaming2.PNG] +!(PGNaming3)[../../../../img/PGNaming3.PNG] + +Based on the feedback of the infotaiment team, each process group is a different application (microservice) and it's visible in the kubernetes container/workload +within the metadata of each Process Group. + +#### How to create a Process Group Detection Rule +1. Open the *conditional-naming-processgroup.yaml* file and create a rule that looks like this: +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName} +- tag: Infotainment +- skipDeployment: false +``` +The result of the rule will be renaming the PG to this: +``` +bon-information-prod ipa +bon-information-prod rsl +``` + +Other possible placeholders that you can use are for example: +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesContainerName/[^\\-]*$} +{ProcessGroup:KubernetesNamespace} - {ProcessGroup:KubernetesFullPodName/buffet-(.*?)-} +{ProcessGroup:DetectedName} - {HostGroup:Name/[^\\_]*$} +{ProcessGroup:KubernetesNamespace} +{ProcessGroup:CommandLineArgs/.*?\\-f\\s\\/www\\/(.*?)\\/generated\\/httpd\\.conf.*?} + +You can combine different ones. Check the (documentation)[link] for more \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_xfcd/conditional-naming-processgroup/conditional-naming-processgroup.yaml b/BMW-Dynatrace-config/CD_xfcd/conditional-naming-processgroup/conditional-naming-processgroup.yaml new file mode 100644 index 00000000..de3c9975 --- /dev/null +++ b/BMW-Dynatrace-config/CD_xfcd/conditional-naming-processgroup/conditional-naming-processgroup.yaml @@ -0,0 +1,8 @@ +config: +- CDxfcd: template.json + +CDxfcd: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: xfcd +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_xfcd/conditional-naming-processgroup/template.json b/BMW-Dynatrace-config/CD_xfcd/conditional-naming-processgroup/template.json new file mode 100644 index 00000000..7c039808 --- /dev/null +++ b/BMW-Dynatrace-config/CD_xfcd/conditional-naming-processgroup/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "PROCESS_GROUP_TAGS" + } + } + ], + "type": "PROCESS_GROUP" +} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_xfcd/conditional-naming-service/README.md b/BMW-Dynatrace-config/CD_xfcd/conditional-naming-service/README.md new file mode 100644 index 00000000..c34ef308 --- /dev/null +++ b/BMW-Dynatrace-config/CD_xfcd/conditional-naming-service/README.md @@ -0,0 +1,35 @@ +### Service Naming Rules + +A typical case could be that you access to *Transaction & Services* and you find two services that are exactly the same: +*DataDownloadV1* +*DataDownloadV1* + +If you drilldown into the service and you check in the process group, you may have a PROD and a E2E for each service. + +*Note: if you see that both process group are exactly the same, please contact a Dynatrace expert to create a Process* +*Group detection rule* + +In the case the PG are PROD and E2E, then we need to create a rule that looks like this: + +``` +config: +- CDInfotainmentRule1: template.json + +CDInfotainmentRule1: +- name: Infotainment Rule 1 +- nameFormat: {Service:DetectedName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +- tag: Infotainment +- skipDeployment: false +``` + +The rule will get the Service Detected Name (current name) and it will extract (with a regex) the part of the kubernetes namespace after the "-", so -prod or -e2e, resulting in: +*DataDownloadV1 - prod* +*DataDownloadV1 - e2e* + +Now, services will be easy to identify. + +You can create rules based on any property/metadata. Some other placeholder's eamples: +{Service:DatabaseName} - E2E +{Service:WebServiceName} - {ProcessGroup:Kubernetes:microservice} - {ProcessGroup:Kubernetes:environment} +{Service:DetectedName} - {ProcessGroup:KubernetesContainerName} - {ProcessGroup:KubernetesNamespace/[^-]+$} +{Service:DetectedName} - {ProcessGroup:SpringBootProfileName/[^\\-]*$} \ No newline at end of file diff --git a/BMW-Dynatrace-config/CD_xfcd/conditional-naming-service/conditional-naming-service.yaml b/BMW-Dynatrace-config/CD_xfcd/conditional-naming-service/conditional-naming-service.yaml new file mode 100644 index 00000000..de3c9975 --- /dev/null +++ b/BMW-Dynatrace-config/CD_xfcd/conditional-naming-service/conditional-naming-service.yaml @@ -0,0 +1,8 @@ +config: +- CDxfcd: template.json + +CDxfcd: +- name: MyProcessNamingRule +- nameFormat: "{ProcessGroup:KubernetesNamespace/regex-example}" +- tag: xfcd +- skipDeployment: "true" diff --git a/BMW-Dynatrace-config/CD_xfcd/conditional-naming-service/template.json b/BMW-Dynatrace-config/CD_xfcd/conditional-naming-service/template.json new file mode 100644 index 00000000..5d4fac56 --- /dev/null +++ b/BMW-Dynatrace-config/CD_xfcd/conditional-naming-service/template.json @@ -0,0 +1,29 @@ +{ + "displayName": "{{.name}}", + "enabled": true, + "metadata": { + "clusterVersion": "1.214.107.20210407-223952", + "configurationVersions": [ + 0 + ] + }, + "nameFormat": "{{.nameFormat}}", + "rules": [ + { + "comparisonInfo": { + "negate": false, + "operator": "EQUALS", + "type": "TAG", + "value": { + "context": "CONTEXTLESS", + "key": "Component", + "value": "{{.tag}}" + } + }, + "key": { + "attribute": "SERVICE_TAGS" + } + } + ], + "type": "SERVICE" +} \ 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 index d41c4c77..5f35e5c1 100644 --- a/BMW-Dynatrace-config/CD_xfcd/custom-service-java/README.md +++ b/BMW-Dynatrace-config/CD_xfcd/custom-service-java/README.md @@ -1,30 +1,4 @@ -## 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 configure custom services? -## 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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Custom+Services) page to configure your custom services. \ 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 index 92e734fa..1695924c 100644 --- a/BMW-Dynatrace-config/CD_xfcd/synthetic-monitor/README.md +++ b/BMW-Dynatrace-config/CD_xfcd/synthetic-monitor/README.md @@ -1,37 +1,4 @@ -# Synthetic Configuration -To calculate the Availability KPI, a synthetic must be configured. +### How to configure synthetics? -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 +Please refer to [this](https://atc.bmwgroup.net/confluence/display/OPMAAS/Documentation+%7C+Synthetic+Monitors) page to configure your synthetics. \ No newline at end of file