509 lines
76 KiB
HTML
509 lines
76 KiB
HTML
<!DOCTYPE html>
|
||
<html lang="en-US">
|
||
<head>
|
||
<meta charset="UTF-8">
|
||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||
<link rel="profile" href="https://gmpg.org/xfn/11">
|
||
|
||
<meta name='robots' content='index, follow, max-image-preview:large, max-snippet:-1, max-video-preview:-1' />
|
||
|
||
<!-- This site is optimized with the Yoast SEO Premium plugin v22.5 (Yoast SEO v22.5) - https://yoast.com/wordpress/plugins/seo/ -->
|
||
<title>We can do better than percentile latencies | theburningmonk.com</title>
|
||
<meta name="description" content="Learn to build production-ready serverless applications on AWS" />
|
||
<link rel="canonical" href="https://theburningmonk.com/2018/10/we-can-do-better-than-percentile-latencies/" />
|
||
<meta property="og:locale" content="en_US" />
|
||
<meta property="og:type" content="article" />
|
||
<meta property="og:title" content="We can do better than percentile latencies" />
|
||
<meta property="og:description" content="Learn to build production-ready serverless applications on AWS" />
|
||
<meta property="og:url" content="https://theburningmonk.com/2018/10/we-can-do-better-than-percentile-latencies/" />
|
||
<meta property="og:site_name" content="theburningmonk.com" />
|
||
<meta property="article:published_time" content="2018-10-03T19:36:32+00:00" />
|
||
<meta property="article:modified_time" content="2019-10-06T11:32:55+00:00" />
|
||
<meta name="author" content="Yan Cui" />
|
||
<meta name="twitter:card" content="summary_large_image" />
|
||
<meta name="twitter:creator" content="@theburningmonk" />
|
||
<meta name="twitter:site" content="@theburningmonk" />
|
||
<meta name="twitter:label1" content="Written by" />
|
||
<meta name="twitter:data1" content="Yan Cui" />
|
||
<meta name="twitter:label2" content="Est. reading time" />
|
||
<meta name="twitter:data2" content="8 minutes" />
|
||
<script type="application/ld+json" class="yoast-schema-graph">{"@context":"https://schema.org","@graph":[{"@type":"Article","@id":"https://theburningmonk.com/2018/10/we-can-do-better-than-percentile-latencies/#article","isPartOf":{"@id":"https://theburningmonk.com/2018/10/we-can-do-better-than-percentile-latencies/"},"author":{"name":"Yan Cui","@id":"https://theburningmonk.com/#/schema/person/6b58679b4aa29db4f537a76fd0923ad4"},"headline":"We can do better than percentile latencies","datePublished":"2018-10-03T19:36:32+00:00","dateModified":"2019-10-06T11:32:55+00:00","mainEntityOfPage":{"@id":"https://theburningmonk.com/2018/10/we-can-do-better-than-percentile-latencies/"},"wordCount":1675,"publisher":{"@id":"https://theburningmonk.com/#/schema/person/6b58679b4aa29db4f537a76fd0923ad4"},"keywords":["Monitoring"],"articleSection":["Me","Microservices","Programming"],"inLanguage":"en-US"},{"@type":"WebPage","@id":"https://theburningmonk.com/2018/10/we-can-do-better-than-percentile-latencies/","url":"https://theburningmonk.com/2018/10/we-can-do-better-than-percentile-latencies/","name":"We can do better than percentile latencies | theburningmonk.com","isPartOf":{"@id":"https://theburningmonk.com/#website"},"datePublished":"2018-10-03T19:36:32+00:00","dateModified":"2019-10-06T11:32:55+00:00","description":"Learn to build production-ready serverless applications on AWS","breadcrumb":{"@id":"https://theburningmonk.com/2018/10/we-can-do-better-than-percentile-latencies/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https://theburningmonk.com/2018/10/we-can-do-better-than-percentile-latencies/"]}]},{"@type":"BreadcrumbList","@id":"https://theburningmonk.com/2018/10/we-can-do-better-than-percentile-latencies/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https://theburningmonk.com/"},{"@type":"ListItem","position":2,"name":"We can do better than percentile latencies"}]},{"@type":"WebSite","@id":"https://theburningmonk.com/#website","url":"https://theburningmonk.com/","name":"theburningmonk.com","description":"Learn to build production-ready serverless applications on AWS","publisher":{"@id":"https://theburningmonk.com/#/schema/person/6b58679b4aa29db4f537a76fd0923ad4"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https://theburningmonk.com/?s={search_term_string}"},"query-input":"required name=search_term_string"}],"inLanguage":"en-US"},{"@type":["Person","Organization"],"@id":"https://theburningmonk.com/#/schema/person/6b58679b4aa29db4f537a76fd0923ad4","name":"Yan Cui","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https://theburningmonk.com/#/schema/person/image/","url":"https://secure.gravatar.com/avatar/72bd46b920d5a3384991055b95afbb0499f86b7af18cf9ad7e04156a8c181ad4?s=96&d=mm&r=g","contentUrl":"https://secure.gravatar.com/avatar/72bd46b920d5a3384991055b95afbb0499f86b7af18cf9ad7e04156a8c181ad4?s=96&d=mm&r=g","caption":"Yan Cui"},"logo":{"@id":"https://theburningmonk.com/#/schema/person/image/"},"description":"I help engineers build better software faster with serverless. AWS Serverless Hero, Independent Consultant"}]}</script>
|
||
<!-- / Yoast SEO Premium plugin. -->
|
||
|
||
|
||
<link rel='dns-prefetch' href='//a.omappapi.com' />
|
||
<!-- theburningmonk.com is managing ads with Advanced Ads --><script id="a2280-ready">
|
||
window.advanced_ads_ready=function(e,a){a=a||"complete";var d=function(e){return"interactive"===a?"loading"!==e:"complete"===e};d(document.readyState)?e():document.addEventListener("readystatechange",(function(a){d(a.target.readyState)&&e()}),{once:"interactive"===a})},window.advanced_ads_ready_queue=window.advanced_ads_ready_queue||[]; </script>
|
||
<style id='wp-img-auto-sizes-contain-inline-css' type='text/css'>
|
||
img:is([sizes=auto i],[sizes^="auto," i]){contain-intrinsic-size:3000px 1500px}
|
||
/*# sourceURL=wp-img-auto-sizes-contain-inline-css */
|
||
</style>
|
||
<link rel='stylesheet' id='wgs2-css' href='/wp-content/plugins/wp-google-search/wgs2.css?ver=6.9.4' type='text/css' media='all' />
|
||
<link rel='stylesheet' id='astra-theme-css-css' href='/wp-content/themes/astra/assets/css/minified/style.min.css?ver=1.6.2' type='text/css' media='all' />
|
||
<style id='astra-theme-css-inline-css' type='text/css'>
|
||
html{font-size:93.75%;}a,.page-title{color:#0274be;}a:hover,a:focus{color:#3a3a3a;}body,button,input,select,textarea{font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen-Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif;font-weight:normal;font-size:15px;font-size:1rem;}blockquote{border-color:rgba(2,116,190,0.05);}.site-title{font-size:35px;font-size:2.3333333333333rem;}header .site-logo-img .custom-logo-link img{max-width:0px;}.astra-logo-svg{width:0px;}.ast-archive-description .ast-archive-title{font-size:40px;font-size:2.6666666666667rem;}.site-header .site-description{font-size:15px;font-size:1rem;}.entry-title{font-size:30px;font-size:2rem;}.comment-reply-title{font-size:24px;font-size:1.6rem;}.ast-comment-list #cancel-comment-reply-link{font-size:15px;font-size:1rem;}h1,.entry-content h1,.entry-content h1 a{font-size:48px;font-size:3.2rem;}h2,.entry-content h2,.entry-content h2 a{font-size:42px;font-size:2.8rem;}h3,.entry-content h3,.entry-content h3 a{font-size:30px;font-size:2rem;}h4,.entry-content h4,.entry-content h4 a{font-size:20px;font-size:1.3333333333333rem;}h5,.entry-content h5,.entry-content h5 a{font-size:18px;font-size:1.2rem;}h6,.entry-content h6,.entry-content h6 a{font-size:15px;font-size:1rem;}.ast-single-post .entry-title,.page-title{font-size:30px;font-size:2rem;}#secondary,#secondary button,#secondary input,#secondary select,#secondary textarea{font-size:15px;font-size:1rem;}::selection{background-color:#0274be;color:#ffffff;}body,h1,.entry-title a,.entry-content h1,.entry-content h1 a,h2,.entry-content h2,.entry-content h2 a,h3,.entry-content h3,.entry-content h3 a,h4,.entry-content h4,.entry-content h4 a,h5,.entry-content h5,.entry-content h5 a,h6,.entry-content h6,.entry-content h6 a{color:#3a3a3a;}.tagcloud a:hover,.tagcloud a:focus,.tagcloud a.current-item{color:#ffffff;border-color:#0274be;background-color:#0274be;}.main-header-menu a,.ast-header-custom-item a{color:#3a3a3a;}.main-header-menu li:hover > a,.main-header-menu li:hover > .ast-menu-toggle,.main-header-menu .ast-masthead-custom-menu-items a:hover,.main-header-menu li.focus > a,.main-header-menu li.focus > .ast-menu-toggle,.main-header-menu .current-menu-item > a,.main-header-menu .current-menu-ancestor > a,.main-header-menu .current_page_item > a,.main-header-menu .current-menu-item > .ast-menu-toggle,.main-header-menu .current-menu-ancestor > .ast-menu-toggle,.main-header-menu .current_page_item > .ast-menu-toggle{color:#0274be;}input:focus,input[type="text"]:focus,input[type="email"]:focus,input[type="url"]:focus,input[type="password"]:focus,input[type="reset"]:focus,input[type="search"]:focus,textarea:focus{border-color:#0274be;}input[type="radio"]:checked,input[type=reset],input[type="checkbox"]:checked,input[type="checkbox"]:hover:checked,input[type="checkbox"]:focus:checked,input[type=range]::-webkit-slider-thumb{border-color:#0274be;background-color:#0274be;box-shadow:none;}.site-footer a:hover + .post-count,.site-footer a:focus + .post-count{background:#0274be;border-color:#0274be;}.footer-adv .footer-adv-overlay{border-top-style:solid;border-top-color:#7a7a7a;}.ast-comment-meta{line-height:1.666666667;font-size:12px;font-size:0.8rem;}.single .nav-links .nav-previous,.single .nav-links .nav-next,.single .ast-author-details .author-title,.ast-comment-meta{color:#0274be;}.menu-toggle,button,.ast-button,.button,input#submit,input[type="button"],input[type="submit"],input[type="reset"]{border-radius:2px;padding:10px 40px;color:#ffffff;border-color:#0274be;background-color:#0274be;}button:focus,.menu-toggle:hover,button:hover,.ast-button:hover,.button:hover,input[type=reset]:hover,input[type=reset]:focus,input#submit:hover,input#submit:focus,input[type="button"]:hover,input[type="button"]:focus,input[type="submit"]:hover,input[type="submit"]:focus{color:#ffffff;border-color:#3a3a3a;background-color:#3a3a3a;}.entry-meta,.entry-meta *{line-height:1.45;color:#0274be;}.entry-meta a:hover,.entry-meta a:hover *,.entry-meta a:focus,.entry-meta a:focus *{color:#3a3a3a;}blockquote,blockquote a{color:#000000;}.ast-404-layout-1 .ast-404-text{font-size:200px;font-size:13.333333333333rem;}.widget-title{font-size:21px;font-size:1.4rem;color:#3a3a3a;}#cat option,.secondary .calendar_wrap thead a,.secondary .calendar_wrap thead a:visited{color:#0274be;}.secondary .calendar_wrap #today,.ast-progress-val span{background:#0274be;}.secondary a:hover + .post-count,.secondary a:focus + .post-count{background:#0274be;border-color:#0274be;}.calendar_wrap #today > a{color:#ffffff;}.ast-pagination a,.page-links .page-link,.single .post-navigation a{color:#0274be;}.ast-pagination a:hover,.ast-pagination a:focus,.ast-pagination > span:hover:not(.dots),.ast-pagination > span.current,.page-links > .page-link,.page-links .page-link:hover,.post-navigation a:hover{color:#3a3a3a;}.ast-header-break-point .ast-mobile-menu-buttons-minimal.menu-toggle{background:transparent;color:#0274be;}.ast-header-break-point .ast-mobile-menu-buttons-outline.menu-toggle{background:transparent;border:1px solid #0274be;color:#0274be;}.ast-header-break-point .ast-mobile-menu-buttons-fill.menu-toggle{background:#0274be;}.ast-header-break-point .main-header-bar .ast-button-wrap .menu-toggle{border-radius:0px;}@media (min-width:545px){.ast-page-builder-template .comments-area,.single.ast-page-builder-template .entry-header,.single.ast-page-builder-template .post-navigation{max-width:1440px;margin-left:auto;margin-right:auto;}}body,.ast-separate-container{background-color:#ffffff;}@media (max-width:768px){.ast-archive-description .ast-archive-title{font-size:40px;}.entry-title{font-size:30px;}h1,.entry-content h1,.entry-content h1 a{font-size:30px;}h2,.entry-content h2,.entry-content h2 a{font-size:25px;}h3,.entry-content h3,.entry-content h3 a{font-size:20px;}.ast-single-post .entry-title,.page-title{font-size:30px;}}@media (max-width:544px){.ast-archive-description .ast-archive-title{font-size:40px;}.entry-title{font-size:30px;}h1,.entry-content h1,.entry-content h1 a{font-size:30px;}h2,.entry-content h2,.entry-content h2 a{font-size:25px;}h3,.entry-content h3,.entry-content h3 a{font-size:20px;}.ast-single-post .entry-title,.page-title{font-size:30px;}}@media (max-width:768px){html{font-size:85.5%;}}@media (max-width:544px){html{font-size:85.5%;}}@media (min-width:769px){.ast-container{max-width:1440px;}}@font-face {font-family: "Astra";src: url( https://theburningmonk.com/wp-content/themes/astra/assets/fonts/astra.woff) format("woff"),url( https://theburningmonk.com/wp-content/themes/astra/assets/fonts/astra.ttf) format("truetype"),url( https://theburningmonk.com/wp-content/themes/astra/assets/fonts/astra.svg#astra) format("svg");font-weight: normal;font-style: normal;}@media (max-width:921px) {.main-header-bar .main-header-bar-navigation{display:none;}}.ast-desktop .main-header-menu.submenu-with-border .sub-menu,.ast-desktop .main-header-menu.submenu-with-border .children,.ast-desktop .main-header-menu.submenu-with-border .astra-full-megamenu-wrapper{border-color:#eaeaea;}.ast-desktop .main-header-menu.submenu-with-border .sub-menu,.ast-desktop .main-header-menu.submenu-with-border .children{border-top-width:1px;border-right-width:1px;border-left-width:1px;border-bottom-width:1px;border-style:solid;}.ast-desktop .main-header-menu.submenu-with-border .sub-menu .sub-menu,.ast-desktop .main-header-menu.submenu-with-border .children .children{top:-1px;}.ast-desktop .main-header-menu.submenu-with-border .sub-menu a,.ast-desktop .main-header-menu.submenu-with-border .children a{border-bottom-width:1px;border-style:solid;border-color:#eaeaea;}@media (min-width:769px){.main-header-menu .sub-menu li.ast-left-align-sub-menu:hover > ul,.main-header-menu .sub-menu li.ast-left-align-sub-menu.focus > ul{margin-left:-2px;}}.ast-small-footer{border-top-style:solid;border-top-width:1px;border-top-color:#7a7a7a;}@media (max-width:920px){.ast-404-layout-1 .ast-404-text{font-size:100px;font-size:6.6666666666667rem;}}
|
||
.ast-header-break-point .site-header{border-bottom-width:3px;}@media (min-width:769px){.main-header-bar{border-bottom-width:3px;}}@media (min-width:769px){#primary{width:70%;}#secondary{width:30%;}}.ast-flex{-webkit-align-content:center;-ms-flex-line-pack:center;align-content:center;-webkit-box-align:center;-webkit-align-items:center;-moz-box-align:center;-ms-flex-align:center;align-items:center;}.main-header-bar{padding:1em 0;}.ast-site-identity{padding:0;}
|
||
/*# sourceURL=astra-theme-css-inline-css */
|
||
</style>
|
||
<style id='wp-emoji-styles-inline-css' type='text/css'>
|
||
|
||
img.wp-smiley, img.emoji {
|
||
display: inline !important;
|
||
border: none !important;
|
||
box-shadow: none !important;
|
||
height: 1em !important;
|
||
width: 1em !important;
|
||
margin: 0 0.07em !important;
|
||
vertical-align: -0.1em !important;
|
||
background: none !important;
|
||
padding: 0 !important;
|
||
}
|
||
/*# sourceURL=wp-emoji-styles-inline-css */
|
||
</style>
|
||
<link rel='stylesheet' id='wp-block-library-css' href='/wp-includes/css/dist/block-library/style.min.css?ver=6.9.4' type='text/css' media='all' />
|
||
|
||
<style id='classic-theme-styles-inline-css' type='text/css'>
|
||
/*! This file is auto-generated */
|
||
.wp-block-button__link{color:#fff;background-color:#32373c;border-radius:9999px;box-shadow:none;text-decoration:none;padding:calc(.667em + 2px) calc(1.333em + 2px);font-size:1.125em}.wp-block-file__button{background:#32373c;color:#fff;text-decoration:none}
|
||
/*# sourceURL=/wp-includes/css/classic-themes.min.css */
|
||
</style>
|
||
<link rel='stylesheet' id='convertkit-broadcasts-css' href='/wp-content/plugins/convertkit/resources/frontend/css/broadcasts.css?ver=2.5.5' type='text/css' media='all' />
|
||
<link rel='stylesheet' id='convertkit-button-css' href='/wp-content/plugins/convertkit/resources/frontend/css/button.css?ver=2.5.5' type='text/css' media='all' />
|
||
<link rel='stylesheet' id='convertkit-form-css' href='/wp-content/plugins/convertkit/resources/frontend/css/form.css?ver=2.5.5' type='text/css' media='all' />
|
||
<style id='global-styles-inline-css' type='text/css'>
|
||
:root{--wp--preset--aspect-ratio--square: 1;--wp--preset--aspect-ratio--4-3: 4/3;--wp--preset--aspect-ratio--3-4: 3/4;--wp--preset--aspect-ratio--3-2: 3/2;--wp--preset--aspect-ratio--2-3: 2/3;--wp--preset--aspect-ratio--16-9: 16/9;--wp--preset--aspect-ratio--9-16: 9/16;--wp--preset--color--black: #000000;--wp--preset--color--cyan-bluish-gray: #abb8c3;--wp--preset--color--white: #ffffff;--wp--preset--color--pale-pink: #f78da7;--wp--preset--color--vivid-red: #cf2e2e;--wp--preset--color--luminous-vivid-orange: #ff6900;--wp--preset--color--luminous-vivid-amber: #fcb900;--wp--preset--color--light-green-cyan: #7bdcb5;--wp--preset--color--vivid-green-cyan: #00d084;--wp--preset--color--pale-cyan-blue: #8ed1fc;--wp--preset--color--vivid-cyan-blue: #0693e3;--wp--preset--color--vivid-purple: #9b51e0;--wp--preset--gradient--vivid-cyan-blue-to-vivid-purple: linear-gradient(135deg,rgb(6,147,227) 0%,rgb(155,81,224) 100%);--wp--preset--gradient--light-green-cyan-to-vivid-green-cyan: linear-gradient(135deg,rgb(122,220,180) 0%,rgb(0,208,130) 100%);--wp--preset--gradient--luminous-vivid-amber-to-luminous-vivid-orange: linear-gradient(135deg,rgb(252,185,0) 0%,rgb(255,105,0) 100%);--wp--preset--gradient--luminous-vivid-orange-to-vivid-red: linear-gradient(135deg,rgb(255,105,0) 0%,rgb(207,46,46) 100%);--wp--preset--gradient--very-light-gray-to-cyan-bluish-gray: linear-gradient(135deg,rgb(238,238,238) 0%,rgb(169,184,195) 100%);--wp--preset--gradient--cool-to-warm-spectrum: linear-gradient(135deg,rgb(74,234,220) 0%,rgb(151,120,209) 20%,rgb(207,42,186) 40%,rgb(238,44,130) 60%,rgb(251,105,98) 80%,rgb(254,248,76) 100%);--wp--preset--gradient--blush-light-purple: linear-gradient(135deg,rgb(255,206,236) 0%,rgb(152,150,240) 100%);--wp--preset--gradient--blush-bordeaux: linear-gradient(135deg,rgb(254,205,165) 0%,rgb(254,45,45) 50%,rgb(107,0,62) 100%);--wp--preset--gradient--luminous-dusk: linear-gradient(135deg,rgb(255,203,112) 0%,rgb(199,81,192) 50%,rgb(65,88,208) 100%);--wp--preset--gradient--pale-ocean: linear-gradient(135deg,rgb(255,245,203) 0%,rgb(182,227,212) 50%,rgb(51,167,181) 100%);--wp--preset--gradient--electric-grass: linear-gradient(135deg,rgb(202,248,128) 0%,rgb(113,206,126) 100%);--wp--preset--gradient--midnight: linear-gradient(135deg,rgb(2,3,129) 0%,rgb(40,116,252) 100%);--wp--preset--font-size--small: 13px;--wp--preset--font-size--medium: 20px;--wp--preset--font-size--large: 36px;--wp--preset--font-size--x-large: 42px;--wp--preset--spacing--20: 0.44rem;--wp--preset--spacing--30: 0.67rem;--wp--preset--spacing--40: 1rem;--wp--preset--spacing--50: 1.5rem;--wp--preset--spacing--60: 2.25rem;--wp--preset--spacing--70: 3.38rem;--wp--preset--spacing--80: 5.06rem;--wp--preset--shadow--natural: 6px 6px 9px rgba(0, 0, 0, 0.2);--wp--preset--shadow--deep: 12px 12px 50px rgba(0, 0, 0, 0.4);--wp--preset--shadow--sharp: 6px 6px 0px rgba(0, 0, 0, 0.2);--wp--preset--shadow--outlined: 6px 6px 0px -3px rgb(255, 255, 255), 6px 6px rgb(0, 0, 0);--wp--preset--shadow--crisp: 6px 6px 0px rgb(0, 0, 0);}:where(.is-layout-flex){gap: 0.5em;}:where(.is-layout-grid){gap: 0.5em;}body .is-layout-flex{display: flex;}.is-layout-flex{flex-wrap: wrap;align-items: center;}.is-layout-flex > :is(*, div){margin: 0;}body .is-layout-grid{display: grid;}.is-layout-grid > :is(*, div){margin: 0;}:where(.wp-block-columns.is-layout-flex){gap: 2em;}:where(.wp-block-columns.is-layout-grid){gap: 2em;}:where(.wp-block-post-template.is-layout-flex){gap: 1.25em;}:where(.wp-block-post-template.is-layout-grid){gap: 1.25em;}.has-black-color{color: var(--wp--preset--color--black) !important;}.has-cyan-bluish-gray-color{color: var(--wp--preset--color--cyan-bluish-gray) !important;}.has-white-color{color: var(--wp--preset--color--white) !important;}.has-pale-pink-color{color: var(--wp--preset--color--pale-pink) !important;}.has-vivid-red-color{color: var(--wp--preset--color--vivid-red) !important;}.has-luminous-vivid-orange-color{color: var(--wp--preset--color--luminous-vivid-orange) !important;}.has-luminous-vivid-amber-color{color: var(--wp--preset--color--luminous-vivid-amber) !important;}.has-light-green-cyan-color{color: var(--wp--preset--color--light-green-cyan) !important;}.has-vivid-green-cyan-color{color: var(--wp--preset--color--vivid-green-cyan) !important;}.has-pale-cyan-blue-color{color: var(--wp--preset--color--pale-cyan-blue) !important;}.has-vivid-cyan-blue-color{color: var(--wp--preset--color--vivid-cyan-blue) !important;}.has-vivid-purple-color{color: var(--wp--preset--color--vivid-purple) !important;}.has-black-background-color{background-color: var(--wp--preset--color--black) !important;}.has-cyan-bluish-gray-background-color{background-color: var(--wp--preset--color--cyan-bluish-gray) !important;}.has-white-background-color{background-color: var(--wp--preset--color--white) !important;}.has-pale-pink-background-color{background-color: var(--wp--preset--color--pale-pink) !important;}.has-vivid-red-background-color{background-color: var(--wp--preset--color--vivid-red) !important;}.has-luminous-vivid-orange-background-color{background-color: var(--wp--preset--color--luminous-vivid-orange) !important;}.has-luminous-vivid-amber-background-color{background-color: var(--wp--preset--color--luminous-vivid-amber) !important;}.has-light-green-cyan-background-color{background-color: var(--wp--preset--color--light-green-cyan) !important;}.has-vivid-green-cyan-background-color{background-color: var(--wp--preset--color--vivid-green-cyan) !important;}.has-pale-cyan-blue-background-color{background-color: var(--wp--preset--color--pale-cyan-blue) !important;}.has-vivid-cyan-blue-background-color{background-color: var(--wp--preset--color--vivid-cyan-blue) !important;}.has-vivid-purple-background-color{background-color: var(--wp--preset--color--vivid-purple) !important;}.has-black-border-color{border-color: var(--wp--preset--color--black) !important;}.has-cyan-bluish-gray-border-color{border-color: var(--wp--preset--color--cyan-bluish-gray) !important;}.has-white-border-color{border-color: var(--wp--preset--color--white) !important;}.has-pale-pink-border-color{border-color: var(--wp--preset--color--pale-pink) !important;}.has-vivid-red-border-color{border-color: var(--wp--preset--color--vivid-red) !important;}.has-luminous-vivid-orange-border-color{border-color: var(--wp--preset--color--luminous-vivid-orange) !important;}.has-luminous-vivid-amber-border-color{border-color: var(--wp--preset--color--luminous-vivid-amber) !important;}.has-light-green-cyan-border-color{border-color: var(--wp--preset--color--light-green-cyan) !important;}.has-vivid-green-cyan-border-color{border-color: var(--wp--preset--color--vivid-green-cyan) !important;}.has-pale-cyan-blue-border-color{border-color: var(--wp--preset--color--pale-cyan-blue) !important;}.has-vivid-cyan-blue-border-color{border-color: var(--wp--preset--color--vivid-cyan-blue) !important;}.has-vivid-purple-border-color{border-color: var(--wp--preset--color--vivid-purple) !important;}.has-vivid-cyan-blue-to-vivid-purple-gradient-background{background: var(--wp--preset--gradient--vivid-cyan-blue-to-vivid-purple) !important;}.has-light-green-cyan-to-vivid-green-cyan-gradient-background{background: var(--wp--preset--gradient--light-green-cyan-to-vivid-green-cyan) !important;}.has-luminous-vivid-amber-to-luminous-vivid-orange-gradient-background{background: var(--wp--preset--gradient--luminous-vivid-amber-to-luminous-vivid-orange) !important;}.has-luminous-vivid-orange-to-vivid-red-gradient-background{background: var(--wp--preset--gradient--luminous-vivid-orange-to-vivid-red) !important;}.has-very-light-gray-to-cyan-bluish-gray-gradient-background{background: var(--wp--preset--gradient--very-light-gray-to-cyan-bluish-gray) !important;}.has-cool-to-warm-spectrum-gradient-background{background: var(--wp--preset--gradient--cool-to-warm-spectrum) !important;}.has-blush-light-purple-gradient-background{background: var(--wp--preset--gradient--blush-light-purple) !important;}.has-blush-bordeaux-gradient-background{background: var(--wp--preset--gradient--blush-bordeaux) !important;}.has-luminous-dusk-gradient-background{background: var(--wp--preset--gradient--luminous-dusk) !important;}.has-pale-ocean-gradient-background{background: var(--wp--preset--gradient--pale-ocean) !important;}.has-electric-grass-gradient-background{background: var(--wp--preset--gradient--electric-grass) !important;}.has-midnight-gradient-background{background: var(--wp--preset--gradient--midnight) !important;}.has-small-font-size{font-size: var(--wp--preset--font-size--small) !important;}.has-medium-font-size{font-size: var(--wp--preset--font-size--medium) !important;}.has-large-font-size{font-size: var(--wp--preset--font-size--large) !important;}.has-x-large-font-size{font-size: var(--wp--preset--font-size--x-large) !important;}
|
||
/*# sourceURL=global-styles-inline-css */
|
||
</style>
|
||
|
||
<link rel='stylesheet' id='crp-public-css' href='/wp-content/plugins/custom-related-posts/dist/public.css?ver=1.7.2' type='text/css' media='all' />
|
||
<link rel='stylesheet' id='elementor-frontend-css' href='/wp-content/plugins/elementor/assets/css/frontend.min.css?ver=3.17.1' type='text/css' media='all' />
|
||
<link rel='stylesheet' id='eael-general-css' href='/wp-content/plugins/essential-addons-for-elementor-lite/assets/front-end/css/view/general.min.css?ver=5.8.13' type='text/css' media='all' />
|
||
<script type="text/javascript" src="/wp-includes/js/jquery/jquery.min.js?ver=3.7.1" id="jquery-core-js"></script>
|
||
<script type="text/javascript" src="/wp-includes/js/jquery/jquery-migrate.min.js?ver=3.4.1" id="jquery-migrate-js"></script>
|
||
<script type="text/javascript" src="/wp-content/plugins/sticky-menu-or-anything-on-scroll/assets/js/jq-sticky-anything.min.js?ver=2.1.1" id="stickyAnythingLib-js"></script>
|
||
<meta name="generator" content="WordPress 6.9.4" />
|
||
<!-- Meta Pixel Code -->
|
||
<script>
|
||
!function(f,b,e,v,n,t,s)
|
||
{if(f.fbq)return;n=f.fbq=function(){n.callMethod?
|
||
n.callMethod.apply(n,arguments):n.queue.push(arguments)};
|
||
if(!f._fbq)f._fbq=n;n.push=n;n.loaded=!0;n.version='2.0';
|
||
n.queue=[];t=b.createElement(e);t.async=!0;
|
||
t.src=v;s=b.getElementsByTagName(e)[0];
|
||
s.parentNode.insertBefore(t,s)}(window, document,'script',
|
||
'https://connect.facebook.net/en_US/fbevents.js');
|
||
fbq('init', '1053262429148154');
|
||
fbq('track', 'PageView');
|
||
</script>
|
||
<noscript><img height="1" width="1" style="display:none"
|
||
src="https://www.facebook.com/tr?id=1053262429148154&ev=PageView&noscript=1"
|
||
/></noscript>
|
||
<!-- End Meta Pixel Code -->
|
||
<meta name="generator" content="Elementor 3.17.1; features: e_dom_optimization, e_optimized_assets_loading, additional_custom_breakpoints; settings: css_print_method-external, google_font-enabled, font_display-auto">
|
||
<style type="text/css" id="syntaxhighlighteranchor"></style>
|
||
<style>ins.adsbygoogle { background-color: transparent; padding: 0; }</style><link rel="icon" href="/wp-content/uploads/2018/03/favicon-150x150.png" sizes="32x32" />
|
||
<link rel="icon" href="/wp-content/uploads/2018/03/favicon-300x300.png" sizes="192x192" />
|
||
<link rel="apple-touch-icon" href="/wp-content/uploads/2018/03/favicon-300x300.png" />
|
||
<meta name="msapplication-TileImage" content="/wp-content/uploads/2018/03/favicon-300x300.png" />
|
||
<style type="text/css" id="wp-custom-css">
|
||
.grecaptcha-badge {
|
||
display: none;
|
||
} </style>
|
||
<link rel='stylesheet' id='basecss-css' href='/wp-content/plugins/eu-cookie-law/css/style.css?ver=6.9.4' type='text/css' media='all' />
|
||
<link rel='stylesheet' id='lwptoc-main-css' href='/wp-content/plugins/luckywp-table-of-contents/front/assets/main.min.css?ver=2.1.4' type='text/css' media='all' />
|
||
|
||
</head>
|
||
|
||
<body itemtype='https://schema.org/Blog' itemscope='itemscope' class="wp-singular post-template-default single single-post postid-8298 single-format-standard wp-theme-astra ast-desktop ast-separate-container ast-right-sidebar astra-1.6.2 ast-header-custom-item-inside ast-blog-single-style-1 ast-single-post ast-inherit-site-logo-transparent ast-normal-title-enabled elementor-default elementor-kit-10350 aa-prefix-a2280-">
|
||
|
||
<div id="page" class="hfeed site">
|
||
<a class="skip-link screen-reader-text" href="#content">Skip to content</a>
|
||
|
||
|
||
|
||
<header itemtype="https://schema.org/WPHeader" itemscope="itemscope" id="masthead" class="site-header header-main-layout-2 ast-primary-menu-enabled ast-menu-toggle-icon ast-mobile-header-stack" role="banner">
|
||
|
||
|
||
|
||
<div class="main-header-bar-wrap">
|
||
<div class="main-header-bar">
|
||
<div class="ast-container">
|
||
|
||
<div class="ast-flex main-header-container">
|
||
|
||
<div class="site-branding">
|
||
<div class="ast-site-identity" itemscope="itemscope" itemtype="https://schema.org/Organization">
|
||
</div>
|
||
</div>
|
||
|
||
<!-- .site-branding -->
|
||
<div class="ast-mobile-menu-buttons">
|
||
|
||
|
||
<div class="ast-button-wrap">
|
||
<button type="button" class="menu-toggle main-header-menu-toggle ast-mobile-menu-buttons-fill " rel="main-menu" aria-controls='primary-menu' aria-expanded='false'>
|
||
<span class="screen-reader-text">Main Menu</span>
|
||
<span class="menu-toggle-icon"></span>
|
||
</button>
|
||
</div>
|
||
|
||
|
||
</div>
|
||
<div class="ast-main-header-bar-alignment"><div class="main-header-bar-navigation"><nav itemtype="https://schema.org/SiteNavigationElement" itemscope="itemscope" id="site-navigation" class="ast-flex-grow-1" role="navigation" aria-label="Site Navigation"><div class="main-navigation"><ul id="primary-menu" class="main-header-menu ast-nav-menu ast-flex ast-justify-content-flex-end submenu-with-border"><li id="menu-item-14322" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-14322"><a href="/">Home</a></li>
|
||
<li id="menu-item-14002" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-14002"><a href="/posts">Blog</a></li>
|
||
<li id="menu-item-10416" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-10416"><a href="/courses/">Courses</a></li>
|
||
<li id="menu-item-13640" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-13640"><a target="_blank" href="https://realworldserverless.com">Podcast</a></li>
|
||
<li id="menu-item-10532" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-10532"><a href="/hire-me/">Consulting</a></li>
|
||
</ul></div></nav></div></div> </div><!-- Main Header Container -->
|
||
</div><!-- ast-row -->
|
||
</div> <!-- Main Header Bar -->
|
||
</div> <!-- Main Header Bar Wrap -->
|
||
|
||
|
||
</header><!-- #masthead -->
|
||
|
||
|
||
|
||
<div id="content" class="site-content">
|
||
|
||
<div class="ast-container">
|
||
|
||
|
||
|
||
<div id="primary" class="content-area primary">
|
||
|
||
|
||
<main id="main" class="site-main" role="main">
|
||
|
||
|
||
|
||
|
||
|
||
<article itemtype="https://schema.org/CreativeWork" itemscope="itemscope" id="post-8298" class="post-8298 post type-post status-publish format-standard hentry category-me category-microservices category-programming tag-monitoring ast-article-single">
|
||
|
||
|
||
|
||
<div class="ast-post-format- ast-no-thumb single-layout-1">
|
||
|
||
|
||
<header class="entry-header ast-no-thumbnail">
|
||
|
||
|
||
<div class="ast-single-post-order">
|
||
<h1 class="entry-title" itemprop="headline">We can do better than percentile latencies</h1><div class="entry-meta"><span class="tags-links"><a href="/tags/monitoring/" rel="tag">Monitoring</a></span></div> </div>
|
||
|
||
|
||
</header><!-- .entry-header -->
|
||
|
||
|
||
<div class="entry-content clear" itemprop="text">
|
||
|
||
|
||
<!-- Author meta information -->
|
||
<div style="display: flex; align-items: center; margin-top: 1em; margin-bottom: 1.8em;">
|
||
<img style="border-radius: 9999px;" src="https://res.cloudinary.com/theburningmonk/image/upload/f_auto,c_scale,w_90/theburningmonk.com/mugshot.png"/>
|
||
<div style="font-family: Arial, sans-serif; margin-left: 15px; display: flex; flex-direction: column; row-gap: 2px;">
|
||
<a href="/about" target="_blank"><p style="font-size: 1.4em; font-weight: bold; margin: 0">Yan Cui</p></a>
|
||
<p style="font-size: 1.2em; margin: 0; line-height: 1.2;">I help clients go faster for less using serverless technologies.</p>
|
||
</div>
|
||
</div>
|
||
|
||
<!--noindex--><div class="lwptoc lwptoc-dark lwptoc-notInherit" data-smooth-scroll="1" data-smooth-scroll-offset="0"><div class="lwptoc_i"> <div class="lwptoc_header">
|
||
<b class="lwptoc_title">Table of Content</b> </div>
|
||
<div class="lwptoc_items lwptoc_items-visible">
|
||
<div class="lwptoc_itemWrap"><div class="lwptoc_item"> <a href="#The_problems_with_percentile_latencies" rel="nofollow">
|
||
<span class="lwptoc_item_label">The problems with percentile latencies</span>
|
||
</a>
|
||
<div class="lwptoc_itemWrap"><div class="lwptoc_item"> <a href="#Percentile_latencies_are_averaged" rel="nofollow">
|
||
<span class="lwptoc_item_label">Percentile latencies are “averaged”</span>
|
||
</a>
|
||
</div><div class="lwptoc_item"> <a href="#Cant_tell_how_bad_the_bad_times_are" rel="nofollow">
|
||
<span class="lwptoc_item_label">Can’t tell how bad the bad times are</span>
|
||
</a>
|
||
</div><div class="lwptoc_item"> <a href="#Most_data_points_are_not_actionable" rel="nofollow">
|
||
<span class="lwptoc_item_label">Most data points are not actionable</span>
|
||
</a>
|
||
</div></div></div><div class="lwptoc_item"> <a href="#What_can_we_do_instead" rel="nofollow">
|
||
<span class="lwptoc_item_label">What can we do instead?</span>
|
||
</a>
|
||
</div><div class="lwptoc_item"> <a href="#Move_aside_error_count" rel="nofollow">
|
||
<span class="lwptoc_item_label">Move aside, error count</span>
|
||
</a>
|
||
</div><div class="lwptoc_item"> <a href="#Different_dashboard_for_different_disciplines" rel="nofollow">
|
||
<span class="lwptoc_item_label">Different dashboard for different disciplines</span>
|
||
</a>
|
||
</div><div class="lwptoc_item"> <a href="#Summary" rel="nofollow">
|
||
<span class="lwptoc_item_label">Summary</span>
|
||
</a>
|
||
</div></div></div>
|
||
</div></div><!--/noindex--><div class="a2280-before-content" style="margin-left: auto; margin-right: auto; text-align: center; margin-top: 40px; margin-bottom: 50px; " id="a2280-1650998105"><a href="https://productionreadyserverless.com/?utm_campaign=connect-the-dots&utm_source=blog&utm_medium=image-banner&utm_content=variant3" target="_blank" aria-label="connect-the-dots-variant-3"><img loading="lazy" decoding="async" src="/wp-content/uploads/2024/03/connect-the-dots-variant-3-1.png" alt="" srcset="/wp-content/uploads/2024/03/connect-the-dots-variant-3-1.png 1024w, /wp-content/uploads/2024/03/connect-the-dots-variant-3-1-300x76.png 300w, /wp-content/uploads/2024/03/connect-the-dots-variant-3-1-779x198.png 779w" sizes="(max-width: 1024px) 100vw, 1024px" width="1024" height="260"></a></div><p><span style="font-weight: 400;">Years ago, I used average latency on every dashboard and every alarm. That is, until I woke up to the problems of average latencies along with </span><a href="https://www.elastic.co/blog/averages-can-dangerous-use-percentile" target="_blank" rel="noopener noreferrer"><span style="font-weight: 400;">everybody else in the industry</span></a><span style="font-weight: 400;">:</span></p>
|
||
<ul>
|
||
<li style="font-weight: 400;"><span style="font-weight: 400;">When the dataset is small it can be easily skewed by a small number of outliers.</span></li>
|
||
<li style="font-weight: 400;"><span style="font-weight: 400;">When the dataset is large it can hide important details such as 10% of your users are experiencing slow responses!</span></li>
|
||
<li style="font-weight: 400;"><span style="font-weight: 400;">It is just a statistical value, </span><a href="https://www.autodeskresearch.com/publications/samestats" target="_blank" rel="noopener noreferrer"><span style="font-weight: 400;">on its own it’s almost meaningless</span></a><span style="font-weight: 400;">. Until we plot the latency distribution we won’t actually understand how our users are experiencing our system.</span></li>
|
||
</ul>
|
||
<p><a href="https://www.autodeskresearch.com/publications/samestats"><img fetchpriority="high" decoding="async" class="alignnone wp-image-8300" src="/wp-content/uploads/2018/10/dinosequentialsmaller.gif" alt="" width="600" height="241"></a></p>
|
||
<p><span style="font-weight: 400;">Nowadays, the leading practice is to use 95th or 99th percentile latencies (often referred to as </span><i><span style="font-weight: 400;">tail latency</span></i><span style="font-weight: 400;">) instead. These percentile latencies tell us the worst response time 95% or 99% of users are getting. They generally align with our SLOs or SLAs, and gives us a meaningful target to work towards – e.g. “99% of requests should complete in 1s or less”.</span></p>
|
||
<p><span style="font-weight: 400;">Using percentile latencies is a big improvement on average latencies. But over the years I have experienced a number of pain points with them, and I think we can do better.</span></p>
|
||
<h1><span id="The_problems_with_percentile_latencies"><span style="font-weight: 400;">The problems with percentile latencies</span></span></h1>
|
||
<p><span style="font-weight: 400;">The biggest problem with using percentile latencies is not actually with percentile latencies themselves, but with the way it’s implemented by almost </span><i><span style="font-weight: 400;">every single</span></i><span style="font-weight: 400;"> vendor out there.</span></p>
|
||
<h2><span id="Percentile_latencies_are_averaged"><span style="font-weight: 400;">Percentile latencies are “averaged”</span></span></h2>
|
||
<p><span style="font-weight: 400;">Because it takes a lot of storage and data processing power to ingest all the raw data, most vendors would generate the percentile latency values at the agent level. This means by the time latency data is ingested, they have lost all granularity and comes in as summaries – mean, min, max, and some predefined percentiles. To show you the final 99th percentile latency, the vendor would (by default) average the 99th percentile latencies that has been ingested.</span></p>
|
||
<p><a href="http://latencytipoftheday.blogspot.com/2014/06/latencytipoftheday-you-cant-average.html"><span style="font-weight: 400;">You can’t average percentiles</span></a><span style="font-weight: 400;">, it doesn’t make any sense! This whole practice gives you a meaningless statistical value, and it’s in no way the true 99th percentile latency of your service. Averaging the percentiles inherit all the same problems with averages that percentile latencies were supposed to address!</span></p>
|
||
<p><span style="font-weight: 400;">I have seen 99th percentile latencies differ by order of magnitude depending on how I choose to aggregate them. Seriously, how am I supposed to trust this number when choosing the max over average can produce a 10x difference! You might as well stick a randomly generate number on the dashboard, it’s almost as meaningful as the “the average of 99th percentiles”. </span></p>
|
||
<p><span style="font-weight: 400;">This practice is so widespread, almost every monitoring tool I have tried does this. </span><a href="https://www.honeycomb.io/"><span style="font-weight: 400;">Honeycomb</span></a><span style="font-weight: 400;"> is one of the few exceptions because they actually ingest and process all the raw events.</span></p>
|
||
<h2><span id="Cant_tell_how_bad_the_bad_times_are"><span style="font-weight: 400;">Can’t tell how bad the bad times are</span></span></h2>
|
||
<p><span style="font-weight: 400;">It’s great that we can use percentiles to monitor our compliance with SLOs/SLAs. When things are going well, it gives us that warm and fuzzy feeling that all is well with the world.</span></p>
|
||
<p id="JRCxgva"><img decoding="async" class="alignnone wp-image-8301" src="/wp-content/uploads/2018/10/img_5bb519c06fe98.png" alt="" width="700" height="250" srcset="/wp-content/uploads/2018/10/img_5bb519c06fe98.png 924w, /wp-content/uploads/2018/10/img_5bb519c06fe98-300x107.png 300w, /wp-content/uploads/2018/10/img_5bb519c06fe98-1024x366.png 1024w" sizes="(max-width: 700px) 100vw, 700px"></p>
|
||
<p><span style="font-weight: 400;">But when they go wrong, and sometimes they go very wrong, we are left wondering just how bad things are. Are 10% of my users getting response time of 1s and above? Is it 20%? Could it be 50% of my users are getting a bad experience? I just don’t know! I can use various percentiles as gates but that approach only goes so far before it overwhelms my dashboards.</span></p>
|
||
<p id="JymQPcn"><img decoding="async" class="alignnone wp-image-8302" src="/wp-content/uploads/2018/10/img_5bb519dd5222e.png" alt="" width="700" height="246" srcset="/wp-content/uploads/2018/10/img_5bb519dd5222e.png 924w, /wp-content/uploads/2018/10/img_5bb519dd5222e-300x105.png 300w, /wp-content/uploads/2018/10/img_5bb519dd5222e-1024x359.png 1024w" sizes="(max-width: 700px) 100vw, 700px"></p>
|
||
<h2><span id="Most_data_points_are_not_actionable"><span style="font-weight: 400;">Most data points are not actionable</span></span></h2>
|
||
<p><span style="font-weight: 400;">As much as I love to stare at those green tiles and line graphs and know that:</span></p>
|
||
<ol>
|
||
<li style="font-weight: 400;"><span style="font-weight: 400;">We have done a good job, go team!</span></li>
|
||
<li style="font-weight: 400;"><span style="font-weight: 400;">Everything’s fine, there’s </span><i><span style="font-weight: 400;">no need to do anything</span></i></li>
|
||
</ol>
|
||
<p><span style="font-weight: 400;">Indeed, most of the information I consume when I look at the dashboard, are not immediately actionable.</span></p>
|
||
<p><span style="font-weight: 400;">To be clear, I’m not saying that percentile latencies are not useful and that you shouldn’t show them on dashboards. But as the on-call engineer, my attention is heavily biased towards “what is wrong” than “what is right”. I want dashboards that match my focus and not force me to scan through tons of information and pay the cognitive price to identify the signals from the noise.</span></p>
|
||
<p><span style="font-weight: 400;">As an application developer, my definition for “what is wrong” is quite different. As an application developer, I’m looking for unexpected changes in application performance. If the latency profile of my service changes after a deployment, or other related event (e.g. a marketing campaign, or a new feature being toggled on) then I need to investigate those.</span></p>
|
||
<p><span style="font-weight: 400;">This dichotomy in what’s important for ops engineers and application developers means we should have separate dashboards for each. More on this later.</span></p>
|
||
<h1><span id="What_can_we_do_instead"><span style="font-weight: 400;">What can we do instead?</span></span></h1>
|
||
<p><span style="font-weight: 400;">What could we use instead of percentiles as the </span><i><span style="font-weight: 400;">primary</span></i><span style="font-weight: 400;"> metric to monitor our application’s performance with and alert us when it starts to deteriorate?</span></p>
|
||
<p><span style="font-weight: 400;">If you go back to your SLOs or SLAs, you probably have something along the lines of “99% of requests should complete in 1s or less”. In other words, </span><i><span style="font-weight: 400;">less than 1% of requests</span></i><span style="font-weight: 400;"> is allowed to </span><i><span style="font-weight: 400;">take</span></i> <i><span style="font-weight: 400;">more than 1s to complete</span></i><span style="font-weight: 400;">.</span></p>
|
||
<p><span style="font-weight: 400;">So what if we monitor the</span><i><span style="font-weight: 400;"> percentage of requests that are over the threshold </span></i><span style="font-weight: 400;">instead? To alert us when our SLAs are violated, we can trigger alarms when that percentage is </span><i><span style="font-weight: 400;">greater than 1%</span></i><span style="font-weight: 400;"> over some predefined time window.</span></p>
|
||
<p><span style="font-weight: 400;">Unlike percentiles, this percentage can be easily aggregated across multiple agents:</span></p>
|
||
<ul>
|
||
<li style="font-weight: 400;"><span style="font-weight: 400;">Each agent submits total request count and number of requests over threshold</span></li>
|
||
<li style="font-weight: 400;"><span style="font-weight: 400;">Sum the two numbers across all agents</span></li>
|
||
<li style="font-weight: 400;"><span style="font-weight: 400;">Divide total number of requests over threshold by total request count and you have an accurate percentage</span></li>
|
||
</ul>
|
||
<p><span style="font-weight: 400;">During an outage, when our SLAs are impacted, this metric tells us the number of requests that have been affected. Once we understood the blast radius of the outage, the percentile and max latencies then become useful metrics to gauge </span><i><span style="font-weight: 400;">how much</span></i><span style="font-weight: 400;"> user experience has been impacted.</span></p>
|
||
<h1><span id="Move_aside_error_count"><span style="font-weight: 400;">Move aside, error count</span></span></h1>
|
||
<p><span style="font-weight: 400;">We can apply the same approach to how we monitor errors. For any given system, you have a small and finite number of success cases. You also have a finite number of known failure cases, which you can actively monitor. But then there are the </span><i><span style="font-weight: 400;">unknown unknowns</span></i><span style="font-weight: 400;"> – the failure cases that you hadn’t even realised you have and wouldn’t know to monitor!</span></p>
|
||
<p><span style="font-weight: 400;">So instead of putting all your efforts into monitoring every single way your system can possibly fail, you should instead monitor for the </span><i><span style="font-weight: 400;">absence of a success indicator</span></i><span style="font-weight: 400;">. For APIs, this can be the percentage of requests that do not have a 2xx or 4xx response. For event processing systems, it might be the percentage of incoming events that do not have a corresponding outgoing event or observable side-effect.</span></p>
|
||
<p><span style="font-weight: 400;">This tells you at a high level that “something is wrong”, but not “what is wrong”. To figure the “what”, you need to build observability into your system so you can ask arbitrary questions about its state and debug problems that you hadn’t thought of ahead of time.</span></p>
|
||
<h1><span id="Different_dashboard_for_different_disciplines"><span style="font-weight: 400;">Different dashboard for different disciplines</span></span></h1>
|
||
<p><span style="font-weight: 400;">As we discussed earlier, different disciplines require different views of the system. One of the most important design principles of a dashboard is that it must present information that is </span><i><span style="font-weight: 400;">actionable</span></i><span style="font-weight: 400;">. And since the action you will likely take depends on your role in the organization, you really need dashboards that show you information that are actionable </span><i><span style="font-weight: 400;">for you</span></i><span style="font-weight: 400;">!</span></p>
|
||
<p><span style="font-weight: 400;">Don’t try to create the dashboard to rule them all by cramping every metric onto it. You will just end up with something nobody actually wants! Instead, consider creating a few specialised dashboards, one for each discipline, for instance:</span></p>
|
||
<ul>
|
||
<li style="font-weight: 400;"><span style="font-weight: 400;">Ops/SRE engineers care about outages and incidents first and foremost. Actionable information for them would help them detect incidents quickly and assess their severities easily. For example, percentage of requests that are over the threshold, or the percentage of requests that did not yield a successful response.</span></li>
|
||
<li style="font-weight: 400;"><span style="font-weight: 400;">Developers care about application performance. Percentile latencies are very relevant here, as are other resource metrics such as CPU and memory usage metrics.</span></li>
|
||
<li style="font-weight: 400;"><span style="font-weight: 400;">Product owners and business analysts might also need their own dashboards too. They care about business metrics such as retention, conversion rate, or sales.</span></li>
|
||
</ul>
|
||
<h1><span id="Summary"><span style="font-weight: 400;">Summary</span></span></h1>
|
||
<p><span style="font-weight: 400;">When you go to see a doctor, the doctor would try to ascertain (as part of the diagnosis):</span></p>
|
||
<ul>
|
||
<li style="font-weight: 400;"><span style="font-weight: 400;">What, and where your symptoms are.</span></li>
|
||
<li style="font-weight: 400;"><span style="font-weight: 400;">The severity of your symptoms.</span></li>
|
||
<li style="font-weight: 400;"><span style="font-weight: 400;">How long have you experienced these symptoms.</span></li>
|
||
<li style="font-weight: 400;"><span style="font-weight: 400;">Any correlated events that could have triggered the symptoms.</span></li>
|
||
</ul>
|
||
<p><span style="font-weight: 400;">The doctor would use these information to derive a treatment plan, or not, as might be the case. As the on-call engineer dealing with an incident, I go through the same process to figure out what went wrong and how I should respond. </span></p>
|
||
<p><span style="font-weight: 400;">In this post we discussed the shortcomings of percentile latencies, which makes it a poor choice of metric in these scenarios:</span></p>
|
||
<ul>
|
||
<li style="font-weight: 400;"><span style="font-weight: 400;">They are usually calculated at the agent level, and averaged, which produces a nonsensical value that doesn’t reflect the true percentile latency of my system.</span></li>
|
||
<li style="font-weight: 400;"><span style="font-weight: 400;">They don’t tell you the impact of an incident.</span></li>
|
||
</ul>
|
||
<p><span style="font-weight: 400;">We proposed an alternative approach – to monitor service health by tracking the percentage of requests whose response time is over the threshold. Unlike percentiles, this metric aggregates well when summarising results from multiple agents, and gives us a clear picture of the impact of an outage.</span></p>
|
||
<p><span style="font-weight: 400;">We can apply the same approach to how we monitor errors. Instead of monitoring each and every error we know about, and miss all the errors we don’t know about, we should monitor for the </span><i><span style="font-weight: 400;">absence of success indicators</span></i><span style="font-weight: 400;">.</span></p>
|
||
<p><span style="font-weight: 400;">Unfortunately, this is not how existing monitoring tools work… For this vision to come to pass we need support from our vendors and change the way we handle monitoring data. The next time you meet with your vendor, let them know that you need something better than percentile latencies ;-) And if you know of any tools that let you implement the approach I outlined here, please let me know via the comments below!</span></p>
|
||
<div class="a2280-after-content" style="margin-top: 50px; margin-bottom: 50px; " id="a2280-984245916"><div style="padding: 20px; padding-left: 25px; border-style: solid; border-width: 5px; border-radius: 10px; background-color: #e3f6f5; color: #272343;">
|
||
<p><strong style="font-size: 24px;">Whenever you’re ready, here are 3 ways I can help you:</strong></p>
|
||
<ol class="unordered_list">
|
||
<li style="margin-bottom: 10px;"><a href="https://productionreadyserverless.com/?utm_campaign=3-ways-I-can-help&utm_source=blog&utm_content=text-link" target="_blank" rel="noopener noreferrer"><strong>Production-Ready Serverless</strong></a>: Join 20+ AWS Heroes & Community Builders and 1000+ other students in levelling up your serverless game. This is your one-stop shop for <strong>quickly levelling up your serverless skills</strong>.</li>
|
||
<li style="margin-bottom: 10px;">I help clients <strong>launch product ideas</strong>, <strong>improve their development processes</strong> and <strong>upskill their teams</strong>. If you’d like to work together, then let’s <a href="/hire-me/" target="_blank" rel="noopener"><strong>get in touch</strong></a>.</li>
|
||
<li style="margin-bottom: 10px;"><a href="https://discord.gg/Ucc9nZBA8H" target="_blank" rel="noopener"><strong>Join my community on Discord</strong></a>, ask questions, and join the discussion on all things AWS and Serverless.</li>
|
||
</ol>
|
||
</div>
|
||
<p><!--more--></p>
|
||
</div>
|
||
|
||
|
||
</div><!-- .entry-content .clear -->
|
||
</div>
|
||
|
||
|
||
</article><!-- #post-## -->
|
||
|
||
|
||
<nav class="navigation post-navigation" aria-label="Posts">
|
||
<h2 class="screen-reader-text">Post navigation</h2>
|
||
<div class="nav-links"><div class="nav-previous"><a href="/2018/09/production-ready-serverless-is-coming-to-a-workshop-near-you/" rel="prev"><span class="ast-left-arrow">←</span> Previous Post</a></div><div class="nav-next"><a href="/2018/10/weekly-update-12/" rel="next">Next Post <span class="ast-right-arrow">→</span></a></div></div>
|
||
</nav>
|
||
|
||
|
||
|
||
</main><!-- #main -->
|
||
|
||
|
||
|
||
</div><!-- #primary -->
|
||
|
||
|
||
|
||
<div itemtype="https://schema.org/WPSideBar" itemscope="itemscope" id="secondary" class="widget-area secondary" role="complementary">
|
||
|
||
<div class="sidebar-main">
|
||
|
||
|
||
|
||
<aside id="block-65" class="widget widget_block"><div style="position: fixed; margin-top: 50px; padding-right: 35px;">
|
||
|
||
<p style="margin: 0px; font-size: 1.75rem; font-weight: 500;">Become a better AWS developer</p>
|
||
|
||
<p style="margin: 0px; margin-bottom: -45px;">Join 17k readers and level up your AWS game in just 5 mins a week. Every Monday, I share practical tips, tutorials and best practices for building serverless architectures for the real world.</p>
|
||
|
||
<script async data-uid="35b71caae2" src="https://theburningmonk.ck.page/35b71caae2/index.js"></script>
|
||
|
||
|
||
<form style="margin-top: 50px; width: 100%; display: flex; align-items: center;" action="https://www.google.com/search" method="get" target="_blank">
|
||
<input type="hidden" name="q" id="siteSearch" value="site:theburningmonk.com ">
|
||
<input style="width: 80%; max-width: 90%" type="text" placeholder="Search the site..." id="userQuery">
|
||
<button type="submit" onclick="updateAction();" style="padding: 10px; border: none; color: white; border-radius: 0 5px 5px 0; cursor: pointer; display: flex; align-items: center; justify-content: center;">
|
||
<svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" style="width: 20px; height: 20px;">
|
||
<path stroke-linecap="round" stroke-linejoin="round" d="m21 21-5.197-5.197m0 0A7.5 7.5 0 1 0 5.196 5.196a7.5 7.5 0 0 0 10.607 10.607Z" />
|
||
</svg>
|
||
</button>
|
||
</form>
|
||
<script>
|
||
function updateAction() {
|
||
var baseSearch = "site:theburningmonk.com ";
|
||
var userInput = document.getElementById('userQuery').value;
|
||
document.getElementById('siteSearch').value = baseSearch + userInput;
|
||
}
|
||
</script>
|
||
</div></aside>
|
||
|
||
|
||
</div><!-- .sidebar-main -->
|
||
</div><!-- #secondary -->
|
||
|
||
|
||
|
||
</div> <!-- ast-container -->
|
||
|
||
</div><!-- #content -->
|
||
|
||
|
||
|
||
|
||
<footer itemtype="https://schema.org/WPFooter" itemscope="itemscope" id="colophon" class="site-footer" role="contentinfo">
|
||
|
||
|
||
|
||
<div class="ast-small-footer footer-sml-layout-2">
|
||
<div class="ast-footer-overlay">
|
||
<div class="ast-container">
|
||
<div class="ast-small-footer-wrap" >
|
||
<div class="ast-row ast-flex">
|
||
|
||
<div class="ast-small-footer-section ast-small-footer-section-1 ast-small-footer-section-equally ast-col-md-6 ast-col-xs-12" >
|
||
<div class="footer-primary-navigation"><ul id="menu-footermenu" class="nav-menu"><li id="menu-item-12499" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-12499"><a href="/about/">About</a></li>
|
||
<li id="menu-item-12500" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-12500"><a href="/subscribe/">Newsletter</a></li>
|
||
<li id="menu-item-12501" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-12501"><a target="_blank" href="https://realworldserverless.com">Podcast</a></li>
|
||
<li id="menu-item-12505" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-12505"><a href="/speaking-engagements/">Public speaking</a></li>
|
||
<li id="menu-item-12932" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-12932"><a href="/sponsorship/">Sponsorship</a></li>
|
||
<li id="menu-item-12504" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-12504"><a target="_blank" href="https://medium.com/theburningmonk-com/all-my-posts-on-serverless-aws-lambda-43c17a147f91">Serverless posts</a></li>
|
||
<li id="menu-item-12506" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-12506"><a href="/cloudformation-ref-and-getatt-cheatsheet/">CloudFormation cheatsheet</a></li>
|
||
</ul></div> </div>
|
||
|
||
<div class="ast-small-footer-section ast-small-footer-section-2 ast-small-footer-section-equally ast-col-md-6 ast-col-xs-12" >
|
||
Copyright © 2026 theburningmonk limited </div>
|
||
|
||
</div> <!-- .ast-row.ast-flex -->
|
||
</div><!-- .ast-small-footer-wrap -->
|
||
</div><!-- .ast-container -->
|
||
</div><!-- .ast-footer-overlay -->
|
||
</div><!-- .ast-small-footer-->
|
||
|
||
|
||
</footer><!-- #colophon -->
|
||
|
||
|
||
</div><!-- #page -->
|
||
|
||
|
||
<script>(function(){var advanced_ads_ga_UID="UA-12216268-1",advanced_ads_ga_anonymIP=!!1;window.advanced_ads_check_adblocker=function(t){var n=[],e=null;function a(t){var n=window.requestAnimationFrame||window.mozRequestAnimationFrame||window.webkitRequestAnimationFrame||function(t){return setTimeout(t,16)};n.call(window,t)}return a((function(){var t=document.createElement("div");t.innerHTML=" ",t.setAttribute("class","ad_unit ad-unit text-ad text_ad pub_300x250"),t.setAttribute("style","width: 1px !important; height: 1px !important; position: absolute !important; left: 0px !important; top: 0px !important; overflow: hidden !important;"),document.body.appendChild(t),a((function(){var a,o,i=null===(a=(o=window).getComputedStyle)||void 0===a?void 0:a.call(o,t),d=null==i?void 0:i.getPropertyValue("-moz-binding");e=i&&"none"===i.getPropertyValue("display")||"string"==typeof d&&-1!==d.indexOf("about:");for(var c=0,r=n.length;c<r;c++)n[c](e);n=[]}))})),function(t){"undefined"==typeof advanced_ads_adblocker_test&&(e=!0),null!==e?t(e):n.push(t)}}(),(()=>{function t(t){this.UID=t,this.analyticsObject="function"==typeof gtag;var n=this;return this.count=function(){gtag("event","AdBlock",{event_category:"Advanced Ads",event_label:"Yes",non_interaction:!0,send_to:n.UID})},function(){if(!n.analyticsObject){var e=document.createElement("script");e.src="https://www.googletagmanager.com/gtag/js?id="+t,e.async=!0,document.body.appendChild(e),window.dataLayer=window.dataLayer||[],window.gtag=function(){dataLayer.push(arguments)},n.analyticsObject=!0,gtag("js",new Date)}var a={send_page_view:!1,transport_type:"beacon"};window.advanced_ads_ga_anonymIP&&(a.anonymize_ip=!0),gtag("config",t,a)}(),this}advanced_ads_check_adblocker((function(n){n&&new t(advanced_ads_ga_UID).count()}))})();})();</script><script type="speculationrules">
|
||
{"prefetch":[{"source":"document","where":{"and":[{"href_matches":"/*"},{"not":{"href_matches":["/wp-*.php","/wp-admin/*","/wp-content/uploads/*","/wp-content/*","/wp-content/plugins/*","/wp-content/themes/astra/*","/*\\?(.+)"]}},{"not":{"selector_matches":"a[rel~=\"nofollow\"]"}},{"not":{"selector_matches":".no-prefetch, .no-prefetch a"}}]},"eagerness":"conservative"}]}
|
||
</script>
|
||
<script src="https://cdn.usefathom.com/script.js" data-site="ORFHAFTY" defer></script>
|
||
<!-- This site is converting visitors into subscribers and customers with OptinMonster - https://optinmonster.com -->
|
||
<script>(function(d,u,ac){var s=d.createElement('script');s.type='text/javascript';s.src='https://a.omappapi.com/app/js/api.min.js';s.async=true;s.dataset.user=u;s.dataset.account=ac;d.getElementsByTagName('head')[0].appendChild(s);})(document,280271,298131);</script>
|
||
<!-- / https://optinmonster.com --><!-- This site is converting visitors into subscribers and customers with OptinMonster - https://optinmonster.com :: Campaign Title: new years 2024 -->
|
||
<script>(function(d,u,ac){var s=d.createElement('script');s.type='text/javascript';s.src='https://a.omappapi.com/app/js/api.min.js';s.async=true;s.dataset.user=u;s.dataset.campaign=ac;d.getElementsByTagName('head')[0].appendChild(s);})(document,349472,'ceqrmejgxwwo1g9vww2o');</script>
|
||
<!-- / OptinMonster --><!-- This site is converting visitors into subscribers and customers with OptinMonster - https://optinmonster.com :: Campaign Title: lambda cold start course -->
|
||
<script>(function(d,u,ac){var s=d.createElement('script');s.type='text/javascript';s.src='https://a.omappapi.com/app/js/api.min.js';s.async=true;s.dataset.user=u;s.dataset.campaign=ac;d.getElementsByTagName('head')[0].appendChild(s);})(document,349472,'ruqjlqe5tb9gh5zviazw');</script>
|
||
<!-- / OptinMonster --> <script type="text/javascript">
|
||
var ceqrmejgxwwo1g9vww2o_shortcode = true;var ruqjlqe5tb9gh5zviazw_shortcode = true; </script>
|
||
<script type="text/javascript" id="google_cse_v2-js-extra">
|
||
/* <![CDATA[ */
|
||
var scriptParams = {"google_search_engine_id":"006830272059582146546:wu5sqrhfjes"};
|
||
//# sourceURL=google_cse_v2-js-extra
|
||
/* ]]> */
|
||
</script>
|
||
<script type="text/javascript" src="/wp-content/plugins/wp-google-search/assets/js/google_cse_v2.js?ver=1" id="google_cse_v2-js"></script>
|
||
<script type="text/javascript" id="astra-theme-js-js-extra">
|
||
/* <![CDATA[ */
|
||
var astra = {"break_point":"921","isRtl":""};
|
||
//# sourceURL=astra-theme-js-js-extra
|
||
/* ]]> */
|
||
</script>
|
||
<script type="text/javascript" src="/wp-content/themes/astra/assets/js/minified/style.min.js?ver=1.6.2" id="astra-theme-js-js"></script>
|
||
<script type="text/javascript" id="convertkit-broadcasts-js-extra">
|
||
/* <![CDATA[ */
|
||
var convertkit_broadcasts = {"ajax_url":"https://theburningmonk.com/wp-admin/admin-ajax.php","action":"convertkit_broadcasts_render","debug":""};
|
||
//# sourceURL=convertkit-broadcasts-js-extra
|
||
/* ]]> */
|
||
</script>
|
||
<script type="text/javascript" src="/wp-content/plugins/convertkit/resources/frontend/js/broadcasts.js?ver=2.5.5" id="convertkit-broadcasts-js"></script>
|
||
<script type="text/javascript" id="convertkit-js-js-extra">
|
||
/* <![CDATA[ */
|
||
var convertkit = {"ajaxurl":"https://theburningmonk.com/wp-admin/admin-ajax.php","debug":"","nonce":"9b34b22409","subscriber_id":""};
|
||
//# sourceURL=convertkit-js-js-extra
|
||
/* ]]> */
|
||
</script>
|
||
<script type="text/javascript" src="/wp-content/plugins/convertkit/resources/frontend/js/convertkit.js?ver=2.5.5" id="convertkit-js-js"></script>
|
||
<script type="text/javascript" id="stickThis-js-extra">
|
||
/* <![CDATA[ */
|
||
var sticky_anything_engage = {"element":".main-header-bar-wrap","topspace":"0","minscreenwidth":"651","maxscreenwidth":"999999","zindex":"1","legacymode":"","dynamicmode":"","debugmode":"","pushup":"","adminbar":""};
|
||
//# sourceURL=stickThis-js-extra
|
||
/* ]]> */
|
||
</script>
|
||
<script type="text/javascript" src="/wp-content/plugins/sticky-menu-or-anything-on-scroll/assets/js/stickThis.js?ver=2.1.1" id="stickThis-js"></script>
|
||
<script>(function(d){var s=d.createElement("script");s.type="text/javascript";s.src="https://a.omappapi.com/app/js/api.min.js";s.async=true;s.id="omapi-script";d.getElementsByTagName("head")[0].appendChild(s);})(document);</script><script type="text/javascript" id="eael-general-js-extra">
|
||
/* <![CDATA[ */
|
||
var localize = {"ajaxurl":"https://theburningmonk.com/wp-admin/admin-ajax.php","nonce":"da7f9275fa","i18n":{"added":"Added ","compare":"Compare","loading":"Loading..."},"eael_translate_text":{"required_text":"is a required field","invalid_text":"Invalid","billing_text":"Billing","shipping_text":"Shipping","fg_mfp_counter_text":"of"},"page_permalink":"https://theburningmonk.com/2018/10/we-can-do-better-than-percentile-latencies/","cart_redirectition":"","cart_page_url":"","el_breakpoints":{"mobile":{"label":"Mobile Portrait","value":767,"default_value":767,"direction":"max","is_enabled":true},"mobile_extra":{"label":"Mobile Landscape","value":880,"default_value":880,"direction":"max","is_enabled":false},"tablet":{"label":"Tablet Portrait","value":1024,"default_value":1024,"direction":"max","is_enabled":true},"tablet_extra":{"label":"Tablet Landscape","value":1200,"default_value":1200,"direction":"max","is_enabled":false},"laptop":{"label":"Laptop","value":1366,"default_value":1366,"direction":"max","is_enabled":false},"widescreen":{"label":"Widescreen","value":2400,"default_value":2400,"direction":"min","is_enabled":false}},"ParticleThemesData":{"default":"{\"particles\":{\"number\":{\"value\":160,\"density\":{\"enable\":true,\"value_area\":800}},\"color\":{\"value\":\"#ffffff\"},\"shape\":{\"type\":\"circle\",\"stroke\":{\"width\":0,\"color\":\"#000000\"},\"polygon\":{\"nb_sides\":5},\"image\":{\"src\":\"img/github.svg\",\"width\":100,\"height\":100}},\"opacity\":{\"value\":0.5,\"random\":false,\"anim\":{\"enable\":false,\"speed\":1,\"opacity_min\":0.1,\"sync\":false}},\"size\":{\"value\":3,\"random\":true,\"anim\":{\"enable\":false,\"speed\":40,\"size_min\":0.1,\"sync\":false}},\"line_linked\":{\"enable\":true,\"distance\":150,\"color\":\"#ffffff\",\"opacity\":0.4,\"width\":1},\"move\":{\"enable\":true,\"speed\":6,\"direction\":\"none\",\"random\":false,\"straight\":false,\"out_mode\":\"out\",\"bounce\":false,\"attract\":{\"enable\":false,\"rotateX\":600,\"rotateY\":1200}}},\"interactivity\":{\"detect_on\":\"canvas\",\"events\":{\"onhover\":{\"enable\":true,\"mode\":\"repulse\"},\"onclick\":{\"enable\":true,\"mode\":\"push\"},\"resize\":true},\"modes\":{\"grab\":{\"distance\":400,\"line_linked\":{\"opacity\":1}},\"bubble\":{\"distance\":400,\"size\":40,\"duration\":2,\"opacity\":8,\"speed\":3},\"repulse\":{\"distance\":200,\"duration\":0.4},\"push\":{\"particles_nb\":4},\"remove\":{\"particles_nb\":2}}},\"retina_detect\":true}","nasa":"{\"particles\":{\"number\":{\"value\":250,\"density\":{\"enable\":true,\"value_area\":800}},\"color\":{\"value\":\"#ffffff\"},\"shape\":{\"type\":\"circle\",\"stroke\":{\"width\":0,\"color\":\"#000000\"},\"polygon\":{\"nb_sides\":5},\"image\":{\"src\":\"img/github.svg\",\"width\":100,\"height\":100}},\"opacity\":{\"value\":1,\"random\":true,\"anim\":{\"enable\":true,\"speed\":1,\"opacity_min\":0,\"sync\":false}},\"size\":{\"value\":3,\"random\":true,\"anim\":{\"enable\":false,\"speed\":4,\"size_min\":0.3,\"sync\":false}},\"line_linked\":{\"enable\":false,\"distance\":150,\"color\":\"#ffffff\",\"opacity\":0.4,\"width\":1},\"move\":{\"enable\":true,\"speed\":1,\"direction\":\"none\",\"random\":true,\"straight\":false,\"out_mode\":\"out\",\"bounce\":false,\"attract\":{\"enable\":false,\"rotateX\":600,\"rotateY\":600}}},\"interactivity\":{\"detect_on\":\"canvas\",\"events\":{\"onhover\":{\"enable\":true,\"mode\":\"bubble\"},\"onclick\":{\"enable\":true,\"mode\":\"repulse\"},\"resize\":true},\"modes\":{\"grab\":{\"distance\":400,\"line_linked\":{\"opacity\":1}},\"bubble\":{\"distance\":250,\"size\":0,\"duration\":2,\"opacity\":0,\"speed\":3},\"repulse\":{\"distance\":400,\"duration\":0.4},\"push\":{\"particles_nb\":4},\"remove\":{\"particles_nb\":2}}},\"retina_detect\":true}","bubble":"{\"particles\":{\"number\":{\"value\":15,\"density\":{\"enable\":true,\"value_area\":800}},\"color\":{\"value\":\"#1b1e34\"},\"shape\":{\"type\":\"polygon\",\"stroke\":{\"width\":0,\"color\":\"#000\"},\"polygon\":{\"nb_sides\":6},\"image\":{\"src\":\"img/github.svg\",\"width\":100,\"height\":100}},\"opacity\":{\"value\":0.3,\"random\":true,\"anim\":{\"enable\":false,\"speed\":1,\"opacity_min\":0.1,\"sync\":false}},\"size\":{\"value\":50,\"random\":false,\"anim\":{\"enable\":true,\"speed\":10,\"size_min\":40,\"sync\":false}},\"line_linked\":{\"enable\":false,\"distance\":200,\"color\":\"#ffffff\",\"opacity\":1,\"width\":2},\"move\":{\"enable\":true,\"speed\":8,\"direction\":\"none\",\"random\":false,\"straight\":false,\"out_mode\":\"out\",\"bounce\":false,\"attract\":{\"enable\":false,\"rotateX\":600,\"rotateY\":1200}}},\"interactivity\":{\"detect_on\":\"canvas\",\"events\":{\"onhover\":{\"enable\":false,\"mode\":\"grab\"},\"onclick\":{\"enable\":false,\"mode\":\"push\"},\"resize\":true},\"modes\":{\"grab\":{\"distance\":400,\"line_linked\":{\"opacity\":1}},\"bubble\":{\"distance\":400,\"size\":40,\"duration\":2,\"opacity\":8,\"speed\":3},\"repulse\":{\"distance\":200,\"duration\":0.4},\"push\":{\"particles_nb\":4},\"remove\":{\"particles_nb\":2}}},\"retina_detect\":true}","snow":"{\"particles\":{\"number\":{\"value\":450,\"density\":{\"enable\":true,\"value_area\":800}},\"color\":{\"value\":\"#fff\"},\"shape\":{\"type\":\"circle\",\"stroke\":{\"width\":0,\"color\":\"#000000\"},\"polygon\":{\"nb_sides\":5},\"image\":{\"src\":\"img/github.svg\",\"width\":100,\"height\":100}},\"opacity\":{\"value\":0.5,\"random\":true,\"anim\":{\"enable\":false,\"speed\":1,\"opacity_min\":0.1,\"sync\":false}},\"size\":{\"value\":5,\"random\":true,\"anim\":{\"enable\":false,\"speed\":40,\"size_min\":0.1,\"sync\":false}},\"line_linked\":{\"enable\":false,\"distance\":500,\"color\":\"#ffffff\",\"opacity\":0.4,\"width\":2},\"move\":{\"enable\":true,\"speed\":6,\"direction\":\"bottom\",\"random\":false,\"straight\":false,\"out_mode\":\"out\",\"bounce\":false,\"attract\":{\"enable\":false,\"rotateX\":600,\"rotateY\":1200}}},\"interactivity\":{\"detect_on\":\"canvas\",\"events\":{\"onhover\":{\"enable\":true,\"mode\":\"bubble\"},\"onclick\":{\"enable\":true,\"mode\":\"repulse\"},\"resize\":true},\"modes\":{\"grab\":{\"distance\":400,\"line_linked\":{\"opacity\":0.5}},\"bubble\":{\"distance\":400,\"size\":4,\"duration\":0.3,\"opacity\":1,\"speed\":3},\"repulse\":{\"distance\":200,\"duration\":0.4},\"push\":{\"particles_nb\":4},\"remove\":{\"particles_nb\":2}}},\"retina_detect\":true}","nyan_cat":"{\"particles\":{\"number\":{\"value\":150,\"density\":{\"enable\":false,\"value_area\":800}},\"color\":{\"value\":\"#ffffff\"},\"shape\":{\"type\":\"star\",\"stroke\":{\"width\":0,\"color\":\"#000000\"},\"polygon\":{\"nb_sides\":5},\"image\":{\"src\":\"http://wiki.lexisnexis.com/academic/images/f/fb/Itunes_podcast_icon_300.jpg\",\"width\":100,\"height\":100}},\"opacity\":{\"value\":0.5,\"random\":false,\"anim\":{\"enable\":false,\"speed\":1,\"opacity_min\":0.1,\"sync\":false}},\"size\":{\"value\":4,\"random\":true,\"anim\":{\"enable\":false,\"speed\":40,\"size_min\":0.1,\"sync\":false}},\"line_linked\":{\"enable\":false,\"distance\":150,\"color\":\"#ffffff\",\"opacity\":0.4,\"width\":1},\"move\":{\"enable\":true,\"speed\":14,\"direction\":\"left\",\"random\":false,\"straight\":true,\"out_mode\":\"out\",\"bounce\":false,\"attract\":{\"enable\":false,\"rotateX\":600,\"rotateY\":1200}}},\"interactivity\":{\"detect_on\":\"canvas\",\"events\":{\"onhover\":{\"enable\":false,\"mode\":\"grab\"},\"onclick\":{\"enable\":true,\"mode\":\"repulse\"},\"resize\":true},\"modes\":{\"grab\":{\"distance\":200,\"line_linked\":{\"opacity\":1}},\"bubble\":{\"distance\":400,\"size\":40,\"duration\":2,\"opacity\":8,\"speed\":3},\"repulse\":{\"distance\":200,\"duration\":0.4},\"push\":{\"particles_nb\":4},\"remove\":{\"particles_nb\":2}}},\"retina_detect\":true}"},"eael_login_nonce":"42f1a4a59d","eael_register_nonce":"5b8f4ed2a6","eael_lostpassword_nonce":"2d73485199","eael_resetpassword_nonce":"856d741cb8"};
|
||
//# sourceURL=eael-general-js-extra
|
||
/* ]]> */
|
||
</script>
|
||
<script type="text/javascript" src="/wp-content/plugins/essential-addons-for-elementor-lite/assets/front-end/js/view/general.min.js?ver=5.8.13" id="eael-general-js"></script>
|
||
<script type="text/javascript" id="eucookielaw-scripts-js-extra">
|
||
/* <![CDATA[ */
|
||
var eucookielaw_data = {"euCookieSet":"","autoBlock":"0","expireTimer":"0","scrollConsent":"0","networkShareURL":"","isCookiePage":"","isRefererWebsite":""};
|
||
//# sourceURL=eucookielaw-scripts-js-extra
|
||
/* ]]> */
|
||
</script>
|
||
<script type="text/javascript" src="/wp-content/plugins/eu-cookie-law/js/scripts.js?ver=3.1" id="eucookielaw-scripts-js"></script>
|
||
<script type="text/javascript" src="/wp-content/plugins/luckywp-table-of-contents/front/assets/main.min.js?ver=2.1.4" id="lwptoc-main-js"></script>
|
||
<script type="text/javascript" src="/wp-content/plugins/optinmonster/assets/dist/js/helper.min.js?ver=2.16.9" id="optinmonster-wp-helper-js"></script>
|
||
<script id="wp-emoji-settings" type="application/json">
|
||
{"baseUrl":"https://s.w.org/images/core/emoji/17.0.2/72x72/","ext":".png","svgUrl":"https://s.w.org/images/core/emoji/17.0.2/svg/","svgExt":".svg","source":{"concatemoji":"https://theburningmonk.com/wp-includes/js/wp-emoji-release.min.js?ver=6.9.4"}}
|
||
</script>
|
||
<script type="module">
|
||
/* <![CDATA[ */
|
||
/*! This file is auto-generated */
|
||
const a=JSON.parse(document.getElementById("wp-emoji-settings").textContent),o=(window._wpemojiSettings=a,"wpEmojiSettingsSupports"),s=["flag","emoji"];function i(e){try{var t={supportTests:e,timestamp:(new Date).valueOf()};sessionStorage.setItem(o,JSON.stringify(t))}catch(e){}}function c(e,t,n){e.clearRect(0,0,e.canvas.width,e.canvas.height),e.fillText(t,0,0);t=new Uint32Array(e.getImageData(0,0,e.canvas.width,e.canvas.height).data);e.clearRect(0,0,e.canvas.width,e.canvas.height),e.fillText(n,0,0);const a=new Uint32Array(e.getImageData(0,0,e.canvas.width,e.canvas.height).data);return t.every((e,t)=>e===a[t])}function p(e,t){e.clearRect(0,0,e.canvas.width,e.canvas.height),e.fillText(t,0,0);var n=e.getImageData(16,16,1,1);for(let e=0;e<n.data.length;e++)if(0!==n.data[e])return!1;return!0}function u(e,t,n,a){switch(t){case"flag":return n(e,"\ud83c\udff3\ufe0f\u200d\u26a7\ufe0f","\ud83c\udff3\ufe0f\u200b\u26a7\ufe0f")?!1:!n(e,"\ud83c\udde8\ud83c\uddf6","\ud83c\udde8\u200b\ud83c\uddf6")&&!n(e,"\ud83c\udff4\udb40\udc67\udb40\udc62\udb40\udc65\udb40\udc6e\udb40\udc67\udb40\udc7f","\ud83c\udff4\u200b\udb40\udc67\u200b\udb40\udc62\u200b\udb40\udc65\u200b\udb40\udc6e\u200b\udb40\udc67\u200b\udb40\udc7f");case"emoji":return!a(e,"\ud83e\u1fac8")}return!1}function f(e,t,n,a){let r;const o=(r="undefined"!=typeof WorkerGlobalScope&&self instanceof WorkerGlobalScope?new OffscreenCanvas(300,150):document.createElement("canvas")).getContext("2d",{willReadFrequently:!0}),s=(o.textBaseline="top",o.font="600 32px Arial",{});return e.forEach(e=>{s[e]=t(o,e,n,a)}),s}function r(e){var t=document.createElement("script");t.src=e,t.defer=!0,document.head.appendChild(t)}a.supports={everything:!0,everythingExceptFlag:!0},new Promise(t=>{let n=function(){try{var e=JSON.parse(sessionStorage.getItem(o));if("object"==typeof e&&"number"==typeof e.timestamp&&(new Date).valueOf()<e.timestamp+604800&&"object"==typeof e.supportTests)return e.supportTests}catch(e){}return null}();if(!n){if("undefined"!=typeof Worker&&"undefined"!=typeof OffscreenCanvas&&"undefined"!=typeof URL&&URL.createObjectURL&&"undefined"!=typeof Blob)try{var e="postMessage("+f.toString()+"("+[JSON.stringify(s),u.toString(),c.toString(),p.toString()].join(",")+"));",a=new Blob([e],{type:"text/javascript"});const r=new Worker(URL.createObjectURL(a),{name:"wpTestEmojiSupports"});return void(r.onmessage=e=>{i(n=e.data),r.terminate(),t(n)})}catch(e){}i(n=f(s,u,c,p))}t(n)}).then(e=>{for(const n in e)a.supports[n]=e[n],a.supports.everything=a.supports.everything&&a.supports[n],"flag"!==n&&(a.supports.everythingExceptFlag=a.supports.everythingExceptFlag&&a.supports[n]);var t;a.supports.everythingExceptFlag=a.supports.everythingExceptFlag&&!a.supports.flag,a.supports.everything||((t=a.source||{}).concatemoji?r(t.concatemoji):t.wpemoji&&t.twemoji&&(r(t.twemoji),r(t.wpemoji)))});
|
||
//# sourceURL=https://theburningmonk.com/wp-includes/js/wp-emoji-loader.min.js
|
||
/* ]]> */
|
||
</script>
|
||
<script>!function(){window.advanced_ads_ready_queue=window.advanced_ads_ready_queue||[],advanced_ads_ready_queue.push=window.advanced_ads_ready;for(var d=0,a=advanced_ads_ready_queue.length;d<a;d++)advanced_ads_ready(advanced_ads_ready_queue[d])}();</script><!-- Eu Cookie Law 3.1 --><div class="pea_cook_wrapper pea_cook_bottomright" style="color:#FFFFFF;background:rgb(0,0,0);background: rgba(0,0,0,0.85);"><p>By continuing to use the site, you agree to the use of cookies. <a style="color:#FFFFFF;" href="#" id="fom">more information</a> <button id="pea_cook_btn" class="pea_cook_btn" href="#">Accept</button></p></div><div class="pea_cook_more_info_popover"><div class="pea_cook_more_info_popover_inner" style="color:#FFFFFF;background-color: rgba(0,0,0,0.9);"><p>The cookie settings on this website are set to "allow cookies" to give you the best browsing experience possible. If you continue to use this website without changing your cookie settings or you click "Accept" below then you are consenting to this.</p><p><a style="color:#FFFFFF;" href="#" id="pea_close">Close</a></p></div></div> <script type="text/javascript">var omapi_localized = {
|
||
ajax: 'https://theburningmonk.com/wp-admin/admin-ajax.php?optin-monster-ajax-route=1',
|
||
nonce: '5efc30f22f',
|
||
slugs:
|
||
{"ceqrmejgxwwo1g9vww2o":{"slug":"ceqrmejgxwwo1g9vww2o","mailpoet":false},"ruqjlqe5tb9gh5zviazw":{"slug":"ruqjlqe5tb9gh5zviazw","mailpoet":false}} };</script>
|
||
<script type="text/javascript">var omapi_data = {"object_id":8298,"object_key":"post","object_type":"post","term_ids":[33,105,3,226],"wp_json":"https:\/\/theburningmonk.com\/wp-json","wc_active":false,"edd_active":false,"nonce":"6622b031b0"};</script>
|
||
|
||
</body>
|
||
</html>
|
||
|
||
<!-- created by Shifter Generator ver.2.5.7 (production) (Jun 23rd 2026, 10:24:04 pm +00:00) (md5:1ee440d582bb8b1749c5f8d2aa3b20b0) ---> |