19 Mar 2024 07:39 AM - edited 03 Sep 2024 07:59 PM
It's quite common you don't provide your services 24x7, but you will run them also during non-business hours. Until business hours or business calendar features land into the Dynatrace product natively, it's possible to have a simple solution.
My approach below works for both Dynatrace Managed and SaaS.
For this feature, we will introduce a new metric - in this example business_hours which will provide just static values:
Of course, in your environment you probably have different business hours for different services, thus you will likely need to have a dimension for it, such as level (24x7, 10x5, etc... ). See example below:
For example, values for an 8x5 service level will look like this - a value of 1 between 9:00 and 17:00 for each day and no value outside these times.
Then in the SLO definition, you will simply use metric expression and multiply your desired metric with the business hours metric with the desired dimension representing your business hours, for example - for SLO on key requests:
(
builtin:service.keyRequest.successes.server.rate:splitBy():auto
*
business_hours:filter(and(or(eq(level,"8x5")))):splitBy():auto
):setUnit(Percent)
You may also commit the :setUnit transformation if you wish.
So in the example - during business hours, your original metric will be unaffected (multiplied by 1) and outside of business hours, you will have no value. In this example I've chosen a service level of 8x5, so the result will look like this - notice there are no values during the weekend of 16th and 17th March, and during Monday - Friday we have values only between 8:00 to 16:00 - representing 8x5.
You can use this approach also in Data Explorer, for Metric event definitions or elsewhere you can utilize metric expressions!
Extension for generating business hours metric
I've decided to publish the extension which allows you to create this business_hours metric based on cron-like schedules or also from a real calendar! (defined in Office 365, Google Calendar or any remote calendar available in ical format). So you can define your business hours using a shared calendar and the extension will generate the metric accordingly.
You can download the extension from here. You will need to import the CA certificate into your Dynatrace environment and upload the extension. See the README.md for details and links on how to share calendars from Office 365 or Google Calendar.
v0.0.12
08 Apr 2024 03:26 PM
Hi Julius,
(you have fans (-;)
I am very interested in your Extension, can you share?
KR Henk
10 Apr 2024 09:10 AM
Hi Julius,
I am very interested.🙂
18 Apr 2024 08:58 AM
Hi @jiri_stefanek ,
can you please reach out to me directly at julius.loman (at) alanata.sk ?
18 Apr 2024 09:13 AM
Hi Julius,
I just send you email.
16 May 2024 06:06 AM
Sent an email to you and looking forward for your reply mate. Thanks
25 Apr 2024 07:16 PM
Hi Julius,
I just sent you an email directly as well. Hope to hear from you soon. Thank you!
25 Apr 2024 07:38 PM
How did you create the custom metric that defines the different business hours for different services, thus you will likely need to have a dimension for it, such as level (24x7, 10x5, etc) in data explorer?
26 Apr 2024 08:08 AM
@hy exactly. I've just replied to your email.
07 May 2024 05:32 PM
Hi Julius, this is great! I would also be interested in your extension please 🙂
Thank you!
21 May 2024 11:13 AM
Hi @Julius_Loman ,
You are so inspiring ! I have created my own python extension to create the custom metric but I use declarative endpoints with a specific format :
However, I'm encountering a limitation when I define a new business opening hours, I have to wait 1 month before use it in my SLO definition otherwise my SLO is null before the custom metric dimension creation.
Did you experiment the same behaviour with your extension ?
Thank you.
Regards Aurelien.
21 May 2024 06:13 PM
I'm not sure if I got your question. The only issue I ever encountered is that you cannot post metrics back in time. So if you define a service level you can only use it for the calculating SLO from current time.so plan accordingly and define your service levels in advance.
22 May 2024 08:33 AM
That's exactly the limitation I'm encountering : you cannot post metrics back in time.
Thank you for your confirmation.
22 May 2024 08:57 AM
Yes, that's impossible as metrics can be ingested only one hour back in time. This will likely change soon with Grail, but not for Managed.
27 May 2024 05:45 PM
This could be one of the most clever tricks i seen, thank you for share it @Julius_Loman
04 Jun 2024 07:22 AM
Hi Julius,
Thanks a lot for your great post.
I also just sent you and email and like "hy" user I’m interested to know how to create the custom metric that defines the different business hours for different services.
Thanks again.
Regards,
Elena
21 Jun 2024 12:58 PM
Hi Julius, any ETA for this extension to be in the hub?
Thanks
21 Jun 2024 01:35 PM
@germanriezu unfortunately it was not accepted. Only Dynatrace signed extensions can be in the HUB as of today, no 3rd party extensions. So at least for upcoming months this will stay as it is. You can download it from the provided link including the certificate and use it as a 3rd party extension. In case of any issues, reach out back here in this thread.