467 lines
111 KiB
HTML
467 lines
111 KiB
HTML
<!DOCTYPE html><html lang="en" data-theme="dark"> <head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1"><meta name="description" content="What does the Rasmussen model teach us about Site Reliability Engineering?"><meta name="image" content="https://last9.io/_astro/understanding-the-rasmussen-model-for-failures.C3nTqAEQ.png"><meta http-equiv="x-ua-compatible" content="ie=edge"><meta name="generator" content="Astro v5.18.1"><meta property="og:title" content="Understanding the Rasmussen model for failures | Last9"><meta property="og:description" content="What does the Rasmussen model teach us about Site Reliability Engineering?"><meta property="og:type" content="article"><meta property="og:url" content="https://last9.io/blog/understanding-the-rasmussen-model-for-failures/"><meta property="og:image" content="https://last9.io/_astro/understanding-the-rasmussen-model-for-failures.C3nTqAEQ.png"><meta property="og:image:alt" content="Understanding the Rasmussen model for failures"><meta property="og:site_name" content="Last9"><meta name="twitter:card" content="summary_large_image"><meta name="twitter:title" content="Understanding the Rasmussen model for failures | Last9"><meta name="twitter:description" content="What does the Rasmussen model teach us about Site Reliability Engineering?"><meta name="twitter:image" content="https://last9.io/_astro/understanding-the-rasmussen-model-for-failures.C3nTqAEQ.png"><meta name="twitter:image:alt" content="Understanding the Rasmussen model for failures"><meta name="twitter:site" content="@last9io"><title>Understanding the Rasmussen model for failures | Last9</title><!-- Default favicon (for browsers that don't support media on link) --><link rel="icon" href="/favicon.png" type="image/png"><!-- Light mode favicon --><link rel="icon" href="/black-favicon.png" type="image/png" media="(prefers-color-scheme: light)"><!-- Dark mode favicon --><link rel="icon" href="/white-favicon.png" type="image/png" media="(prefers-color-scheme: dark)"><link rel="sitemap" href="/sitemap-index.xml"><link rel="canonical" href="https://last9.io/blog/understanding-the-rasmussen-model-for-failures/"><link rel="alternate" type="text/markdown" href="/blog/understanding-the-rasmussen-model-for-failures.md"><script type="application/ld+json">{"@context":"https://schema.org","@type":"Organization","name":"Last9","legalName":"Last9 Inc.","url":"https://last9.io","logo":"https://last9.io/logo.png","description":"Last9 is an observability platform built for high-cardinality telemetry. It offers a developer-first control plane to manage logs, metrics, and traces, supporting OpenTelemetry, Prometheus, and over 100 integrations. With real-time alerting, data pipelines, and AI-native features like the MCP server, Last9 helps engineering teams debug, optimize, and scale systems efficiently.","sameAs":["https://x.com/last9io/","https://www.linkedin.com/company/last9/","https://github.com/last9","https://www.npmjs.com/org/last9","https://www.g2.com/products/last9-last9/reviews"],"address":{"@type":"PostalAddress","streetAddress":"355 Bryant Street, Unit 403","addressLocality":"San Francisco","addressRegion":"CA","postalCode":"94107","addressCountry":"US"},"contactPoint":{"@type":"ContactPoint","contactType":"customer support","email":"support@last9.io","availableLanguage":"English","areaServed":"Worldwide"},"founders":[{"@type":"Person","name":"Nishant Modak","jobTitle":"Co-founder & CEO","sameAs":["https://www.linkedin.com/in/modak","https://x.com/nishantmodak"]},{"@type":"Person","name":"Kuldeep Dhankar","jobTitle":"Co-founder & CRO","sameAs":["https://www.linkedin.com/in/ku1deep","https://x.com/ku1deep"]}],"knowsAbout":["Observability","Monitoring","Prometheus","OpenTelemetry","High Cardinality Metrics","Distributed Tracing","Log Analytics","Site Reliability Engineering","DevOps"],"hasCredential":[{"@type":"EducationalOccupationalCredential","name":"SOC 2 Type II","credentialCategory":"certification","recognizedBy":{"@type":"Organization","name":"American Institute of Certified Public Accountants (AICPA)"}},{"@type":"EducationalOccupationalCredential","name":"PCI DSS","credentialCategory":"certification","recognizedBy":{"@type":"Organization","name":"PCI Security Standards Council"}},{"@type":"EducationalOccupationalCredential","name":"HIPAA","credentialCategory":"certification"},{"@type":"EducationalOccupationalCredential","name":"ISO/IEC 27001","credentialCategory":"certification","recognizedBy":{"@type":"Organization","name":"International Organization for Standardization (ISO)"}}],"award":["CNCF Silver Member","AWS Partner — Qualified Software","Gartner Cool Vendor in AI for SRE and Observability, 2025","G2 High Performer — Fall 2025","G2 Best Usability — Fall 2025","G2 Highest User Adoption — Fall 2025"]}</script><script id="unicorn-studio-lib" src="https://cdn.jsdelivr.net/gh/hiunicornstudio/unicornstudio.js@v2.0.2/dist/unicornStudio.umd.js" async fetchpriority="low"></script><script>
|
||
window.unicornStudioReady = new Promise((resolve) => {
|
||
if (window.UnicornStudio) {
|
||
resolve(window.UnicornStudio);
|
||
return;
|
||
}
|
||
document
|
||
.getElementById("unicorn-studio-lib")
|
||
.addEventListener("load", () => resolve(window.UnicornStudio), {
|
||
once: true,
|
||
});
|
||
});
|
||
</script> <script type="application/ld+json">{"@context":"https://schema.org","@type":"BlogPosting","headline":"Understanding the Rasmussen model for failures","datePublished":"2023-08-18T10:07:21.000+05:30","description":"What does the Rasmussen model teach us about Site Reliability Engineering?","image":{"@type":"ImageObject","url":"https://last9.io/_astro/understanding-the-rasmussen-model-for-failures.C3nTqAEQ.png","caption":"Understanding the Rasmussen model for failures"},"dateModified":"2023-11-14T19:25:34.000+05:30","publisher":{"@context":"https://schema.org","@type":"Organization","name":"Last9","legalName":"Last9 Inc.","url":"https://last9.io","logo":"https://last9.io/logo.png","description":"Last9 is an observability platform built for high-cardinality telemetry. It offers a developer-first control plane to manage logs, metrics, and traces, supporting OpenTelemetry, Prometheus, and over 100 integrations. With real-time alerting, data pipelines, and AI-native features like the MCP server, Last9 helps engineering teams debug, optimize, and scale systems efficiently.","sameAs":["https://x.com/last9io/","https://www.linkedin.com/company/last9/","https://github.com/last9","https://www.npmjs.com/org/last9","https://www.g2.com/products/last9-last9/reviews"],"address":{"@type":"PostalAddress","streetAddress":"355 Bryant Street, Unit 403","addressLocality":"San Francisco","addressRegion":"CA","postalCode":"94107","addressCountry":"US"},"contactPoint":{"@type":"ContactPoint","contactType":"customer support","email":"support@last9.io","availableLanguage":"English","areaServed":"Worldwide"},"founders":[{"@type":"Person","name":"Nishant Modak","jobTitle":"Co-founder & CEO","sameAs":["https://www.linkedin.com/in/modak","https://x.com/nishantmodak"]},{"@type":"Person","name":"Kuldeep Dhankar","jobTitle":"Co-founder & CRO","sameAs":["https://www.linkedin.com/in/ku1deep","https://x.com/ku1deep"]}],"knowsAbout":["Observability","Monitoring","Prometheus","OpenTelemetry","High Cardinality Metrics","Distributed Tracing","Log Analytics","Site Reliability Engineering","DevOps"],"hasCredential":[{"@type":"EducationalOccupationalCredential","name":"SOC 2 Type II","credentialCategory":"certification","recognizedBy":{"@type":"Organization","name":"American Institute of Certified Public Accountants (AICPA)"}},{"@type":"EducationalOccupationalCredential","name":"PCI DSS","credentialCategory":"certification","recognizedBy":{"@type":"Organization","name":"PCI Security Standards Council"}},{"@type":"EducationalOccupationalCredential","name":"HIPAA","credentialCategory":"certification"},{"@type":"EducationalOccupationalCredential","name":"ISO/IEC 27001","credentialCategory":"certification","recognizedBy":{"@type":"Organization","name":"International Organization for Standardization (ISO)"}}],"award":["CNCF Silver Member","AWS Partner — Qualified Software","Gartner Cool Vendor in AI for SRE and Observability, 2025","G2 High Performer — Fall 2025","G2 Best Usability — Fall 2025","G2 Highest User Adoption — Fall 2025"]},"mainEntityOfPage":{"@type":"WebPage","@id":"https://last9.io/blog/understanding-the-rasmussen-model-for-failures/"},"keywords":"Deep Dives, observability, monitoring, Last9 Engineering","wordCount":1511,"timeRequired":"PT6M","articleSection":"Deep Dives","author":{"@type":"Person","name":"Nishant Modak","url":"https://last9.io/blog/authors/nishant/","description":"Founder at Last9. \n\nLoves building dev tools and listening to The Beatles.","image":"https://last9.io/_astro/nishant.f0mkGtg0.jpg","sameAs":["https://last9.io","https://x.com/nishantmodak/"]}}</script> <link rel="stylesheet" href="/_astro/about-us.By0dNIss.css">
|
||
<link rel="stylesheet" href="/_astro/_slug_.CX-RuPqw.css">
|
||
<style>/*! tailwindcss v4.1.7 | MIT License | https://tailwindcss.com */@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-leading:initial;--tw-tracking:initial;--tw-duration:initial;--tw-ease:initial}}}:root{--toc-width:200px;--toc-cur-highlight-color:var(--accent-foreground);--toc-text-color:var(--foreground-4);--toc-text-hover-color:var(--accent-foreground);--toc-text-active-color:var(--accent-foreground)}.js-toc{height:100%}.js-toc>.toc-list{position:relative}.js-toc>.toc-list li{list-style-type:none}.toc-list{gap:calc(var(--spacing,.25rem)*0);padding:calc(var(--spacing,.25rem)*0);flex-direction:column;display:flex}.toc-list .toc-list{padding-left:calc(var(--spacing,.25rem)*4)}a.toc-link{color:var(--toc-text-color);padding-block:calc(var(--spacing,.25rem)*1);--tw-leading:var(--leading-normal,1.5);line-height:var(--leading-normal,1.5);--tw-tracking:var(--tracking-tight,-.025em);letter-spacing:var(--tracking-tight,-.025em);transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4,0,.2,1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s));display:block}.js-toc>.toc-list>.toc-list-item{padding-bottom:calc(var(--spacing,.25rem)*4)}.js-toc>.toc-list>.toc-list-item:last-child{padding-bottom:calc(var(--spacing,.25rem)*0)}.js-toc>.toc-list>.toc-list-item>a.toc-link{padding:calc(var(--spacing,.25rem)*0)}.toc-link:hover{color:var(--toc-text-hover-color)}.toc-link:before{display:none}.is-collapsible{max-height:1000px;transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4,0,.2,1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s));--tw-duration:.2s;--tw-ease:var(--ease-in-out,cubic-bezier(.4,0,.2,1));transition-duration:.2s;transition-timing-function:var(--ease-in-out,cubic-bezier(.4,0,.2,1));overflow:hidden}.is-collapsed{max-height:calc(var(--spacing,.25rem)*0);padding-top:calc(var(--spacing,.25rem)*0)}a.toc-link.is-active-link{color:var(--toc-text-active-color)}.is-active-link:before{background-color:var(--toc-cur-highlight-color)}@property --tw-leading{syntax:"*";inherits:false}@property --tw-tracking{syntax:"*";inherits:false}@property --tw-duration{syntax:"*";inherits:false}@property --tw-ease{syntax:"*";inherits:false}
|
||
.medium-zoom-overlay,.medium-zoom-image--opened{z-index:999}
|
||
</style>
|
||
<link rel="stylesheet" href="/_astro/index.6kkMJStv.css">
|
||
<style>@layer starlight.components{svg:where(.astro-c6vsoqas){color:var(--sl-icon-color);font-size:var(--sl-icon-size, 1em);width:1em;height:1em}}
|
||
@layer starlight.components{:root{--sl-badge-default-border: var(--sl-color-accent);--sl-badge-default-bg: var(--sl-color-accent-low);--sl-badge-default-text: #fff;--sl-badge-note-border: var(--sl-color-blue);--sl-badge-note-bg: var(--sl-color-blue-low);--sl-badge-note-text: #fff;--sl-badge-danger-border: var(--sl-color-red);--sl-badge-danger-bg: var(--sl-color-red-low);--sl-badge-danger-text: #fff;--sl-badge-success-border: var(--sl-color-green);--sl-badge-success-bg: var(--sl-color-green-low);--sl-badge-success-text: #fff;--sl-badge-caution-border: var(--sl-color-orange);--sl-badge-caution-bg: var(--sl-color-orange-low);--sl-badge-caution-text: #fff;--sl-badge-tip-border: var(--sl-color-purple);--sl-badge-tip-bg: var(--sl-color-purple-low);--sl-badge-tip-text: #fff}[data-theme=light]:root{--sl-badge-default-bg: var(--sl-color-accent-high);--sl-badge-note-bg: var(--sl-color-blue-high);--sl-badge-danger-bg: var(--sl-color-red-high);--sl-badge-success-bg: var(--sl-color-green-high);--sl-badge-caution-bg: var(--sl-color-orange-high);--sl-badge-tip-bg: var(--sl-color-purple-high)}.sl-badge:where(.astro-avdet4wd){display:inline-block;border:1px solid var(--sl-color-border-badge);border-radius:.25rem;font-family:var(--sl-font-system-mono);line-height:normal;color:var(--sl-color-text-badge);background-color:var(--sl-color-bg-badge);overflow-wrap:anywhere}.sidebar-content .sl-badge:where(.astro-avdet4wd){line-height:1;font-size:var(--sl-text-xs);padding:.125rem .375rem}.sidebar-content a[aria-current=page]>.sl-badge:where(.astro-avdet4wd){--sl-color-bg-badge: transparent;--sl-color-border-badge: currentColor;color:inherit}.default:where(.astro-avdet4wd){--sl-color-bg-badge: var(--sl-badge-default-bg);--sl-color-border-badge: var(--sl-badge-default-border);--sl-color-text-badge: var(--sl-badge-default-text)}.note:where(.astro-avdet4wd){--sl-color-bg-badge: var(--sl-badge-note-bg);--sl-color-border-badge: var(--sl-badge-note-border);--sl-color-text-badge: var(--sl-badge-note-text)}.danger:where(.astro-avdet4wd){--sl-color-bg-badge: var(--sl-badge-danger-bg);--sl-color-border-badge: var(--sl-badge-danger-border);--sl-color-text-badge: var(--sl-badge-danger-text)}.success:where(.astro-avdet4wd){--sl-color-bg-badge: var(--sl-badge-success-bg);--sl-color-border-badge: var(--sl-badge-success-border);--sl-color-text-badge: var(--sl-badge-success-text)}.tip:where(.astro-avdet4wd){--sl-color-bg-badge: var(--sl-badge-tip-bg);--sl-color-border-badge: var(--sl-badge-tip-border);--sl-color-text-badge: var(--sl-badge-tip-text)}.caution:where(.astro-avdet4wd){--sl-color-bg-badge: var(--sl-badge-caution-bg);--sl-color-border-badge: var(--sl-badge-caution-border);--sl-color-text-badge: var(--sl-badge-caution-text)}.small:where(.astro-avdet4wd){font-size:var(--sl-text-xs);padding:.125rem .25rem}.medium:where(.astro-avdet4wd){font-size:var(--sl-text-sm);padding:.175rem .35rem}.large:where(.astro-avdet4wd){font-size:var(--sl-text-base);padding:.225rem .45rem}.sl-markdown-content :is(h1,h2,h3,h4,h5,h6) .sl-badge:where(.astro-avdet4wd){vertical-align:middle}}
|
||
</style><script type="module" src="/_astro/page.Bj5v6JdQ.js"></script></head><body> <div id="cookie-banner" class="fixed right-4 bottom-4 left-4 z-9999 hidden min-w-80" role="dialog" aria-labelledby="cookie-title"> <div class="relative mx-auto w-fit overflow-hidden rounded-2xl p-6 lg:p-8" style="background: url('/common/textures/noise.png') 0% 0% / 50px 50px repeat, radial-gradient(538.84% 50% at 50% 50%, rgba(9, 9, 11, 0.00) 0%, #09090B 100%), rgba(9, 9, 11, 0.60); background-blend-mode: overlay, normal, normal; backdrop-filter: blur(25px);"> <div class="relative flex flex-col items-start gap-4 md:flex-row md:items-center md:gap-16"> <div class="flex flex-col items-start gap-4 md:flex-row md:items-center"> <div class="shrink-0"> <img src="/_astro/cookie-illustration.4Ddzj9Hm_Z1mipMf.svg" alt="Cookie" loading="lazy" decoding="async" fetchpriority="auto" width="66" height="51" class="h-12 w-auto"> </div> <p id="cookie-title" class="text-lg leading-[1.5] tracking-tight text-foreground-dark lg:text-xl">
|
||
We use <span class="font-bold">cookies</span> to customize your Last9 experience.
|
||
What's your preference?
|
||
</p> </div> <div class="flex shrink-0 gap-2"> <button id="essential-only" class="flex h-[38px] cursor-pointer items-center justify-center rounded bg-secondary p-3 text-lg leading-[1.5] font-medium tracking-tight text-secondary-foreground transition-colors duration-200 ease-in-out hover:bg-secondary-hover hover:text-secondary-foreground-hover lg:text-xl" aria-label="Accept essential cookies only">
|
||
Essential only
|
||
</button> <button id="accept-all" class="flex h-[38px] cursor-pointer items-center justify-center rounded border-b border-primary-hover bg-primary p-3 text-lg leading-[1.5] font-medium tracking-tight text-primary-foreground transition-colors duration-200 ease-in-out hover:bg-primary-hover hover:text-primary-foreground-hover lg:text-xl" aria-label="Accept all cookies">
|
||
Accept all
|
||
</button> </div> </div> </div> </div> <script>(function(){const gtmId = "GTM-MCRLTVC";
|
||
const consentStates = {"basic":{"functionality_storage":"granted","security_storage":"granted","analytics_storage":"granted","ad_storage":"denied","ad_personalization":"denied","ad_user_data":"denied","personalization_storage":"denied"},"full":{"functionality_storage":"granted","security_storage":"granted","analytics_storage":"granted","ad_storage":"granted","ad_personalization":"granted","ad_user_data":"granted","personalization_storage":"granted"}};
|
||
|
||
/**
|
||
* Configuration object for consent management
|
||
*/
|
||
const CONFIG = {
|
||
STORAGE_KEY: "gtmConsent", // localStorage key for consent storage
|
||
VERSION: "1.0", // Consent version - update when consent options change
|
||
SELECTORS: {
|
||
// DOM selectors for UI elements
|
||
banner: "#cookie-banner",
|
||
acceptAll: "#accept-all",
|
||
essentialOnly: "#essential-only",
|
||
},
|
||
};
|
||
|
||
/**
|
||
* ConsentManager class handles all consent-related functionality
|
||
*/
|
||
class ConsentManager {
|
||
constructor() {
|
||
this.banner = document.querySelector(CONFIG.SELECTORS.banner);
|
||
}
|
||
|
||
/**
|
||
* Initialize the consent manager
|
||
*/
|
||
init() {
|
||
this.initGTM();
|
||
this.setupEventListeners();
|
||
this.checkConsentStatus();
|
||
}
|
||
|
||
/**
|
||
* Initialize Google Tag Manager with appropriate consent state
|
||
*/
|
||
initGTM() {
|
||
try {
|
||
// Initialize dataLayer and gtag
|
||
window.dataLayer = window.dataLayer || [];
|
||
window.gtag = function () {
|
||
window.dataLayer.push(arguments);
|
||
};
|
||
|
||
// Set initial consent state based on saved preference
|
||
const savedConsent = this.getSavedConsent();
|
||
const consentType = savedConsent?.type === "full" ? "full" : "basic";
|
||
|
||
gtag("consent", "default", consentStates[consentType]);
|
||
|
||
// Inject GTM script if not already present
|
||
if (!window.gtmInjected) {
|
||
this.injectGTMScript();
|
||
if (document.body) {
|
||
this.injectNoscriptIframe();
|
||
} else {
|
||
document.addEventListener(
|
||
"DOMContentLoaded",
|
||
this.injectNoscriptIframe(),
|
||
);
|
||
}
|
||
window.gtmInjected = true;
|
||
}
|
||
} catch (error) {
|
||
console.error("GTM initialization error:", error);
|
||
}
|
||
}
|
||
|
||
/**
|
||
* Set up event listeners for consent choices
|
||
*/
|
||
setupEventListeners() {
|
||
document
|
||
.querySelector(CONFIG.SELECTORS.acceptAll)
|
||
?.addEventListener("click", () => this.handleConsent(true));
|
||
|
||
document
|
||
.querySelector(CONFIG.SELECTORS.essentialOnly)
|
||
?.addEventListener("click", () => this.handleConsent(false));
|
||
}
|
||
|
||
/**
|
||
* Check saved consent status and show banner if needed
|
||
*/
|
||
checkConsentStatus() {
|
||
const savedConsent = this.getSavedConsent();
|
||
if (!savedConsent || savedConsent.version !== CONFIG.VERSION) {
|
||
this.showBanner();
|
||
}
|
||
}
|
||
|
||
/**
|
||
* Handle user's consent choice
|
||
* @param {boolean} isFullConsent - Whether user accepted all cookies
|
||
*/
|
||
handleConsent(isFullConsent) {
|
||
this.updateConsent(isFullConsent);
|
||
this.hideBanner();
|
||
}
|
||
|
||
/**
|
||
* Save consent preference to localStorage
|
||
* @param {string} type - Consent type ('full' or 'basic')
|
||
*/
|
||
saveConsent(type) {
|
||
try {
|
||
localStorage.setItem(
|
||
CONFIG.STORAGE_KEY,
|
||
JSON.stringify({
|
||
type,
|
||
version: CONFIG.VERSION,
|
||
timestamp: new Date().toISOString(),
|
||
}),
|
||
);
|
||
} catch (error) {
|
||
console.error("Save consent error:", error);
|
||
}
|
||
}
|
||
|
||
/**
|
||
* Get saved consent preference from localStorage
|
||
* @returns {Object|null} Saved consent data or null if not found
|
||
*/
|
||
getSavedConsent() {
|
||
try {
|
||
const saved = localStorage.getItem(CONFIG.STORAGE_KEY);
|
||
return saved ? JSON.parse(saved) : null;
|
||
} catch (error) {
|
||
console.error("Get consent error:", error);
|
||
return null;
|
||
}
|
||
}
|
||
|
||
/**
|
||
* Update consent state based on user choice
|
||
* @param {boolean} isFullConsent - Whether full consent was granted
|
||
*/
|
||
updateConsent(isFullConsent) {
|
||
try {
|
||
const consentType = isFullConsent ? "full" : "basic";
|
||
gtag("consent", "update", consentStates[consentType]);
|
||
this.saveConsent(consentType);
|
||
} catch (error) {
|
||
console.error("Consent update error:", error);
|
||
}
|
||
}
|
||
|
||
/**
|
||
* Inject GTM script into the page
|
||
*/
|
||
injectGTMScript() {
|
||
try {
|
||
const script = document.createElement("script");
|
||
// Temporarily disabled Partytown for GTM due to CORS issues with service worker
|
||
// See: https://github.com/QwikDev/partytown/issues/635
|
||
// script.type = "text/partytown";
|
||
script.textContent = `
|
||
(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':
|
||
new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],
|
||
j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src=
|
||
'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);
|
||
})(window,document,'script','dataLayer','${gtmId}');
|
||
`.trim();
|
||
document.head.appendChild(script);
|
||
} catch (error) {
|
||
console.error("GTM script injection error:", error);
|
||
}
|
||
}
|
||
|
||
/**
|
||
* Inject GTM noscript iframe for browsers without JavaScript
|
||
*/
|
||
injectNoscriptIframe() {
|
||
try {
|
||
if (!document.body) return;
|
||
|
||
const noscript = document.createElement("noscript");
|
||
noscript.id = "gtm-noscript";
|
||
|
||
const iframe = document.createElement("iframe");
|
||
iframe.src = `https://www.googletagmanager.com/ns.html?id=${gtmId}`;
|
||
iframe.height = "0";
|
||
iframe.width = "0";
|
||
iframe.style.cssText = "display:none;visibility:hidden";
|
||
|
||
noscript.appendChild(iframe);
|
||
document.body.insertBefore(noscript, document.body.firstChild);
|
||
} catch (error) {
|
||
console.error("Error injecting noscript iframe:", error);
|
||
}
|
||
}
|
||
|
||
/**
|
||
* Hide the consent banner
|
||
*/
|
||
hideBanner() {
|
||
this.banner?.classList.add("hidden");
|
||
}
|
||
|
||
/**
|
||
* Show the consent banner
|
||
*/
|
||
showBanner() {
|
||
this.banner?.classList.remove("hidden");
|
||
}
|
||
}
|
||
|
||
// Initialize the consent manager
|
||
try {
|
||
const consentManager = new ConsentManager();
|
||
consentManager.init();
|
||
} catch (error) {
|
||
console.error("Consent manager initialization error:", error);
|
||
}
|
||
})();</script> <div data-viewport-backdrop class="pointer-events-none fixed inset-0 z-998 bg-[rgba(24,24,27,0.9)] backdrop-blur-[2px] [body:has([data-viewport][data-state='closed'])_&]:hidden [body:has([data-viewport][data-state='closing'])_&]:block [body:has([data-viewport][data-state='closing'])_&]:animate-fade-out [body:has([data-viewport][data-state='open'])_&]:pointer-events-auto [body:has([data-viewport][data-state='open'])_&]:block [body:has([data-viewport][data-state='open'])_&]:animate-fade-in"></div> <div class="flex min-h-screen w-full flex-col"> <header id="main-header" class="fixed inset-x-0 top-0 z-999 flex min-w-96 flex-col lg:top-8 shrink-0"> <div class="relative isolate flex items-center justify-between gap-6 noise-bg px-6 py-2 lg:hidden"> <svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" style="position:absolute;width:0;height:0;overflow:hidden"><symbol id="logo-last9-large-logo" viewBox="0 0 71 24" fill="none"><g fill="#fff" clip-path="url(#clip0_383_75)"><path d="M3.3 5H0v16.2h11.3v-2.9h-8zm15.1 3.9q-4.7.2-5.3 4h3q.3-1.6 2.3-1.7 2 .1 2 2v.4l-3 .3q-4.6.3-4.7 3.8c0 2.3 1.7 3.7 4.2 3.7q2.8-.1 3.6-1.9v1.7h3v-7.8c0-2.7-1.7-4.5-5.1-4.5m2 7.6q-.1 2.8-2.6 2.8-2-.1-2-1.7.1-1.7 2.3-1.7l2.3-.2zm11.8-2.6-2.6-.5q-1.4-.1-1.4-1 .1-1.3 2.1-1.3 2 .1 2.2 1.6h3Q34.8 9 30.2 9c-3 0-5 1.5-5 3.7q0 3 3.4 3.3l2.6.5q1.6.3 1.6 1.3 0 1.5-2.2 1.5-2.3-.1-2.7-2H25q.8 4.1 5.6 4.2c2.9 0 5.1-1.5 5.1-4q0-3-3.6-3.5m9.1 3v-5.3h3V9h-3V6h-3.1v3h-2v2.6h2V17q0 4.2 3.8 4.2l2.3-.3v-2.5l-1.4.2q-1.6 0-1.6-1.7M59 0a12 12 0 0 0-12.1 12A12 12 0 0 0 71 12 12 12 0 0 0 59 0m1 21 3-4.6c1-1.4 2-3.2 2-5.2 0-3.4-2.5-5.8-6.2-5.8-3.5 0-6.2 2.4-6.2 5.7s2.4 5.5 5.3 5.5q1.2 0 1.8-.5l-3.1 4.7c-4-1-7-4.6-7-8.8A9.1 9.1 0 0 1 68 12a9 9 0 0 1-8 9m-1.2-6.9a3 3 0 0 1-3-3 3 3 0 0 1 3-3.1 3 3 0 0 1 3.1 3 3 3 0 0 1-3 3.1"/></g><defs><clipPath id="clip0_383_75"><path fill="#fff" d="M0 0h71v24H0z"/></clipPath></defs></symbol></svg> <a href="/" class="flex items-center justify-center"> <span class="sr-only">Last9</span> <svg height="24" width="71" viewBox="0 0 71 24" fill="white" aria-hidden="true" focusable="false" class="h-6 dark:hidden"><use href="#logo-last9-large-logo"></use></svg> <svg height="24" width="71" viewBox="0 0 71 24" fill="black" aria-hidden="true" focusable="false" class="h-6 not-dark:hidden"><use href="#logo-last9-large-logo"></use></svg> </a> <div class="flex items-center justify-center gap-6"> <a href="/schedule-demo/" class="flex items-center justify-center gap-1 w-fit cursor-pointer rounded md:p-3 font-medium tracking-tight md:text-xl transition-colors duration-200 ease-in-out bg-primary text-primary-foreground hover:bg-primary-hover hover:text-primary-foreground-hover p-3.5 text-base"> <span class="leading-trim">
|
||
Book demo
|
||
</span> </a> <label class="inline-flex cursor-pointer items-center justify-center mt-1" for="mobile-menu-toggle"> <span class="sr-only">Open menu</span> <span aria-hidden="true"> <svg viewBox="0 0 256 256" fill="currentColor" class="h-6 w-6"><path d="M224,128a8,8,0,0,1-8,8H40a8,8,0,0,1,0-16H216A8,8,0,0,1,224,128ZM40,72H216a8,8,0,0,0,0-16H40a8,8,0,0,0,0,16ZM216,184H40a8,8,0,0,0,0,16H216a8,8,0,0,0,0-16Z" /></svg> </span> </label> </div> <input type="checkbox" id="mobile-menu-toggle" class="peer hidden"> <div class="hidden peer-checked:block"> <div class="pointer-events-auto h-screen overflow-y-auto noise-bg bg-background absolute inset-x-0 top-0"> <div class="flex items-center justify-between gap-6 noise-bg px-6 py-2 sticky top-0 z-50"> <a href="/" class="flex items-center justify-center"> <span class="sr-only">Last9</span> <svg height="24" width="71" viewBox="0 0 71 24" fill="white" aria-hidden="true" focusable="false" class="h-6 dark:hidden"><use href="#logo-last9-large-logo"></use></svg> <svg height="24" width="71" viewBox="0 0 71 24" fill="black" aria-hidden="true" focusable="false" class="h-6 not-dark:hidden"><use href="#logo-last9-large-logo"></use></svg> </a> <div class="flex items-center justify-center gap-6"> <a href="/schedule-demo/" class="flex items-center justify-center gap-1 w-fit cursor-pointer rounded md:p-3 font-medium tracking-tight md:text-xl transition-colors duration-200 ease-in-out bg-primary text-primary-foreground hover:bg-primary-hover hover:text-primary-foreground-hover p-3.5 text-base"> <span class="leading-trim">
|
||
Book demo
|
||
</span> </a> <label class="inline-flex cursor-pointer items-center justify-center mt-1" for="mobile-menu-toggle"> <span class="sr-only">Close menu</span> <span aria-hidden="true"> <svg viewBox="0 0 256 256" fill="currentColor" class="h-6 w-6"><path d="M205.66,194.34a8,8,0,0,1-11.32,11.32L128,139.31,61.66,205.66a8,8,0,0,1-11.32-11.32L116.69,128,50.34,61.66A8,8,0,0,1,61.66,50.34L128,116.69l66.34-66.35a8,8,0,0,1,11.32,11.32L139.31,128Z" /></svg> </span> </label> </div> </div> <div class="flex flex-col gap-8 py-6"> <div class="flex flex-col"> <span class="px-6 py-2 text-sm font-semibold tracking-wide text-foreground uppercase">Product</span> <div class="flex flex-col"> <a href="/discover/" class="flex items-center justify-between gap-2 px-6 py-2 text-foreground hover:bg-muted hover:text-muted-foreground focus:bg-muted focus:text-muted-foreground transition-colors duration-200 ease-in-out"> <svg viewBox="0 0 256 256" fill="currentColor" class="size-5 shrink-0 fill-current"><path d="M245.11,60.68c-7.65-13.19-27.84-16.16-58.5-8.66A95.93,95.93,0,0,0,32,128a98,98,0,0,0,.78,12.31C5.09,169,5.49,186,10.9,195.32,16,204.16,26.64,208,40.64,208a124.11,124.11,0,0,0,28.79-4A95.93,95.93,0,0,0,224,128a97.08,97.08,0,0,0-.77-12.25c12.5-13,20.82-25.35,23.65-35.92C248.83,72.51,248.24,66.07,245.11,60.68ZM128,48a80.11,80.11,0,0,1,78,62.2c-17.06,16.06-40.15,32.53-62.07,45.13C116.38,171.14,92.48,181,73.42,186.4A79.94,79.94,0,0,1,128,48ZM24.74,187.29c-1.46-2.51-.65-7.24,2.22-13a79.05,79.05,0,0,1,10.29-15.05,96,96,0,0,0,18,31.32C38,193.46,27.24,191.61,24.74,187.29ZM128,208a79.45,79.45,0,0,1-38.56-9.94,370,370,0,0,0,62.43-28.86c21.58-12.39,40.68-25.82,56.07-39.08A80.07,80.07,0,0,1,128,208ZM231.42,75.69c-1.7,6.31-6.19,13.53-12.63,21.13a95.69,95.69,0,0,0-18-31.35c14.21-2.35,27.37-2.17,30.5,3.24C232.19,70.28,232.24,72.63,231.42,75.69Z" /></svg><span class="flex-1 text-lg font-normal tracking-tight">Discover</span><svg viewBox="0 0 256 256" fill="currentColor" class="size-5 shrink-0"><path d="M181.66,133.66l-80,80a8,8,0,0,1-11.32-11.32L164.69,128,90.34,53.66a8,8,0,0,1,11.32-11.32l80,80A8,8,0,0,1,181.66,133.66Z" /></svg> </a> <div class="flex items-center justify-between gap-2 px-6 py-2 text-foreground"><svg viewBox="0 0 256 256" fill="currentColor" class="size-5 shrink-0 fill-current"><path d="M128,24A104,104,0,1,0,232,128,104.11,104.11,0,0,0,128,24Zm0,192a88,88,0,1,1,88-88A88.1,88.1,0,0,1,128,216ZM172.42,72.84l-64,32a8.05,8.05,0,0,0-3.58,3.58l-32,64A8,8,0,0,0,80,184a8.1,8.1,0,0,0,3.58-.84l64-32a8.05,8.05,0,0,0,3.58-3.58l32-64a8,8,0,0,0-10.74-10.74ZM138,138,97.89,158.11,118,118l40.15-20.07Z" /></svg><span class="flex-1 text-lg font-normal tracking-tight">Explore</span></div> <a href="/logs/" class="flex items-center justify-between gap-2 px-6 py-2 text-foreground hover:bg-muted hover:text-muted-foreground focus:bg-muted focus:text-muted-foreground transition-colors duration-200 ease-in-out pl-13"> <span class="flex-1 text-lg font-normal tracking-tight">Logs</span><svg viewBox="0 0 256 256" fill="currentColor" class="size-5 shrink-0"><path d="M181.66,133.66l-80,80a8,8,0,0,1-11.32-11.32L164.69,128,90.34,53.66a8,8,0,0,1,11.32-11.32l80,80A8,8,0,0,1,181.66,133.66Z" /></svg> </a><a href="/traces/" class="flex items-center justify-between gap-2 px-6 py-2 text-foreground hover:bg-muted hover:text-muted-foreground focus:bg-muted focus:text-muted-foreground transition-colors duration-200 ease-in-out pl-13"> <span class="flex-1 text-lg font-normal tracking-tight">Traces</span><svg viewBox="0 0 256 256" fill="currentColor" class="size-5 shrink-0"><path d="M181.66,133.66l-80,80a8,8,0,0,1-11.32-11.32L164.69,128,90.34,53.66a8,8,0,0,1,11.32-11.32l80,80A8,8,0,0,1,181.66,133.66Z" /></svg> </a><a href="/metrics/" class="flex items-center justify-between gap-2 px-6 py-2 text-foreground hover:bg-muted hover:text-muted-foreground focus:bg-muted focus:text-muted-foreground transition-colors duration-200 ease-in-out pl-13"> <span class="flex-1 text-lg font-normal tracking-tight">Metrics</span><svg viewBox="0 0 256 256" fill="currentColor" class="size-5 shrink-0"><path d="M181.66,133.66l-80,80a8,8,0,0,1-11.32-11.32L164.69,128,90.34,53.66a8,8,0,0,1,11.32-11.32l80,80A8,8,0,0,1,181.66,133.66Z" /></svg> </a><a href="/control-plane/" class="flex items-center justify-between gap-2 px-6 py-2 text-foreground hover:bg-muted hover:text-muted-foreground focus:bg-muted focus:text-muted-foreground transition-colors duration-200 ease-in-out"> <svg viewBox="0 0 256 256" fill="currentColor" class="size-5 shrink-0 fill-current"><path d="M229.11,70.82A16,16,0,0,0,216,64H136V32h16a8,8,0,0,0,0-16H104a8,8,0,0,0,0,16h16V64H40A16,16,0,0,0,25,85.47l26.19,72a16,16,0,0,0,15,10.53H96v64a8,8,0,0,0,16,0V168h32v64a8,8,0,0,0,16,0V168h29.82a16,16,0,0,0,15-10.53l26.19-72A16,16,0,0,0,229.11,70.82ZM110.68,152,97.58,80h60.84l-13.1,72ZM40,80H81.32l13.09,72H66.18Zm149.82,72H161.59l13.09-72H216Z" /></svg><span class="flex-1 text-lg font-normal tracking-tight">Control Plane</span><svg viewBox="0 0 256 256" fill="currentColor" class="size-5 shrink-0"><path d="M181.66,133.66l-80,80a8,8,0,0,1-11.32-11.32L164.69,128,90.34,53.66a8,8,0,0,1,11.32-11.32l80,80A8,8,0,0,1,181.66,133.66Z" /></svg> </a><a href="/mcp/" class="flex items-center justify-between gap-2 px-6 py-2 text-foreground hover:bg-muted hover:text-muted-foreground focus:bg-muted focus:text-muted-foreground transition-colors duration-200 ease-in-out"> <svg viewBox="0 0 256 256" fill="currentColor" class="size-5 shrink-0 fill-current"><path d="M200,48H136V16a8,8,0,0,0-16,0V48H56A32,32,0,0,0,24,80V192a32,32,0,0,0,32,32H200a32,32,0,0,0,32-32V80A32,32,0,0,0,200,48Zm16,144a16,16,0,0,1-16,16H56a16,16,0,0,1-16-16V80A16,16,0,0,1,56,64H200a16,16,0,0,1,16,16Zm-52-56H92a28,28,0,0,0,0,56h72a28,28,0,0,0,0-56Zm-24,16v24H116V152ZM80,164a12,12,0,0,1,12-12h8v24H92A12,12,0,0,1,80,164Zm84,12h-8V152h8a12,12,0,0,1,0,24ZM72,108a12,12,0,1,1,12,12A12,12,0,0,1,72,108Zm88,0a12,12,0,1,1,12,12A12,12,0,0,1,160,108Z" /></svg><span class="flex-1 text-lg font-normal tracking-tight">AI</span><svg viewBox="0 0 256 256" fill="currentColor" class="size-5 shrink-0"><path d="M181.66,133.66l-80,80a8,8,0,0,1-11.32-11.32L164.69,128,90.34,53.66a8,8,0,0,1,11.32-11.32l80,80A8,8,0,0,1,181.66,133.66Z" /></svg> </a><a href="/real-user-monitoring/" class="flex items-center justify-between gap-2 px-6 py-2 text-foreground hover:bg-muted hover:text-muted-foreground focus:bg-muted focus:text-muted-foreground transition-colors duration-200 ease-in-out"> <svg viewBox="0 0 256 256" fill="currentColor" class="size-5 shrink-0 fill-current"><path d="M240,128a8,8,0,0,1-8,8H204.94l-37.78,75.58A8,8,0,0,1,160,216h-.4a8,8,0,0,1-7.08-5.14L95.35,60.76,63.28,131.31A8,8,0,0,1,56,136H24a8,8,0,0,1,0-16H50.85L88.72,36.69a8,8,0,0,1,14.76.46l57.51,151,31.85-63.71A8,8,0,0,1,200,120h32A8,8,0,0,1,240,128Z" /></svg><span class="flex-1 text-lg font-normal tracking-tight">Real User Monitoring</span><svg viewBox="0 0 256 256" fill="currentColor" class="size-5 shrink-0"><path d="M181.66,133.66l-80,80a8,8,0,0,1-11.32-11.32L164.69,128,90.34,53.66a8,8,0,0,1,11.32-11.32l80,80A8,8,0,0,1,181.66,133.66Z" /></svg> </a><a href="/synthetic-monitoring/" class="flex items-center justify-between gap-2 px-6 py-2 text-foreground hover:bg-muted hover:text-muted-foreground focus:bg-muted focus:text-muted-foreground transition-colors duration-200 ease-in-out"> <svg viewBox="0 0 256 256" fill="currentColor" class="size-5 shrink-0 fill-current"><path d="M232,112H136V88h8a16,16,0,0,0,16-16V40a16,16,0,0,0-16-16H112A16,16,0,0,0,96,40V72a16,16,0,0,0,16,16h8v24H24a8,8,0,0,0,0,16H56v32H48a16,16,0,0,0-16,16v32a16,16,0,0,0,16,16H80a16,16,0,0,0,16-16V176a16,16,0,0,0-16-16H72V128H184v32h-8a16,16,0,0,0-16,16v32a16,16,0,0,0,16,16h32a16,16,0,0,0,16-16V176a16,16,0,0,0-16-16h-8V128h32a8,8,0,0,0,0-16ZM112,40h32V72H112ZM80,208H48V176H80Zm128,0H176V176h32Z" /></svg><span class="flex-1 text-lg font-normal tracking-tight">Synthetic Monitoring</span><svg viewBox="0 0 256 256" fill="currentColor" class="size-5 shrink-0"><path d="M181.66,133.66l-80,80a8,8,0,0,1-11.32-11.32L164.69,128,90.34,53.66a8,8,0,0,1,11.32-11.32l80,80A8,8,0,0,1,181.66,133.66Z" /></svg> </a><a href="/gpu-observability/" class="flex items-center justify-between gap-2 px-6 py-2 text-foreground hover:bg-muted hover:text-muted-foreground focus:bg-muted focus:text-muted-foreground transition-colors duration-200 ease-in-out"> <svg viewBox="0 0 256 256" fill="currentColor" class="size-5 shrink-0 fill-current"><path d="M232,48H16a8,8,0,0,0-8,8V208a8,8,0,0,0,16,0V192H40v16a8,8,0,0,0,16,0V192H72v16a8,8,0,0,0,16,0V192h16v16a8,8,0,0,0,16,0V192H232a16,16,0,0,0,16-16V64A16,16,0,0,0,232,48Zm0,128H24V64H232Zm-56-16a40,40,0,1,0-40-40A40,40,0,0,0,176,160Zm-24-40a23.74,23.74,0,0,1,2.35-10.34l32,32A23.74,23.74,0,0,1,176,144,24,24,0,0,1,152,120Zm48,0a23.74,23.74,0,0,1-2.35,10.34l-32-32A23.74,23.74,0,0,1,176,96,24,24,0,0,1,200,120ZM80,160a40,40,0,1,0-40-40A40,40,0,0,0,80,160ZM56,120a23.74,23.74,0,0,1,2.35-10.34l32,32A23.74,23.74,0,0,1,80,144,24,24,0,0,1,56,120Zm48,0a23.74,23.74,0,0,1-2.35,10.34l-32-32A23.74,23.74,0,0,1,80,96,24,24,0,0,1,104,120Z" /></svg><span class="flex-1 text-lg font-normal tracking-tight">GPU Workloads</span><svg viewBox="0 0 256 256" fill="currentColor" class="size-5 shrink-0"><path d="M181.66,133.66l-80,80a8,8,0,0,1-11.32-11.32L164.69,128,90.34,53.66a8,8,0,0,1,11.32-11.32l80,80A8,8,0,0,1,181.66,133.66Z" /></svg> </a><a href="/alerting/" class="flex items-center justify-between gap-2 px-6 py-2 text-foreground hover:bg-muted hover:text-muted-foreground focus:bg-muted focus:text-muted-foreground transition-colors duration-200 ease-in-out"> <svg viewBox="0 0 256 256" fill="currentColor" class="size-5 shrink-0 fill-current"><path d="M216,128v80a16,16,0,0,1-16,16H48a16,16,0,0,1-16-16V56A16,16,0,0,1,48,40h80a8,8,0,0,1,0,16H48V208H200V128a8,8,0,0,1,16,0Zm16-68a36,36,0,1,1-36-36A36,36,0,0,1,232,60Zm-16,0a20,20,0,1,0-20,20A20,20,0,0,0,216,60Z" /></svg><span class="flex-1 text-lg font-normal tracking-tight">Alerting</span><svg viewBox="0 0 256 256" fill="currentColor" class="size-5 shrink-0"><path d="M181.66,133.66l-80,80a8,8,0,0,1-11.32-11.32L164.69,128,90.34,53.66a8,8,0,0,1,11.32-11.32l80,80A8,8,0,0,1,181.66,133.66Z" /></svg> </a> </div> </div> <div class="flex flex-col"> <span class="px-6 py-2 text-sm font-semibold tracking-wide text-foreground uppercase">Resources</span> <div class="flex flex-col"> <a href="/guides/" class="flex items-center justify-between gap-2 px-6 py-2 text-foreground hover:bg-muted hover:text-muted-foreground focus:bg-muted focus:text-muted-foreground transition-colors duration-200 ease-in-out"> <svg viewBox="0 0 256 256" fill="currentColor" class="size-5 shrink-0 fill-current"><path d="M184,32H72A16,16,0,0,0,56,48V224a8,8,0,0,0,12.24,6.78L128,193.43l59.77,37.35A8,8,0,0,0,200,224V48A16,16,0,0,0,184,32Zm0,177.57-51.77-32.35a8,8,0,0,0-8.48,0L72,209.57V48H184Z" /></svg><span class="flex-1 text-lg font-normal tracking-tight">Guides</span><svg viewBox="0 0 256 256" fill="currentColor" class="size-5 shrink-0"><path d="M181.66,133.66l-80,80a8,8,0,0,1-11.32-11.32L164.69,128,90.34,53.66a8,8,0,0,1,11.32-11.32l80,80A8,8,0,0,1,181.66,133.66Z" /></svg> </a><a href="/blog/" class="flex items-center justify-between gap-2 px-6 py-2 text-foreground hover:bg-muted hover:text-muted-foreground focus:bg-muted focus:text-muted-foreground transition-colors duration-200 ease-in-out"> <svg viewBox="0 0 256 256" fill="currentColor" class="size-5 shrink-0 fill-current"><path d="M232,48H160a40,40,0,0,0-32,16A40,40,0,0,0,96,48H24a8,8,0,0,0-8,8V200a8,8,0,0,0,8,8H96a24,24,0,0,1,24,24,8,8,0,0,0,16,0,24,24,0,0,1,24-24h72a8,8,0,0,0,8-8V56A8,8,0,0,0,232,48ZM96,192H32V64H96a24,24,0,0,1,24,24V200A39.81,39.81,0,0,0,96,192Zm128,0H160a39.81,39.81,0,0,0-24,8V88a24,24,0,0,1,24-24h64ZM160,88h40a8,8,0,0,1,0,16H160a8,8,0,0,1,0-16Zm48,40a8,8,0,0,1-8,8H160a8,8,0,0,1,0-16h40A8,8,0,0,1,208,128Zm0,32a8,8,0,0,1-8,8H160a8,8,0,0,1,0-16h40A8,8,0,0,1,208,160Z" /></svg><span class="flex-1 text-lg font-normal tracking-tight">Blog</span><svg viewBox="0 0 256 256" fill="currentColor" class="size-5 shrink-0"><path d="M181.66,133.66l-80,80a8,8,0,0,1-11.32-11.32L164.69,128,90.34,53.66a8,8,0,0,1,11.32-11.32l80,80A8,8,0,0,1,181.66,133.66Z" /></svg> </a><a href="/events/" class="flex items-center justify-between gap-2 px-6 py-2 text-foreground hover:bg-muted hover:text-muted-foreground focus:bg-muted focus:text-muted-foreground transition-colors duration-200 ease-in-out"> <svg viewBox="0 0 256 256" fill="currentColor" class="size-5 shrink-0 fill-current"><path d="M111.49,52.63a15.8,15.8,0,0,0-26,5.77L33,202.78A15.83,15.83,0,0,0,47.76,224a16,16,0,0,0,5.46-1l144.37-52.5a15.8,15.8,0,0,0,5.78-26Zm-8.33,135.21-35-35,13.16-36.21,58.05,58.05Zm-55,20,14-38.41,24.45,24.45ZM156,168.64,87.36,100l13-35.87,91.43,91.43ZM160,72a37.8,37.8,0,0,1,3.84-15.58C169.14,45.83,179.14,40,192,40c6.7,0,11-2.29,13.65-7.21A22,22,0,0,0,208,23.94,8,8,0,0,1,224,24c0,12.86-8.52,32-32,32-6.7,0-11,2.29-13.65,7.21A22,22,0,0,0,176,72.06,8,8,0,0,1,160,72ZM136,40V16a8,8,0,0,1,16,0V40a8,8,0,0,1-16,0Zm101.66,82.34a8,8,0,1,1-11.32,11.31l-16-16a8,8,0,0,1,11.32-11.32Zm4.87-42.75-24,8a8,8,0,0,1-5.06-15.18l24-8a8,8,0,0,1,5.06,15.18Z" /></svg><span class="flex-1 text-lg font-normal tracking-tight">Events</span><svg viewBox="0 0 256 256" fill="currentColor" class="size-5 shrink-0"><path d="M181.66,133.66l-80,80a8,8,0,0,1-11.32-11.32L164.69,128,90.34,53.66a8,8,0,0,1,11.32-11.32l80,80A8,8,0,0,1,181.66,133.66Z" /></svg> </a><a href="/changelog/" class="flex items-center justify-between gap-2 px-6 py-2 text-foreground hover:bg-muted hover:text-muted-foreground focus:bg-muted focus:text-muted-foreground transition-colors duration-200 ease-in-out"> <svg viewBox="0 0 256 256" fill="currentColor" class="size-5 shrink-0 fill-current"><path d="M214.86,180.12a8,8,0,0,1-11,2.74L136,142.13V216a8,8,0,0,1-16,0V142.13L52.12,182.86a8,8,0,1,1-8.23-13.72L112.45,128,43.89,86.86a8,8,0,1,1,8.23-13.72L120,113.87V40a8,8,0,0,1,16,0v73.87l67.88-40.73a8,8,0,1,1,8.23,13.72L143.55,128l68.56,41.14A8,8,0,0,1,214.86,180.12Z" /></svg><span class="flex-1 text-lg font-normal tracking-tight">Changelog</span><svg viewBox="0 0 256 256" fill="currentColor" class="size-5 shrink-0"><path d="M181.66,133.66l-80,80a8,8,0,0,1-11.32-11.32L164.69,128,90.34,53.66a8,8,0,0,1,11.32-11.32l80,80A8,8,0,0,1,181.66,133.66Z" /></svg> </a> </div> </div> <div class="flex flex-col"> <span class="px-6 py-2 text-sm font-semibold tracking-wide text-foreground uppercase">More</span> <div class="flex flex-col"> <a href="/customers/" class="flex items-center justify-between gap-2 px-6 py-2 text-foreground hover:bg-muted hover:text-muted-foreground focus:bg-muted focus:text-muted-foreground transition-colors duration-200 ease-in-out"> <svg viewBox="0 0 256 256" fill="currentColor" class="size-5 shrink-0 fill-current"><path d="M144,165.68a68,68,0,1,0-71.9,0c-20.65,6.76-39.23,19.39-54.17,37.17a8,8,0,0,0,12.25,10.3C50.25,189.19,77.91,176,108,176s57.75,13.19,77.88,37.15a8,8,0,1,0,12.25-10.3C183.18,185.07,164.6,172.44,144,165.68ZM56,108a52,52,0,1,1,52,52A52.06,52.06,0,0,1,56,108ZM207.36,65.6a108.36,108.36,0,0,1,0,84.8,8,8,0,0,1-7.36,4.86,8,8,0,0,1-7.36-11.15,92.26,92.26,0,0,0,0-72.22,8,8,0,0,1,14.72-6.29ZM248,108a139,139,0,0,1-11.29,55.15,8,8,0,0,1-14.7-6.3,124.43,124.43,0,0,0,0-97.7,8,8,0,1,1,14.7-6.3A139,139,0,0,1,248,108Z" /></svg><span class="flex-1 text-lg font-normal tracking-tight">Customers</span><svg viewBox="0 0 256 256" fill="currentColor" class="size-5 shrink-0"><path d="M181.66,133.66l-80,80a8,8,0,0,1-11.32-11.32L164.69,128,90.34,53.66a8,8,0,0,1,11.32-11.32l80,80A8,8,0,0,1,181.66,133.66Z" /></svg> </a><a href="/docs/" class="flex items-center justify-between gap-2 px-6 py-2 text-foreground hover:bg-muted hover:text-muted-foreground focus:bg-muted focus:text-muted-foreground transition-colors duration-200 ease-in-out"> <svg viewBox="0 0 256 256" fill="currentColor" class="size-5 shrink-0 fill-current"><path d="M128,24A104,104,0,1,0,232,128,104.11,104.11,0,0,0,128,24Zm39.1,131.79a47.84,47.84,0,0,0,0-55.58l28.5-28.49a87.83,87.83,0,0,1,0,112.56ZM96,128a32,32,0,1,1,32,32A32,32,0,0,1,96,128Zm88.28-67.6L155.79,88.9a47.84,47.84,0,0,0-55.58,0L71.72,60.4a87.83,87.83,0,0,1,112.56,0ZM60.4,71.72l28.5,28.49a47.84,47.84,0,0,0,0,55.58L60.4,184.28a87.83,87.83,0,0,1,0-112.56ZM71.72,195.6l28.49-28.5a47.84,47.84,0,0,0,55.58,0l28.49,28.5a87.83,87.83,0,0,1-112.56,0Z" /></svg><span class="flex-1 text-lg font-normal tracking-tight">Docs</span><svg viewBox="0 0 256 256" fill="currentColor" class="size-5 shrink-0"><path d="M181.66,133.66l-80,80a8,8,0,0,1-11.32-11.32L164.69,128,90.34,53.66a8,8,0,0,1,11.32-11.32l80,80A8,8,0,0,1,181.66,133.66Z" /></svg> </a> </div> </div> </div> </div> </div> </div> <div class="hidden lg:flex"> <div class="mx-auto w-full max-w-340 px-6 flex justify-between gap-4 pr-5 pl-4"> <div class="flex items-center justify-center rounded-lg noise-bg bg-background/60 px-2 py-1"> <a href="/" class="flex items-center justify-center"> <span class="sr-only">Last9</span> <svg height="24" width="71" viewBox="0 0 71 24" fill="white" aria-hidden="true" focusable="false" class="h-6 dark:hidden"><use href="#logo-last9-large-logo"></use></svg> <svg height="24" width="71" viewBox="0 0 71 24" fill="black" aria-hidden="true" focusable="false" class="h-6 not-dark:hidden"><use href="#logo-last9-large-logo"></use></svg> </a> </div> <nav data-root data-navigation class="relative rounded-lg noise-bg bg-background/60 p-1"> <ul data-list class="flex items-center justify-center gap-1"> <li data-item class="flex items-center justify-center"> <div data-trigger data-state="closed" class="flex items-center justify-center group"> <div class="flex items-center justify-center rounded p-2.5 cursor-pointer transition-colors duration-200 ease-in-out select-none text-sm font-normal tracking-tight text-foreground hover:bg-background-dark hover:text-foreground-dark focus:bg-background-dark focus:text-foreground-dark group-data-[state=open]:bg-background-dark group-data-[state=open]:text-foreground-dark"> <div class="flex items-center justify-center gap-1"> <span class="leading-trim">Product</span> <svg viewBox="0 0 256 256" fill="currentColor" class="-my-2 h-4 w-4 shrink-0 transition-transform duration-200 ease-in-out group-data-[state=open]:-rotate-180" aria-hidden="true"><path d="M213.66,101.66l-80,80a8,8,0,0,1-11.32,0l-80-80A8,8,0,0,1,53.66,90.34L128,164.69l74.34-74.35a8,8,0,0,1,11.32,11.32Z" /></svg> </div> </div> </div> <div data-content data-state="closed" class="hidden"> <div class="flex w-[calc(100dvw-40px)] xl:w-auto"> <div class="flex border-r-2 border-border-darkest px-10 py-8 xl:min-w-76"> <div class="flex"> <div class="flex flex-col gap-12"> <div class="flex flex-col gap-2"> <a href="/discover/" class="flex flex-row items-center gap-2 text-foreground transition-colors duration-200 ease-in-out hover:text-foreground-3"> <svg viewBox="0 0 256 256" fill="currentColor" class="size-6 shrink-0 fill-current"><path d="M245.11,60.68c-7.65-13.19-27.84-16.16-58.5-8.66A95.93,95.93,0,0,0,32,128a98,98,0,0,0,.78,12.31C5.09,169,5.49,186,10.9,195.32,16,204.16,26.64,208,40.64,208a124.11,124.11,0,0,0,28.79-4A95.93,95.93,0,0,0,224,128a97.08,97.08,0,0,0-.77-12.25c12.5-13,20.82-25.35,23.65-35.92C248.83,72.51,248.24,66.07,245.11,60.68ZM128,48a80.11,80.11,0,0,1,78,62.2c-17.06,16.06-40.15,32.53-62.07,45.13C116.38,171.14,92.48,181,73.42,186.4A79.94,79.94,0,0,1,128,48ZM24.74,187.29c-1.46-2.51-.65-7.24,2.22-13a79.05,79.05,0,0,1,10.29-15.05,96,96,0,0,0,18,31.32C38,193.46,27.24,191.61,24.74,187.29ZM128,208a79.45,79.45,0,0,1-38.56-9.94,370,370,0,0,0,62.43-28.86c21.58-12.39,40.68-25.82,56.07-39.08A80.07,80.07,0,0,1,128,208ZM231.42,75.69c-1.7,6.31-6.19,13.53-12.63,21.13a95.69,95.69,0,0,0-18-31.35c14.21-2.35,27.37-2.17,30.5,3.24C232.19,70.28,232.24,72.63,231.42,75.69Z" /></svg><span class="text-base font-semibold tracking-wide uppercase">Discover</span> </a> <p class="text-base font-normal tracking-tight text-foreground-3"> Auto-discover everything you run & trace problems to the root cause—fast </p> </div> <div class="flex flex-1 justify-between gap-2"> <div class="flex flex-col gap-4"> <a href="/discover/#discover-application-monitoring" class="text-base font-normal tracking-tight text-nowrap text-foreground transition-colors duration-200 ease-in-out hover:text-foreground-3"> Services </a><a href="/discover/#discover-k8s-monitoring" class="text-base font-normal tracking-tight text-nowrap text-foreground transition-colors duration-200 ease-in-out hover:text-foreground-3"> Kubernetes </a><a href="/discover/#discover-async-jobs-monitoring" class="text-base font-normal tracking-tight text-nowrap text-foreground transition-colors duration-200 ease-in-out hover:text-foreground-3"> Jobs </a><a href="/discover/#discover-host-monitoring" class="text-base font-normal tracking-tight text-nowrap text-foreground transition-colors duration-200 ease-in-out hover:text-foreground-3"> Hosts </a><a href="/real-user-monitoring/" class="text-base font-normal tracking-tight text-nowrap text-foreground transition-colors duration-200 ease-in-out hover:text-foreground-3"> Applications (RUM) </a> </div> <div style="--image-width: 100; --image-height: 150;" class="mt-auto aspect-[var(--image-width)/var(--image-height)] h-[calc(var(--image-height)*1px)]"> <img src="/_astro/discover-image.e9z1e6g4_DDwRg.webp" alt="Discover" loading="lazy" decoding="async" fetchpriority="auto" width="399" height="615" class="h-full w-full"> </div> </div> </div> </div> </div> <div class="flex border-r-2 border-border-darkest px-10 py-8 xl:min-w-76"> <div class="flex"> <div class="flex flex-col gap-12"> <div class="flex flex-col gap-2"> <div class="flex flex-row items-center gap-2 text-foreground"><svg viewBox="0 0 256 256" fill="currentColor" class="size-6 shrink-0 fill-current"><path d="M128,24A104,104,0,1,0,232,128,104.11,104.11,0,0,0,128,24Zm0,192a88,88,0,1,1,88-88A88.1,88.1,0,0,1,128,216ZM172.42,72.84l-64,32a8.05,8.05,0,0,0-3.58,3.58l-32,64A8,8,0,0,0,80,184a8.1,8.1,0,0,0,3.58-.84l64-32a8.05,8.05,0,0,0,3.58-3.58l32-64a8,8,0,0,0-10.74-10.74ZM138,138,97.89,158.11,118,118l40.15-20.07Z" /></svg><span class="text-base font-semibold tracking-wide uppercase">Explore</span></div> <p class="text-base font-normal tracking-tight text-foreground-3"> Stream & analyze millions of events per minute, all correlated </p> </div> <div class="flex flex-1 justify-between gap-2"> <div class="flex flex-col gap-4"> <a href="/logs/" class="text-base font-normal tracking-tight text-nowrap text-foreground transition-colors duration-200 ease-in-out hover:text-foreground-3"> Logs </a><a href="/traces/" class="text-base font-normal tracking-tight text-nowrap text-foreground transition-colors duration-200 ease-in-out hover:text-foreground-3"> Traces </a><a href="/metrics/" class="text-base font-normal tracking-tight text-nowrap text-foreground transition-colors duration-200 ease-in-out hover:text-foreground-3"> Metrics </a> </div> <div style="--image-width: 125; --image-height: 125;" class="mt-auto aspect-[var(--image-width)/var(--image-height)] h-[calc(var(--image-height)*1px)]"> <img src="/_astro/explore-image.G4W8fKFA_1AxD2D.webp" alt="Explore" loading="lazy" decoding="async" fetchpriority="auto" width="502" height="515" class="h-full w-full"> </div> </div> </div> </div> </div> <div class="flex border-r-2 border-border-darkest px-10 py-8 xl:min-w-76"> <div class="flex"> <div class="flex flex-col gap-12"> <div class="flex flex-col gap-2"> <a href="/control-plane/" class="flex flex-row items-center gap-2 text-foreground transition-colors duration-200 ease-in-out hover:text-foreground-3"> <svg viewBox="0 0 256 256" fill="currentColor" class="size-6 shrink-0 fill-current"><path d="M229.11,70.82A16,16,0,0,0,216,64H136V32h16a8,8,0,0,0,0-16H104a8,8,0,0,0,0,16h16V64H40A16,16,0,0,0,25,85.47l26.19,72a16,16,0,0,0,15,10.53H96v64a8,8,0,0,0,16,0V168h32v64a8,8,0,0,0,16,0V168h29.82a16,16,0,0,0,15-10.53l26.19-72A16,16,0,0,0,229.11,70.82ZM110.68,152,97.58,80h60.84l-13.1,72ZM40,80H81.32l13.09,72H66.18Zm149.82,72H161.59l13.09-72H216Z" /></svg><span class="text-base font-semibold tracking-wide uppercase">Control Plane</span> </a> <p class="text-base font-normal tracking-tight text-foreground-3"> First-class DX to manage incoming telemetry data in real-time </p> </div> <div class="flex flex-1 justify-between gap-2"> <div class="flex flex-col gap-4"> <a href="/control-plane/#control-plane-ingestion" class="text-base font-normal tracking-tight text-nowrap text-foreground transition-colors duration-200 ease-in-out hover:text-foreground-3"> Ingestion </a><a href="/control-plane/#control-plane-storage" class="text-base font-normal tracking-tight text-nowrap text-foreground transition-colors duration-200 ease-in-out hover:text-foreground-3"> Storage </a><a href="/control-plane/#control-plane-query" class="text-base font-normal tracking-tight text-nowrap text-foreground transition-colors duration-200 ease-in-out hover:text-foreground-3"> Query </a><a href="/control-plane/#control-plane-analytics" class="text-base font-normal tracking-tight text-nowrap text-foreground transition-colors duration-200 ease-in-out hover:text-foreground-3"> Analytics </a> </div> <div style="--image-width: 90; --image-height: 110;" class="mt-auto aspect-[var(--image-width)/var(--image-height)] h-[calc(var(--image-height)*1px)]"> <img src="/_astro/control-plane-image.COxbBXac_uegXi.webp" alt="Control Plane" loading="lazy" decoding="async" fetchpriority="auto" width="368" height="455" class="h-full w-full"> </div> </div> </div> </div> </div> <div class="flex flex-col justify-between gap-4 px-10 py-8 xl:min-w-84"> <div class="flex"> <div class="flex flex-col gap-2"> <a href="/mcp/" class="flex flex-row items-center gap-2 text-foreground transition-colors duration-200 ease-in-out hover:text-foreground-3"> <svg viewBox="0 0 256 256" fill="currentColor" class="size-6 shrink-0 fill-current"><path d="M200,48H136V16a8,8,0,0,0-16,0V48H56A32,32,0,0,0,24,80V192a32,32,0,0,0,32,32H200a32,32,0,0,0,32-32V80A32,32,0,0,0,200,48Zm16,144a16,16,0,0,1-16,16H56a16,16,0,0,1-16-16V80A16,16,0,0,1,56,64H200a16,16,0,0,1,16,16Zm-52-56H92a28,28,0,0,0,0,56h72a28,28,0,0,0,0-56Zm-24,16v24H116V152ZM80,164a12,12,0,0,1,12-12h8v24H92A12,12,0,0,1,80,164Zm84,12h-8V152h8a12,12,0,0,1,0,24ZM72,108a12,12,0,1,1,12,12A12,12,0,0,1,72,108Zm88,0a12,12,0,1,1,12,12A12,12,0,0,1,160,108Z" /></svg><span class="text-base font-semibold tracking-wide uppercase">AI</span> </a> <p class="text-base font-normal tracking-tight text-foreground-3"> Natural language insights & debugging in your IDE </p> </div> </div> <div class="flex"> <div class="flex flex-col gap-2"> <a href="/synthetic-monitoring/" class="flex flex-row items-center gap-2 text-foreground transition-colors duration-200 ease-in-out hover:text-foreground-3"> <svg viewBox="0 0 256 256" fill="currentColor" class="size-6 shrink-0 fill-current"><path d="M232,112H136V88h8a16,16,0,0,0,16-16V40a16,16,0,0,0-16-16H112A16,16,0,0,0,96,40V72a16,16,0,0,0,16,16h8v24H24a8,8,0,0,0,0,16H56v32H48a16,16,0,0,0-16,16v32a16,16,0,0,0,16,16H80a16,16,0,0,0,16-16V176a16,16,0,0,0-16-16H72V128H184v32h-8a16,16,0,0,0-16,16v32a16,16,0,0,0,16,16h32a16,16,0,0,0,16-16V176a16,16,0,0,0-16-16h-8V128h32a8,8,0,0,0,0-16ZM112,40h32V72H112ZM80,208H48V176H80Zm128,0H176V176h32Z" /></svg><span class="text-base font-semibold tracking-wide uppercase">Synthetic Monitoring</span> </a> <p class="text-base font-normal tracking-tight text-foreground-3"> Uptime checks that end in a trace </p> </div> </div> <div class="flex"> <div class="flex flex-col gap-2"> <a href="/gpu-observability/" class="flex flex-row items-center gap-2 text-foreground transition-colors duration-200 ease-in-out hover:text-foreground-3"> <svg viewBox="0 0 256 256" fill="currentColor" class="size-6 shrink-0 fill-current"><path d="M232,48H16a8,8,0,0,0-8,8V208a8,8,0,0,0,16,0V192H40v16a8,8,0,0,0,16,0V192H72v16a8,8,0,0,0,16,0V192h16v16a8,8,0,0,0,16,0V192H232a16,16,0,0,0,16-16V64A16,16,0,0,0,232,48Zm0,128H24V64H232Zm-56-16a40,40,0,1,0-40-40A40,40,0,0,0,176,160Zm-24-40a23.74,23.74,0,0,1,2.35-10.34l32,32A23.74,23.74,0,0,1,176,144,24,24,0,0,1,152,120Zm48,0a23.74,23.74,0,0,1-2.35,10.34l-32-32A23.74,23.74,0,0,1,176,96,24,24,0,0,1,200,120ZM80,160a40,40,0,1,0-40-40A40,40,0,0,0,80,160ZM56,120a23.74,23.74,0,0,1,2.35-10.34l32,32A23.74,23.74,0,0,1,80,144,24,24,0,0,1,56,120Zm48,0a23.74,23.74,0,0,1-2.35,10.34l-32-32A23.74,23.74,0,0,1,80,96,24,24,0,0,1,104,120Z" /></svg><span class="text-base font-semibold tracking-wide uppercase">GPU Workloads</span> </a> <p class="text-base font-normal tracking-tight text-foreground-3"> Utilization & performance for GPU fleets </p> </div> </div> <div class="flex"> <div class="flex flex-col gap-2"> <a href="/alerting/" class="flex flex-row items-center gap-2 text-foreground transition-colors duration-200 ease-in-out hover:text-foreground-3"> <svg viewBox="0 0 256 256" fill="currentColor" class="size-6 shrink-0 fill-current"><path d="M216,128v80a16,16,0,0,1-16,16H48a16,16,0,0,1-16-16V56A16,16,0,0,1,48,40h80a8,8,0,0,1,0,16H48V208H200V128a8,8,0,0,1,16,0Zm16-68a36,36,0,1,1-36-36A36,36,0,0,1,232,60Zm-16,0a20,20,0,1,0-20,20A20,20,0,0,0,216,60Z" /></svg><span class="text-base font-semibold tracking-wide uppercase">Alerting</span> </a> <p class="text-base font-normal tracking-tight text-foreground-3"> For high-cardinality environments </p> </div> </div> </div> </div> </div> </li> <li data-item class="flex items-center justify-center"> <div data-trigger data-state="closed" class="flex items-center justify-center group"> <div class="flex items-center justify-center rounded p-2.5 cursor-pointer transition-colors duration-200 ease-in-out select-none text-sm font-normal tracking-tight text-foreground hover:bg-background-dark hover:text-foreground-dark focus:bg-background-dark focus:text-foreground-dark group-data-[state=open]:bg-background-dark group-data-[state=open]:text-foreground-dark"> <div class="flex items-center justify-center gap-1"> <span class="leading-trim">Resources</span> <svg viewBox="0 0 256 256" fill="currentColor" class="-my-2 h-4 w-4 shrink-0 transition-transform duration-200 ease-in-out group-data-[state=open]:-rotate-180" aria-hidden="true"><path d="M213.66,101.66l-80,80a8,8,0,0,1-11.32,0l-80-80A8,8,0,0,1,53.66,90.34L128,164.69l74.34-74.35a8,8,0,0,1,11.32,11.32Z" /></svg> </div> </div> </div> <div data-content data-state="closed" class="hidden"> <div class="flex"> <div class="flex min-w-76 border-r-2 border-border-darkest px-10 py-8"> <div class="flex"> <div class="flex flex-col gap-12"> <div class="flex flex-col gap-2"> <a href="/guides/" class="flex flex-row items-center gap-2 text-foreground transition-colors duration-200 ease-in-out hover:text-foreground-3"> <svg viewBox="0 0 256 256" fill="currentColor" class="size-6 shrink-0 fill-current"><path d="M184,32H72A16,16,0,0,0,56,48V224a8,8,0,0,0,12.24,6.78L128,193.43l59.77,37.35A8,8,0,0,0,200,224V48A16,16,0,0,0,184,32Zm0,177.57-51.77-32.35a8,8,0,0,0-8.48,0L72,209.57V48H184Z" /></svg><span class="text-base font-semibold tracking-wide uppercase">Guides</span> </a> <p class="text-base font-normal tracking-tight text-foreground-3"> Comprehensive docs for engineers building large-scale applications </p> </div> <div class="flex flex-1 justify-between gap-2"> <div class="flex flex-col gap-4"> <a href="/guides/opentelemetry/" class="text-base font-normal tracking-tight text-nowrap text-foreground transition-colors duration-200 ease-in-out hover:text-foreground-3"> OpenTelemetry </a><a href="/guides/high-cardinality/" class="text-base font-normal tracking-tight text-nowrap text-foreground transition-colors duration-200 ease-in-out hover:text-foreground-3"> High Cardinality </a><a href="/guides/prometheus/" class="text-base font-normal tracking-tight text-nowrap text-foreground transition-colors duration-200 ease-in-out hover:text-foreground-3"> Prometheus </a><a href="/guides/logql/" class="text-base font-normal tracking-tight text-nowrap text-foreground transition-colors duration-200 ease-in-out hover:text-foreground-3"> LogQL </a> </div> <div style="--image-width: 116; --image-height: 100;" class="mt-auto aspect-[var(--image-width)/var(--image-height)] h-[calc(var(--image-height)*1px)]"> <img src="/_astro/guides-image.BxEF4Cgk_Z2aWFpQ.webp" alt="Guides" loading="lazy" decoding="async" fetchpriority="auto" width="466" height="409" class="h-full w-full"> </div> </div> </div> </div> </div> <div class="flex min-w-84 flex-col justify-between px-10 py-8"> <div class="flex"> <div class="flex flex-col gap-2"> <a href="/blog/" class="flex flex-row items-center gap-2 text-foreground transition-colors duration-200 ease-in-out hover:text-foreground-3"> <svg viewBox="0 0 256 256" fill="currentColor" class="size-6 shrink-0 fill-current"><path d="M232,48H160a40,40,0,0,0-32,16A40,40,0,0,0,96,48H24a8,8,0,0,0-8,8V200a8,8,0,0,0,8,8H96a24,24,0,0,1,24,24,8,8,0,0,0,16,0,24,24,0,0,1,24-24h72a8,8,0,0,0,8-8V56A8,8,0,0,0,232,48ZM96,192H32V64H96a24,24,0,0,1,24,24V200A39.81,39.81,0,0,0,96,192Zm128,0H160a39.81,39.81,0,0,0-24,8V88a24,24,0,0,1,24-24h64ZM160,88h40a8,8,0,0,1,0,16H160a8,8,0,0,1,0-16Zm48,40a8,8,0,0,1-8,8H160a8,8,0,0,1,0-16h40A8,8,0,0,1,208,128Zm0,32a8,8,0,0,1-8,8H160a8,8,0,0,1,0-16h40A8,8,0,0,1,208,160Z" /></svg><span class="text-base font-semibold tracking-wide uppercase">Blog</span> </a> <p class="text-base font-normal tracking-tight text-foreground-3"> Stories, guides, and lessons from the world of observability </p> </div> </div> <div class="flex"> <div class="flex flex-col gap-2"> <a href="/events/" class="flex flex-row items-center gap-2 text-foreground transition-colors duration-200 ease-in-out hover:text-foreground-3"> <svg viewBox="0 0 256 256" fill="currentColor" class="size-6 shrink-0 fill-current"><path d="M111.49,52.63a15.8,15.8,0,0,0-26,5.77L33,202.78A15.83,15.83,0,0,0,47.76,224a16,16,0,0,0,5.46-1l144.37-52.5a15.8,15.8,0,0,0,5.78-26Zm-8.33,135.21-35-35,13.16-36.21,58.05,58.05Zm-55,20,14-38.41,24.45,24.45ZM156,168.64,87.36,100l13-35.87,91.43,91.43ZM160,72a37.8,37.8,0,0,1,3.84-15.58C169.14,45.83,179.14,40,192,40c6.7,0,11-2.29,13.65-7.21A22,22,0,0,0,208,23.94,8,8,0,0,1,224,24c0,12.86-8.52,32-32,32-6.7,0-11,2.29-13.65,7.21A22,22,0,0,0,176,72.06,8,8,0,0,1,160,72ZM136,40V16a8,8,0,0,1,16,0V40a8,8,0,0,1-16,0Zm101.66,82.34a8,8,0,1,1-11.32,11.31l-16-16a8,8,0,0,1,11.32-11.32Zm4.87-42.75-24,8a8,8,0,0,1-5.06-15.18l24-8a8,8,0,0,1,5.06,15.18Z" /></svg><span class="text-base font-semibold tracking-wide uppercase">Events</span> </a> <p class="text-base font-normal tracking-tight text-foreground-3"> SRE & DevOps sharing meets </p> </div> </div> <div class="flex"> <div class="flex flex-col gap-2"> <a href="/changelog/" class="flex flex-row items-center gap-2 text-foreground transition-colors duration-200 ease-in-out hover:text-foreground-3"> <svg viewBox="0 0 256 256" fill="currentColor" class="size-6 shrink-0 fill-current"><path d="M214.86,180.12a8,8,0,0,1-11,2.74L136,142.13V216a8,8,0,0,1-16,0V142.13L52.12,182.86a8,8,0,1,1-8.23-13.72L112.45,128,43.89,86.86a8,8,0,1,1,8.23-13.72L120,113.87V40a8,8,0,0,1,16,0v73.87l67.88-40.73a8,8,0,1,1,8.23,13.72L143.55,128l68.56,41.14A8,8,0,0,1,214.86,180.12Z" /></svg><span class="text-base font-semibold tracking-wide uppercase">Changelog</span> </a> <p class="text-base font-normal tracking-tight text-foreground-3"> Updates and improvements </p> </div> </div> </div> </div> </div> </li> <li data-item class="flex items-center justify-center"> <div class="flex items-center justify-center rounded p-2.5 cursor-pointer transition-colors duration-200 ease-in-out select-none text-sm font-normal tracking-tight text-foreground hover:bg-background-dark hover:text-foreground-dark focus:bg-background-dark focus:text-foreground-dark group-data-[state=open]:bg-background-dark group-data-[state=open]:text-foreground-dark"> <a href="/customers/" class="flex items-center justify-center"> <span class="leading-trim">Customers</span> </a> </div> </li> <li data-item class="flex items-center justify-center"> <div class="flex items-center justify-center rounded p-2.5 cursor-pointer transition-colors duration-200 ease-in-out select-none text-sm font-normal tracking-tight text-foreground hover:bg-background-dark hover:text-foreground-dark focus:bg-background-dark focus:text-foreground-dark group-data-[state=open]:bg-background-dark group-data-[state=open]:text-foreground-dark"> <a href="/docs/" class="flex items-center justify-center"> <span class="leading-trim">Docs</span> </a> </div> </li> <li data-item class="flex items-center justify-center"> <div class="flex items-center justify-center rounded p-2.5 cursor-pointer transition-colors duration-200 ease-in-out select-none text-sm font-normal tracking-tight focus:bg-background-dark focus:text-foreground-dark group-data-[state=open]:bg-background-dark group-data-[state=open]:text-foreground-dark bg-secondary text-secondary-foreground hover:bg-secondary-hover hover:text-secondary-foreground-hover"> <a href="/schedule-demo/" class="flex items-center justify-center"> <span class="leading-trim">Book demo</span> </a> </div> </li> </ul> <div data-viewport data-state="closed" class="data-[state=closed]:hidden data-[state=closing]:block data-[state=closing]:animate-fade-out data-[state=open]:block data-[state=open]:animate-fade-in absolute top-[calc(100%+8px)] right-0 rounded-lg noise-bg bg-background-dark"></div> </nav> <script>
|
||
(function () {
|
||
function NavigationMenuHandler(element) {
|
||
this.element = element;
|
||
this.items = element.querySelectorAll("[data-item]");
|
||
this.viewport = element.querySelector("[data-viewport]");
|
||
this.activeItem = null;
|
||
this.setup();
|
||
}
|
||
|
||
NavigationMenuHandler.prototype.closeAll = function () {
|
||
this.items.forEach(function (item) {
|
||
var t = item.querySelector("[data-trigger]");
|
||
var c = item.querySelector("[data-content]");
|
||
if (t) t.setAttribute("data-state", "closed");
|
||
if (c) c.setAttribute("data-state", "closed");
|
||
});
|
||
};
|
||
|
||
NavigationMenuHandler.prototype.setup = function () {
|
||
var self = this;
|
||
this.items.forEach(function (item) {
|
||
var trigger = item.querySelector("[data-trigger]");
|
||
var content = item.querySelector("[data-content]");
|
||
if (trigger && content) {
|
||
trigger.addEventListener("click", function (e) {
|
||
e.preventDefault();
|
||
self.handleTriggerClick(trigger, content, item);
|
||
});
|
||
}
|
||
});
|
||
document.addEventListener("click", function (e) {
|
||
self.handleOutsideClick(e);
|
||
});
|
||
};
|
||
|
||
NavigationMenuHandler.prototype.handleTriggerClick = function (
|
||
trigger,
|
||
content,
|
||
item,
|
||
) {
|
||
if (this.activeItem === item) {
|
||
this.closeNavigation();
|
||
return;
|
||
}
|
||
this.closeAll();
|
||
trigger.setAttribute("data-state", "open");
|
||
content.setAttribute("data-state", "open");
|
||
this.activeItem = item;
|
||
if (this.viewport) {
|
||
this.viewport.innerHTML = content.innerHTML;
|
||
this.viewport.setAttribute("data-state", "open");
|
||
}
|
||
};
|
||
|
||
NavigationMenuHandler.prototype.closeViewport = function () {
|
||
var self = this;
|
||
if (!this.viewport) return;
|
||
this.viewport.setAttribute("data-state", "closing");
|
||
this.viewport.addEventListener(
|
||
"animationend",
|
||
function () {
|
||
if (
|
||
self.viewport &&
|
||
self.viewport.getAttribute("data-state") === "closing"
|
||
) {
|
||
self.viewport.setAttribute("data-state", "closed");
|
||
}
|
||
},
|
||
{ once: true },
|
||
);
|
||
};
|
||
|
||
NavigationMenuHandler.prototype.handleOutsideClick = function (e) {
|
||
if (!this.activeItem) return;
|
||
if (this.element.contains(e.target)) return;
|
||
this.closeNavigation();
|
||
};
|
||
|
||
NavigationMenuHandler.prototype.closeNavigation = function () {
|
||
this.closeAll();
|
||
this.closeViewport();
|
||
this.activeItem = null;
|
||
};
|
||
|
||
document
|
||
.querySelectorAll("nav[data-navigation]:not([data-initialized])")
|
||
.forEach(function (nav) {
|
||
new NavigationMenuHandler(nav);
|
||
nav.setAttribute("data-initialized", "true");
|
||
});
|
||
})();
|
||
</script> </div> </div> </header> <script type="module">const e=()=>{const t=document.getElementById("main-header");if(t){const d=t.offsetHeight;document.documentElement.style.setProperty("--header-height",`${d}px`)}};document.readyState==="loading"?document.addEventListener("DOMContentLoaded",e):e();window.addEventListener("load",e);window.addEventListener("resize",e);</script> <main class="flex-1"> <section class="bg-background pt-24 pb-8 lg:pt-32"> <div class="mx-auto w-full max-w-340 px-6"> <div class="flex items-start justify-between gap-16"> <div class="flex w-full flex-col gap-18 pt-0 pb-8 lg:max-w-160"> <div class="flex flex-col gap-8"> <div class="flex flex-col gap-8"> <div class="flex items-start justify-between"> <nav class="flex items-center gap-1"><a href="/resources/" class="font-sans text-xl leading-normal tracking-tight text-foreground-4 transition-colors hover:text-foreground font-bold"> Resources </a><svg viewBox="0 0 256 256" fill="currentColor" class="h-3 w-3 text-foreground-4"><path d="M181.66,133.66l-80,80a8,8,0,0,1-11.32-11.32L164.69,128,90.34,53.66a8,8,0,0,1,11.32-11.32l80,80A8,8,0,0,1,181.66,133.66Z" /></svg><a href="/blog/" class="font-sans text-xl leading-normal tracking-tight text-foreground-4 transition-colors hover:text-foreground"> Blog </a></nav> <time datetime="2023-08-18T10:07:21.000+05:30" class="font-sans text-xl leading-normal tracking-tight text-foreground-4"> Aug 18th, 2023 </time> </div> <div class="flex flex-col gap-8 lg:gap-no-trim-12"> <h1 class="font-heading text-4xl leading-[1.1] font-semibold tracking-tight text-foreground md:text-5xl lg:leading-trim lg:text-[64px]"> Understanding the Rasmussen model for failures </h1> <p class="font-sans text-base leading-normal tracking-tight text-foreground-4"> What does the Rasmussen model teach us about Site Reliability Engineering? </p> <div class="flex flex-wrap items-center gap-4"><div class="flex items-center gap-2"><img src="/_astro/nishant.f0mkGtg0_1D317r.webp" alt="Nishant Modak" loading="lazy" decoding="async" fetchpriority="auto" width="24" height="24" class="h-6 w-6 rounded-full object-cover"><span class="font-sans text-base leading-normal tracking-tight text-foreground-3"><a href="/blog/authors/nishant/" class="transition-colors hover:text-foreground"> Nishant Modak </a></span></div></div> </div> </div> <div class="flex items-center justify-center overflow-hidden rounded-[18px] w-full max-w-180 lg:-mx-6 lg:w-[calc(100%+48px)]"> <img src="/_astro/understanding-the-rasmussen-model-for-failures.C3nTqAEQ_VlxY5.webp" alt="Understanding the Rasmussen model for failures" loading="eager" decoding="async" fetchpriority="auto" width="720" height="432" class="h-full w-full object-cover"> </div> <div class="toc-mobile lg:hidden"> <div class="flex w-full flex-col rounded-2xl bg-background-dark p-6 lg:max-h-[calc(100dvh-128px)]"> <h4 class="sticky top-0 z-10 bg-background-dark pb-4 font-sans text-base leading-normal font-semibold tracking-wide text-foreground uppercase">
|
||
Contents
|
||
</h4> <div class="js-toc flex-1 overflow-y-auto font-sans text-base"></div> <div class="flex gap-2 sticky bottom-0 z-10 bg-background-dark pt-8"> <a href="https://discord.com/invite/Q3p2EEucx9/" target="_blank" rel="noopener noreferrer" class="flex h-9.5 items-center justify-center rounded bg-background-dark p-3 text-foreground transition-colors hover:bg-muted" aria-label="Discord"> <svg viewBox="0 0 256 256" fill="currentColor" class="h-6 w-6 fill-current"><path d="M104,140a12,12,0,1,1-12-12A12,12,0,0,1,104,140Zm60-12a12,12,0,1,0,12,12A12,12,0,0,0,164,128Zm74.45,64.9-67,29.71a16.17,16.17,0,0,1-21.71-9.1l-8.11-22q-6.72.45-13.63.46t-13.63-.46l-8.11,22a16.18,16.18,0,0,1-21.71,9.1l-67-29.71a15.93,15.93,0,0,1-9.06-18.51L38,58A16.07,16.07,0,0,1,51,46.14l36.06-5.93a16.22,16.22,0,0,1,18.26,11.88l3.26,12.84Q118.11,64,128,64t19.4.93l3.26-12.84a16.21,16.21,0,0,1,18.26-11.88L205,46.14A16.07,16.07,0,0,1,218,58l29.53,116.38A15.93,15.93,0,0,1,238.45,192.9ZM232,178.28,202.47,62s0,0-.08,0L166.33,56a.17.17,0,0,0-.17,0l-2.83,11.14c5,.94,10,2.06,14.83,3.42A8,8,0,0,1,176,86.31a8.09,8.09,0,0,1-2.16-.3A172.25,172.25,0,0,0,128,80a172.25,172.25,0,0,0-45.84,6,8,8,0,1,1-4.32-15.4c4.82-1.36,9.78-2.48,14.82-3.42L89.83,56s0,0-.12,0h0L53.61,61.93a.17.17,0,0,0-.09,0L24,178.33,91,208a.23.23,0,0,0,.22,0L98,189.72a173.2,173.2,0,0,1-20.14-4.32A8,8,0,0,1,82.16,170,171.85,171.85,0,0,0,128,176a171.85,171.85,0,0,0,45.84-6,8,8,0,0,1,4.32,15.41A173.2,173.2,0,0,1,158,189.72L164.75,208a.22.22,0,0,0,.21,0Z" /></svg> </a><a href="https://www.linkedin.com/company/last9/" target="_blank" rel="noopener noreferrer" class="flex h-9.5 items-center justify-center rounded bg-background-dark p-3 text-foreground transition-colors hover:bg-muted" aria-label="LinkedIn"> <svg viewBox="0 0 256 256" fill="currentColor" class="h-6 w-6 fill-current"><path d="M216,24H40A16,16,0,0,0,24,40V216a16,16,0,0,0,16,16H216a16,16,0,0,0,16-16V40A16,16,0,0,0,216,24Zm0,192H40V40H216V216ZM96,112v64a8,8,0,0,1-16,0V112a8,8,0,0,1,16,0Zm88,28v36a8,8,0,0,1-16,0V140a20,20,0,0,0-40,0v36a8,8,0,0,1-16,0V112a8,8,0,0,1,15.79-1.78A36,36,0,0,1,184,140ZM100,84A12,12,0,1,1,88,72,12,12,0,0,1,100,84Z" /></svg> </a><a href="https://youtube.com/@last9/" target="_blank" rel="noopener noreferrer" class="flex h-9.5 items-center justify-center rounded bg-background-dark p-3 text-foreground transition-colors hover:bg-muted" aria-label="YouTube"> <svg viewBox="0 0 256 256" fill="currentColor" class="h-6 w-6 fill-current"><path d="M164.44,121.34l-48-32A8,8,0,0,0,104,96v64a8,8,0,0,0,12.44,6.66l48-32a8,8,0,0,0,0-13.32ZM120,145.05V111l25.58,17ZM234.33,69.52a24,24,0,0,0-14.49-16.4C185.56,39.88,131,40,128,40s-57.56-.12-91.84,13.12a24,24,0,0,0-14.49,16.4C19.08,79.5,16,97.74,16,128s3.08,48.5,5.67,58.48a24,24,0,0,0,14.49,16.41C69,215.56,120.4,216,127.34,216h1.32c6.94,0,58.37-.44,91.18-13.11a24,24,0,0,0,14.49-16.41c2.59-10,5.67-28.22,5.67-58.48S236.92,79.5,234.33,69.52Zm-15.49,113a8,8,0,0,1-4.77,5.49c-31.65,12.22-85.48,12-86,12H128c-.54,0-54.33.2-86-12a8,8,0,0,1-4.77-5.49C34.8,173.39,32,156.57,32,128s2.8-45.39,5.16-54.47A8,8,0,0,1,41.93,68c30.52-11.79,81.66-12,85.85-12h.27c.54,0,54.38-.18,86,12a8,8,0,0,1,4.77,5.49C221.2,82.61,224,99.43,224,128S221.2,173.39,218.84,182.47Z" /></svg> </a><a href="https://x.com/last9io/" target="_blank" rel="noopener noreferrer" class="flex h-9.5 items-center justify-center rounded bg-background-dark p-3 text-foreground transition-colors hover:bg-muted" aria-label="X"> <svg viewBox="0 0 256 256" fill="currentColor" class="h-6 w-6 fill-current"><path d="M214.75,211.71l-62.6-98.38,61.77-67.95a8,8,0,0,0-11.84-10.76L143.24,99.34,102.75,35.71A8,8,0,0,0,96,32H48a8,8,0,0,0-6.75,12.3l62.6,98.37-61.77,68a8,8,0,1,0,11.84,10.76l58.84-64.72,40.49,63.63A8,8,0,0,0,160,224h48a8,8,0,0,0,6.75-12.29ZM164.39,208,62.57,48h29L193.43,208Z" /></svg> </a> </div> </div> <script type="module" src="/_astro/TableOfContent.astro_astro_type_script_index_0_lang.COF4Xpok.js"></script> </div> </div> <article class="prose-headings:font-heading prose max-w-none prose-zinc dark:prose-invert zoom-image-content js-toc-content **:break-words"> <p>There’s no such thing as a foolproof system. Systems, by design, operate at capacity. The nature of engineering is to eke out more from a system than what it delivers. By virtue of engineering pushing the acceptable boundaries of a system, failures occur. This is inevitable, and that’s also the joy and perils of engineering — discovering the acceptable limits of system resilience.</p>
|
||
<p>A framework to understand this beautiful dichotomy between a system and its human endeavor is the Rasmussen Model. The Rasmussen model is applied to many fields and is particularly noteworthy in cognitive psychology. But this model also presents a compelling analysis of how to think of Site Reliability Engineering.</p>
|
||
<h2 id="what-is-the-rasmussen-model">What is The Rasmussen Model</h2>
|
||
<p>The Rasmussen Model describes three boundaries to explore the dynamics of a safety system subject to pressures for performance improvement. The model is used to study how to build safety in critical power plants and also extrapolated to understand how an organization functions. Let’s take the example of an organization to understand this.</p>
|
||
<p>There are boundaries to performance in any organization. If those boundaries are pushed, everything collapses. But what are these boundaries?</p>
|
||
<p>There are three we can summarise:</p>
|
||
<ul>
|
||
<li>Cost</li>
|
||
<li>System Performance</li>
|
||
<li>Human Capacity</li>
|
||
</ul>
|
||
<p>These three form the organizational construct of acceptable limits. Let’s understand them:</p>
|
||
<p><strong>1. Cost</strong><br>
|
||
Every business needs money to run. Let’s put a boundary to it. If we exceed this boundary, the business is not viable anymore, and it doesn’t make sense to run it.</p>
|
||
<p><strong>2. System Performance</strong><br>
|
||
A system has defined limits. They have a finite ability to take work. If we exceed this capability, the system crashes and is unable to perform its set, defined duties.</p>
|
||
<p><strong>3. Human Capacity</strong><br>
|
||
Businesses need humans. Different humans come with varying degrees of performance. For example, some naturally exhibit high agency, while others are listeners and do work assigned to them. There are limits to the performance of each human — capabilities, agency, etc…</p>
|
||
<figure class="kg-card kg-image-card kg-card-hascaption"> <img src="/_astro/tv-3-1-1.BpVWz9in_1SJGwi.webp" alt="Boundaries in the Rasmussen model" loading="lazy" decoding="async" fetchpriority="auto" width="1280" height="600" class="kg-image"> <figcaption>Boundaries in the Rasmussen model</figcaption> </figure>
|
||
<p>At the center of these three is where the business exists. Let’s call it the ‘<strong>Operating point’</strong>. A business <em>operates</em> within these three boundaries, and pushing any particular boundary over the other would create an imbalance in the structure.</p>
|
||
<figure class="kg-card kg-image-card kg-card-hascaption"> <img src="/_astro/tv-4.BXjQqfun_Z1fXw5H.webp" alt="Operating point in Rasmussen model" loading="lazy" decoding="async" fetchpriority="auto" width="1280" height="600" class="kg-image"> <figcaption>Operating point in the Rasmussen model</figcaption> </figure>
|
||
<p>For example, money is always a constraint, and when those constraints are pushed inwards, it comes at the cost of pushing the ‘System Performance’boundary outwards. This tends to stress the ‘Human Capacity’ boundary. Every organization has to make implicit trade-offs and important calls to map out their acceptable boundaries.</p>
|
||
<figure class="kg-card kg-image-card kg-card-hascaption"> <img src="/_astro/tv-5-1.CnZBrVgY_26Xuob.webp" alt="Operating point shifting in the Rasmussen model" loading="lazy" decoding="async" fetchpriority="auto" width="1280" height="600" class="kg-image"> <figcaption>Operating point shifting in the Rasmussen model</figcaption> </figure>
|
||
<p>Let’s understand this with an example from the ‘<strong>Human Capacity</strong>’ angle:</p>
|
||
<figure class="kg-card kg-image-card kg-card-hascaption"> <img src="/_astro/human-capacity.CijoSpxh_xi7Tg.webp" alt="Operating point shifting in the Rasmussen model" loading="lazy" decoding="async" fetchpriority="auto" width="1280" height="600" class="kg-image"> <figcaption>Operating point shifting in the Rasmussen model</figcaption> </figure>
|
||
<p>Humans operate in the exact opposite spectrum of how a business would. <em>We want to get the most performance with the least capacity.</em> So, the boundary of ‘Human Capacity’ is to always instinctively move inwards. This is why we tend to <em>automate</em> things and <em>maybe take shortcuts</em>. This is instinctive. We want to get more with the least effort - so we can do more.</p>
|
||
<div class="kg-card kg-callout-card kg-callout-card-red"> <div class="kg-callout-emoji">💡</div> <div class="kg-callout-text"><p>Don Norman’s ‘automation paradox’ explains this phenomenon really well. Its roots lie in studying autopilot features in planes. The more planes became automated. The pilots started slacking off. While automation was supposed to enable pilots, it had the opposite effect. The result: Planes had to be automated even more to compensate for the failures of pilots.</p></div> </div>
|
||
<p>But, this endeavor forces us to make mistakes. It stresses the boundaries of <strong>‘System Performance’.</strong> In our pursuit to be efficient, mistakes are a given. Without mistakes, we simply can’t move forward. It’s the very nature of innovation, riddled with mistakes, experiments, and work that may not necessarily be successful. But this teaches us and puts us on a path to success.</p>
|
||
<p>Here’s another example of this. When an <em>incident</em> happens (a system breaks), the <strong>operating point</strong> has crossed a boundary. Let’s say latencies have risen in your application.</p>
|
||
<figure class="kg-card kg-image-card kg-card-hascaption"> <img src="/_astro/tv-8.Df8C1hKC_Z21s6wf.webp" alt="Point of Failure" loading="lazy" decoding="async" fetchpriority="auto" width="1280" height="600" class="kg-image"> <figcaption>Point of Failure</figcaption> </figure>
|
||
<p>To recover, we:</p>
|
||
<ol>
|
||
<li>Add more EC2 instances = increase <strong>System Performance,</strong> or</li>
|
||
<li>Add more people = increase <strong>Human Capacity</strong></li>
|
||
<li>This results in the <strong>Cost</strong> going beyond an acceptable limit.</li>
|
||
</ol>
|
||
<p>See how each boundary is dependent and intertwined?</p>
|
||
<h2 id="normalisation-of-deviance">Normalisation of Deviance</h2>
|
||
<p>Every organization has an acceptable boundary limit.</p>
|
||
<p>The only way to understand the acceptable boundary limits of performance failure is to push its boundaries. To know something matters, you first have to measure it 😉. Simply put, organizations tend to make grave mistakes that teach us what an acceptable boundary is.</p>
|
||
<p>In the image below, it’s termed ‘Normalization of Deviance’. 👇</p>
|
||
<figure class="kg-card kg-image-card kg-card-hascaption"> <img src="/_astro/noramilisation.Dl9qUIDf_Z1V9RK2.webp" alt="Optimal System Performance" loading="lazy" decoding="async" fetchpriority="auto" width="1280" height="600" class="kg-image"> <figcaption>Optimal System Performance</figcaption> </figure>
|
||
<p>The ‘<strong>Error Limit</strong>’ is the margin of difference between the ‘<strong>Human Capacity</strong>’ boundary and the ‘<strong>Normalisation of Deviance</strong>’. This is where management plays an important part — pushing the Normalisation of Deviance from time to time but not breaking the Human Capacity. The better the management manages this boundary, the stronger it is in getting the best from its people without breaking them, saving costs, and reducing mistakes.</p>
|
||
<figure class="kg-card kg-image-card kg-card-hascaption"> <img src="/_astro/111.DrY5f32k_ZcwLyj.webp" alt="Error Limits for the Rasmussen model" loading="lazy" decoding="async" fetchpriority="auto" width="1280" height="600" class="kg-image"> <figcaption>Error Limits for the Rasmussen model</figcaption> </figure>
|
||
<h2 id="what-does-this-mean-for-site-reliability-engineering">What does this mean for Site Reliability Engineering?</h2>
|
||
<p>There’s an untold saying in the Observability world.</p>
|
||
<blockquote>
|
||
<p>Bait em first, then bill em for ignorance</p>
|
||
</blockquote>
|
||
<div class="kg-card kg-callout-card kg-callout-card-blue"> <div class="kg-callout-emoji">💡</div> <div class="kg-callout-text"><p>There’s perhaps no other industry that rewards ignorance monetarily as much as o11y. The only other thing I can think of is a car mechanic. But that’s a story for another day 😛</p></div> </div>
|
||
<p>Let’s take the Rasmussen model to understand its relevance in SRE.</p>
|
||
<p>Observability is about costs. Things have gotten so out of hand that it’s imperative to control costs. Every organization I’ve spoken to first wants to solve spiraling costs. Building ‘Reliability’ mandates with strong control levers comes next. That’s the hard truth of the status quo. But why?</p>
|
||
<p>Well-funded organizations have resorted to throwing money at the o11y problem, from hiring more, to building more microservices to spinning up unwanted servers. But systems don’t work like that. You can’t simply throw money at the problem and make it disappear. Just like more engineers, ≠ better code, more money ≠ better Reliability. But, by doing so, problems compound.</p>
|
||
<p>Companies have now recklessly taken the microservices route and have more observable entities. More observable entities mean more people to monitor these services. This creates an unending loop of toil to manage your Time Series Database (TSDB) and all the visualization and alerting that comes with it.</p>
|
||
<p>As an SRE, you’re now tasked with controlling costs, reducing toil, and getting optimal system performance. Getting the best from the system has constraints around spending money and human capacity. One cannot ignore the limitations of both these fungible components.</p>
|
||
<h2 id="ok-what-does-this-mean"><strong>Ok, what does this mean?</strong></h2>
|
||
<p>The CTO of an engineering organization needs to define what the <strong>Normalisation of Deviance</strong> line is. This comes with accepting failures and understanding budgets and the error rates under which one can operate.</p>
|
||
<p>Another way to look at this is to hard constraint some key metrics to analyze the performance of your SRE team:</p>
|
||
<ol>
|
||
<li>What have been the cost reductions YoY, or QoQ</li>
|
||
<li>What’s the Mean Time To Recovery (MTTR) YoY, or QoQ</li>
|
||
<li>What has been the Mean Time To Detect an issue, and what is the human involvement around this?</li>
|
||
<li>The cost of engineering overheads (money on salaries, office space, support staff et, al.) and the toil from the team to manage an entire o11y tool - from storage, compute, visualization, alerting et, al.</li>
|
||
</ol>
|
||
<p>These 4 points teach us the <strong>Total Cost of Ownership</strong> around Observability. This needs to be tracked in cost terms and monitored. If an organization is not improving this, you’re abetting the worsening of a cost center.</p>
|
||
<p>The Rasmussen model buckets this entire thinking by giving leaders a framework to bring in more accountability in an organization.</p>
|
||
<p>P.S. These 4 points are not exhaustive but a mere indication of how to practically apply this theory. The fundamentals are the same; its practical implications can be implemented based on how a leader aims to cut costs. And I think the current <a href="https://last9.io/blog/the-neglected-tech-arctic-winter-internal-saas-expenses/">tech arctic winter</a> will force more organizations to rethink their infrastructure costs.</p>
|
||
<hr>
|
||
<p>I’d love some opinions and thoughts on this post. For folks who have a contrarian take, my DMs are open on Twitter - <a href="https://twitter.com/nishantmodak">@nishantmodak</a> ✌️</p> </article> <div id="zoom-image" class="hidden" aria-hidden="true" data-zoom-image-content-class="zoom-image-content"></div> <script type="module" src="/_astro/ZoomImage.astro_astro_type_script_index_0_lang.Drw90Ma7.js"></script> <div class="h-px w-full bg-card"></div> <div class="flex flex-col gap-12 rounded-3xl"> <div class="flex flex-col gap-4"><div class="flex items-center gap-2"><svg viewBox="0 0 256 256" fill="currentColor" class="h-6 w-6 text-foreground"><path d="M184,32H72A16,16,0,0,0,56,48V224a8,8,0,0,0,12.24,6.78L128,193.43l59.77,37.35A8,8,0,0,0,200,224V48A16,16,0,0,0,184,32Zm0,177.57-51.77-32.35a8,8,0,0,0-8.48,0L72,209.57V48H184Z" /></svg><span class="font-sans text-base leading-normal font-semibold tracking-wide text-foreground uppercase">
|
||
Topics
|
||
</span></div><div class="flex flex-wrap gap-2"><a href="/blog/tag/deep-dives/" class="rounded bg-background-dark px-2 py-1.5 font-mono text-base leading-normal tracking-tight text-foreground-dark transition-colors hover:bg-muted"> Deep Dives </a><a href="/blog/tag/observability/" class="rounded bg-background-dark px-2 py-1.5 font-mono text-base leading-normal tracking-tight text-foreground-dark transition-colors hover:bg-muted"> Observability </a><a href="/blog/tag/monitoring/" class="rounded bg-background-dark px-2 py-1.5 font-mono text-base leading-normal tracking-tight text-foreground-dark transition-colors hover:bg-muted"> Monitoring </a><a href="/blog/tag/last9-engineering/" class="rounded bg-background-dark px-2 py-1.5 font-mono text-base leading-normal tracking-tight text-foreground-dark transition-colors hover:bg-muted"> Last 9 Engineering </a></div></div> <div class="flex flex-col gap-4"><div class="flex items-center gap-2"><svg viewBox="0 0 256 256" fill="currentColor" class="h-6 w-6 text-foreground"><path d="M128,24A104,104,0,1,0,232,128,104.11,104.11,0,0,0,128,24ZM74.08,197.5a64,64,0,0,1,107.84,0,87.83,87.83,0,0,1-107.84,0ZM96,120a32,32,0,1,1,32,32A32,32,0,0,1,96,120Zm97.76,66.41a79.66,79.66,0,0,0-36.06-28.75,48,48,0,1,0-59.4,0,79.66,79.66,0,0,0-36.06,28.75,88,88,0,1,1,131.52,0Z" /></svg><span class="font-sans text-base leading-normal font-semibold tracking-wide text-foreground uppercase">
|
||
About the authors
|
||
</span></div><div class="flex flex-col gap-6"><div class="flex w-full items-start gap-4"><img src="/_astro/nishant.f0mkGtg0_ZT0rRF.webp" alt="Nishant Modak" loading="lazy" decoding="async" fetchpriority="auto" width="54" height="54" class="size-13.5 shrink-0 rounded-full object-cover"><div class="flex flex-1 flex-col"><p class="font-sans text-xl leading-normal font-bold tracking-tight text-foreground"><a href="/blog/authors/nishant/" class="transition-colors hover:text-foreground-4"> Nishant Modak </a></p><p class="font-sans text-base leading-normal tracking-tight text-foreground-4">Founder at Last9.
|
||
|
||
Loves building dev tools and listening to The Beatles.</p></div></div></div></div> </div> </div> <div class="toc-desktop sticky top-24 hidden pt-0 lg:block"> <div class="flex flex-col rounded-2xl bg-background-dark p-6 lg:max-h-[calc(100dvh-128px)] w-115"> <h4 class="sticky top-0 z-10 bg-background-dark pb-4 font-sans text-base leading-normal font-semibold tracking-wide text-foreground uppercase">
|
||
Contents
|
||
</h4> <div class="js-toc flex-1 overflow-y-auto font-sans text-base"></div> <div class="flex gap-2 sticky bottom-0 z-10 bg-background-dark pt-8"> <a href="https://discord.com/invite/Q3p2EEucx9/" target="_blank" rel="noopener noreferrer" class="flex h-9.5 items-center justify-center rounded bg-background-dark p-3 text-foreground transition-colors hover:bg-muted" aria-label="Discord"> <svg viewBox="0 0 256 256" fill="currentColor" class="h-6 w-6 fill-current"><path d="M104,140a12,12,0,1,1-12-12A12,12,0,0,1,104,140Zm60-12a12,12,0,1,0,12,12A12,12,0,0,0,164,128Zm74.45,64.9-67,29.71a16.17,16.17,0,0,1-21.71-9.1l-8.11-22q-6.72.45-13.63.46t-13.63-.46l-8.11,22a16.18,16.18,0,0,1-21.71,9.1l-67-29.71a15.93,15.93,0,0,1-9.06-18.51L38,58A16.07,16.07,0,0,1,51,46.14l36.06-5.93a16.22,16.22,0,0,1,18.26,11.88l3.26,12.84Q118.11,64,128,64t19.4.93l3.26-12.84a16.21,16.21,0,0,1,18.26-11.88L205,46.14A16.07,16.07,0,0,1,218,58l29.53,116.38A15.93,15.93,0,0,1,238.45,192.9ZM232,178.28,202.47,62s0,0-.08,0L166.33,56a.17.17,0,0,0-.17,0l-2.83,11.14c5,.94,10,2.06,14.83,3.42A8,8,0,0,1,176,86.31a8.09,8.09,0,0,1-2.16-.3A172.25,172.25,0,0,0,128,80a172.25,172.25,0,0,0-45.84,6,8,8,0,1,1-4.32-15.4c4.82-1.36,9.78-2.48,14.82-3.42L89.83,56s0,0-.12,0h0L53.61,61.93a.17.17,0,0,0-.09,0L24,178.33,91,208a.23.23,0,0,0,.22,0L98,189.72a173.2,173.2,0,0,1-20.14-4.32A8,8,0,0,1,82.16,170,171.85,171.85,0,0,0,128,176a171.85,171.85,0,0,0,45.84-6,8,8,0,0,1,4.32,15.41A173.2,173.2,0,0,1,158,189.72L164.75,208a.22.22,0,0,0,.21,0Z" /></svg> </a><a href="https://www.linkedin.com/company/last9/" target="_blank" rel="noopener noreferrer" class="flex h-9.5 items-center justify-center rounded bg-background-dark p-3 text-foreground transition-colors hover:bg-muted" aria-label="LinkedIn"> <svg viewBox="0 0 256 256" fill="currentColor" class="h-6 w-6 fill-current"><path d="M216,24H40A16,16,0,0,0,24,40V216a16,16,0,0,0,16,16H216a16,16,0,0,0,16-16V40A16,16,0,0,0,216,24Zm0,192H40V40H216V216ZM96,112v64a8,8,0,0,1-16,0V112a8,8,0,0,1,16,0Zm88,28v36a8,8,0,0,1-16,0V140a20,20,0,0,0-40,0v36a8,8,0,0,1-16,0V112a8,8,0,0,1,15.79-1.78A36,36,0,0,1,184,140ZM100,84A12,12,0,1,1,88,72,12,12,0,0,1,100,84Z" /></svg> </a><a href="https://youtube.com/@last9/" target="_blank" rel="noopener noreferrer" class="flex h-9.5 items-center justify-center rounded bg-background-dark p-3 text-foreground transition-colors hover:bg-muted" aria-label="YouTube"> <svg viewBox="0 0 256 256" fill="currentColor" class="h-6 w-6 fill-current"><path d="M164.44,121.34l-48-32A8,8,0,0,0,104,96v64a8,8,0,0,0,12.44,6.66l48-32a8,8,0,0,0,0-13.32ZM120,145.05V111l25.58,17ZM234.33,69.52a24,24,0,0,0-14.49-16.4C185.56,39.88,131,40,128,40s-57.56-.12-91.84,13.12a24,24,0,0,0-14.49,16.4C19.08,79.5,16,97.74,16,128s3.08,48.5,5.67,58.48a24,24,0,0,0,14.49,16.41C69,215.56,120.4,216,127.34,216h1.32c6.94,0,58.37-.44,91.18-13.11a24,24,0,0,0,14.49-16.41c2.59-10,5.67-28.22,5.67-58.48S236.92,79.5,234.33,69.52Zm-15.49,113a8,8,0,0,1-4.77,5.49c-31.65,12.22-85.48,12-86,12H128c-.54,0-54.33.2-86-12a8,8,0,0,1-4.77-5.49C34.8,173.39,32,156.57,32,128s2.8-45.39,5.16-54.47A8,8,0,0,1,41.93,68c30.52-11.79,81.66-12,85.85-12h.27c.54,0,54.38-.18,86,12a8,8,0,0,1,4.77,5.49C221.2,82.61,224,99.43,224,128S221.2,173.39,218.84,182.47Z" /></svg> </a><a href="https://x.com/last9io/" target="_blank" rel="noopener noreferrer" class="flex h-9.5 items-center justify-center rounded bg-background-dark p-3 text-foreground transition-colors hover:bg-muted" aria-label="X"> <svg viewBox="0 0 256 256" fill="currentColor" class="h-6 w-6 fill-current"><path d="M214.75,211.71l-62.6-98.38,61.77-67.95a8,8,0,0,0-11.84-10.76L143.24,99.34,102.75,35.71A8,8,0,0,0,96,32H48a8,8,0,0,0-6.75,12.3l62.6,98.37-61.77,68a8,8,0,1,0,11.84,10.76l58.84-64.72,40.49,63.63A8,8,0,0,0,160,224h48a8,8,0,0,0,6.75-12.29ZM164.39,208,62.57,48h29L193.43,208Z" /></svg> </a> </div> </div> </div> </div> </div> </section> <section class="py-16 lg:py-45 bg-background" aria-labelledby="prefooter-heading"> <div class="mx-auto w-full max-w-340 px-6"> <div class="flex flex-col gap-16"> <div class="flex flex-col gap-12 lg:gap-16"> <div class="flex flex-col gap-8 lg:flex-row-reverse lg:items-center lg:justify-between lg:gap-24"> <div class="aspect-[372/260] lg:h-66"> <img src="/_astro/buttons.SzdkIwcl_Z2c2K1E.webp" alt="Last9 logo and enter key" loading="lazy" decoding="async" fetchpriority="auto" width="1495" height="1050" class="h-full w-full"> </div> <div class="flex flex-col gap-6 lg:gap-12 lg:gap-no-trim-16"> <h2 id="prefooter-heading" class="font-heading text-4xl font-semibold tracking-tight text-foreground md:text-5xl md:leading-[110%] lg:leading-trim lg:text-[88px] lg:leading-none">
|
||
Start observing for free. No lock-in.
|
||
</h2> <div class="flex gap-2"> <a href="/schedule-demo/" class="flex items-center justify-center gap-1 w-fit cursor-pointer rounded p-4 md:p-3 text-lg font-medium tracking-tight md:text-xl transition-colors duration-200 ease-in-out bg-primary text-primary-foreground hover:bg-primary-hover hover:text-primary-foreground-hover"> <span class="leading-trim">
|
||
Book demo
|
||
</span> </a> </div> </div> </div> <div class="grid grid-cols-1 gap-12 lg:grid-cols-3 lg:gap-24"> <div class="flex flex-col gap-2"> <h3 class="contents"> <a href="/docs/integrations/" class="group flex items-center gap-2 text-sm font-semibold tracking-wide text-foreground uppercase hover:text-foreground-3 lg:text-base"> OpenTelemetry · Prometheus<svg viewBox="0 0 256 256" fill="currentColor" aria-hidden="true" class="h-5 w-5 transition-transform duration-200 ease-in-out group-hover:translate-x-0.5 group-hover:-translate-y-0.5"><path d="M200,64V168a8,8,0,0,1-16,0V83.31L69.66,197.66a8,8,0,0,1-11.32-11.32L172.69,72H88a8,8,0,0,1,0-16H192A8,8,0,0,1,200,64Z" /></svg> </a> </h3> <p class="text-lg tracking-tight text-foreground lg:text-xl"> Just update your config. Start seeing data on Last9 in seconds. </p> </div><div class="flex flex-col gap-2"> <h3 class="contents"> <a href="/docs/integrations/" class="group flex items-center gap-2 text-sm font-semibold tracking-wide text-foreground uppercase hover:text-foreground-3 lg:text-base"> Datadog · New Relic · Others<svg viewBox="0 0 256 256" fill="currentColor" aria-hidden="true" class="h-5 w-5 transition-transform duration-200 ease-in-out group-hover:translate-x-0.5 group-hover:-translate-y-0.5"><path d="M200,64V168a8,8,0,0,1-16,0V83.31L69.66,197.66a8,8,0,0,1-11.32-11.32L172.69,72H88a8,8,0,0,1,0-16H192A8,8,0,0,1,200,64Z" /></svg> </a> </h3> <p class="text-lg tracking-tight text-foreground lg:text-xl"> We've got you covered. Bring over your dashboards & alerts in one click. </p> </div><div class="flex flex-col gap-2"> <h3 class="contents"> <a href="/docs/integrations/" class="group flex items-center gap-2 text-sm font-semibold tracking-wide text-foreground uppercase hover:text-foreground-3 lg:text-base"> Built on Open Standards<svg viewBox="0 0 256 256" fill="currentColor" aria-hidden="true" class="h-5 w-5 transition-transform duration-200 ease-in-out group-hover:translate-x-0.5 group-hover:-translate-y-0.5"><path d="M200,64V168a8,8,0,0,1-16,0V83.31L69.66,197.66a8,8,0,0,1-11.32-11.32L172.69,72H88a8,8,0,0,1,0-16H192A8,8,0,0,1,200,64Z" /></svg> </a> </h3> <p class="text-lg tracking-tight text-foreground lg:text-xl"> 100+ integrations. OTel native, works with your existing stack. </p> </div> </div> </div> <div class="grid grid-cols-1 gap-6 lg:grid-cols-3 lg:gap-24"> <div class="flex flex-col items-start gap-2 text-lg tracking-tight lg:text-xl"> <div class="flex items-center gap-2" role="img" aria-label="G2 rating: 4.8/5 stars"> <svg width="33" height="33" viewBox="0 0 33 33" fill="none" class="h-8 w-8" aria-hidden="true">
|
||
<path d="M0 16.128C0 25.0352 7.22075 32.256 16.128 32.256C25.0352 32.256 32.256 25.0352 32.256 16.128C32.256 7.22075 25.0352 0 16.128 0C7.22075 0 0 7.22075 0 16.128Z" fill="#FF492C" />
|
||
<path d="M22.9248 12.2556H20.192C20.2656 11.8268 20.5312 11.5868 21.0688 11.3148L21.5712 11.0588C22.4704 10.598 22.9504 10.0764 22.9504 9.2252C22.9504 8.6908 22.7424 8.2684 22.3296 7.9644C21.9168 7.6604 21.4304 7.51 20.8608 7.51C20.4192 7.5036 19.9872 7.6284 19.616 7.8652C19.2416 8.0956 18.9632 8.3932 18.7904 8.7644L19.5808 9.558C19.888 8.9372 20.3328 8.6332 20.9184 8.6332C21.4144 8.6332 21.7184 8.8892 21.7184 9.2444C21.7184 9.542 21.5712 9.7884 21.0016 10.0764L20.6784 10.2332C19.9776 10.5884 19.4912 10.9948 19.2096 11.4556C18.928 11.9164 18.7904 12.4956 18.7904 13.1964V13.3884H22.9248V12.2556Z" fill="white" />
|
||
<path d="M16.1632 21.2254C13.2832 21.2254 10.9376 18.8798 10.9376 15.9998C10.9376 13.1198 13.2832 10.7742 16.1632 10.7742L17.952 7.03342C17.3632 6.91502 16.7648 6.85742 16.1632 6.85742C11.1136 6.85742 7.0208 10.9502 7.0208 15.9998C7.0208 21.0494 11.1136 25.1422 16.1632 25.1422C18.0992 25.1454 19.984 24.531 21.5456 23.3886L19.568 19.9582C18.6208 20.7742 17.4144 21.2254 16.1632 21.2254Z" fill="white" />
|
||
<path d="M22.56 14.6943H18.0352L15.7728 18.6111H20.2976L22.56 22.5311L24.8224 18.6111L22.56 14.6943Z" fill="white" />
|
||
</svg> <span class="font-bold text-foreground" aria-hidden="true">4.8/5</span> <div class="flex items-center justify-center gap-1" aria-hidden="true"> <svg viewBox="0 0 256 256" fill="currentColor" class="h-4 w-4 fill-foreground"><path d="M234.29,114.85l-45,38.83L203,211.75a16.4,16.4,0,0,1-24.5,17.82L128,198.49,77.47,229.57A16.4,16.4,0,0,1,53,211.75l13.76-58.07-45-38.83A16.46,16.46,0,0,1,31.08,86l59-4.76,22.76-55.08a16.36,16.36,0,0,1,30.27,0l22.75,55.08,59,4.76a16.46,16.46,0,0,1,9.37,28.86Z" /></svg><svg viewBox="0 0 256 256" fill="currentColor" class="h-4 w-4 fill-foreground"><path d="M234.29,114.85l-45,38.83L203,211.75a16.4,16.4,0,0,1-24.5,17.82L128,198.49,77.47,229.57A16.4,16.4,0,0,1,53,211.75l13.76-58.07-45-38.83A16.46,16.46,0,0,1,31.08,86l59-4.76,22.76-55.08a16.36,16.36,0,0,1,30.27,0l22.75,55.08,59,4.76a16.46,16.46,0,0,1,9.37,28.86Z" /></svg><svg viewBox="0 0 256 256" fill="currentColor" class="h-4 w-4 fill-foreground"><path d="M234.29,114.85l-45,38.83L203,211.75a16.4,16.4,0,0,1-24.5,17.82L128,198.49,77.47,229.57A16.4,16.4,0,0,1,53,211.75l13.76-58.07-45-38.83A16.46,16.46,0,0,1,31.08,86l59-4.76,22.76-55.08a16.36,16.36,0,0,1,30.27,0l22.75,55.08,59,4.76a16.46,16.46,0,0,1,9.37,28.86Z" /></svg><svg viewBox="0 0 256 256" fill="currentColor" class="h-4 w-4 fill-foreground"><path d="M234.29,114.85l-45,38.83L203,211.75a16.4,16.4,0,0,1-24.5,17.82L128,198.49,77.47,229.57A16.4,16.4,0,0,1,53,211.75l13.76-58.07-45-38.83A16.46,16.46,0,0,1,31.08,86l59-4.76,22.76-55.08a16.36,16.36,0,0,1,30.27,0l22.75,55.08,59,4.76a16.46,16.46,0,0,1,9.37,28.86Z" /></svg><svg viewBox="0 0 256 256" fill="currentColor" class="h-4 w-4 fill-foreground"><path d="M234.29,114.85l-45,38.83L203,211.75a16.4,16.4,0,0,1-24.5,17.82L128,198.49,77.47,229.57A16.4,16.4,0,0,1,53,211.75l13.76-58.07-45-38.83A16.46,16.46,0,0,1,31.08,86l59-4.76,22.76-55.08a16.36,16.36,0,0,1,30.27,0l22.75,55.08,59,4.76a16.46,16.46,0,0,1,9.37,28.86Z" /></svg> </div> </div> <a href="https://www.g2.com/products/last9-last9/reviews" target="_blank" rel="noopener noreferrer" class="cursor-pointer font-normal text-foreground underline transition-colors duration-200 ease-in-out hover:text-foreground-3">
|
||
G2 Reviews
|
||
</a> </div> <div class="flex items-center justify-start gap-6 lg:gap-12 lg:col-start-3" role="group" aria-label="Industry awards and recognition"> <div> <img src="/_astro/gartner-cool-vendor-badge.ClTJIiRB_Z2qBIL4.webp" alt="Gartner Cool Vendor in AI for SRE and Observability, 2025" loading="lazy" decoding="async" fetchpriority="auto" width="254" height="241" class="h-16 w-auto"> </div><div> <img src="/_astro/high-performer-badge.BCroQ4N5_29P6JQ.svg" alt="G2 High Performer — Fall 2025" loading="lazy" decoding="async" fetchpriority="auto" width="88" height="101" class="h-16 w-auto"> </div><div> <img src="/_astro/best-usability-badge.mZNSvnQA_29P6JQ.svg" alt="G2 Best Usability — Fall 2025" loading="lazy" decoding="async" fetchpriority="auto" width="88" height="101" class="h-16 w-auto"> </div><div> <img src="/_astro/highest-user-adoption-badge.DlXpV0dv_29P6JQ.svg" alt="G2 Highest User Adoption — Fall 2025" loading="lazy" decoding="async" fetchpriority="auto" width="88" height="101" class="h-16 w-auto"> </div> </div> </div> </div> </div> </section> </main> <footer class="relative isolate w-full overflow-hidden bg-background py-16 lg:pb-32"> <div class="absolute top-[50%] left-[50%] -z-20 hidden h-225 w-350 -translate-x-1/2 -translate-y-1/2 md:block"> <div class="h-225 w-350" id="us-footer-animation"></div> </div> <div class="pointer-events-none absolute top-0 bottom-0 left-[50%] -z-10 hidden w-350 -translate-x-1/2 md:block" style="background: linear-gradient(-90deg, #18181B 0%, rgba(24, 24, 27, 0) 4.8%), linear-gradient(90deg, #18181B 0%, rgba(24, 24, 27, 0) 5.6%), linear-gradient(180deg, #18181B 0%, rgba(24, 24, 27, 0) 45.19%);"></div> <div class="mx-auto w-full max-w-340 px-6 relative z-10 grid grid-cols-2 gap-12 lg:flex lg:justify-between"> <div class="flex flex-col gap-4.5 lg:justify-between text-lg tracking-tight text-nowrap text-foreground lg:text-base col-span-2"> <div class="flex flex-col gap-2 lg:gap-3"> <svg width="41" height="40" fill="none" viewBox="0 0 41 40" class="h-10 w-10" aria-label="Last9" role="img"><path fill="#fff" d="M20 0a20 20 0 1 0 20 20A20 20 0 0 0 20 0m2 35 5-7.7a16 16 0 0 0 3.4-8.7c0-5.6-4.2-9.7-10.4-9.7-5.7 0-10.2 4-10.2 9.6 0 5.4 3.8 9.1 8.7 9.1q2.1 0 3-.8l-5.2 7.9a15.2 15.2 0 1 1 5.7.3m-2-11.5c-3 0-5-2.2-5-5a5 5 0 0 1 5-5.2c3 0 5.2 2 5.2 5.1S23 23.5 20 23.5" /></svg> <p>Observability for AI Native Teams</p> </div> <div class="flex flex-col gap-3 lg:gap-4"> <div class="flex gap-4" role="group" aria-label="Last9 on social media"> <a href="https://discord.com/invite/Q3p2EEucx9/" target="_blank" aria-label="Last9 on Discord" class="text-foreground transition-colors duration-200 ease-in-out hover:text-foreground-3"> <svg viewBox="0 0 256 256" fill="currentColor" class="h-6 w-6 fill-current" aria-hidden="true"><path d="M104,140a12,12,0,1,1-12-12A12,12,0,0,1,104,140Zm60-12a12,12,0,1,0,12,12A12,12,0,0,0,164,128Zm74.45,64.9-67,29.71a16.17,16.17,0,0,1-21.71-9.1l-8.11-22q-6.72.45-13.63.46t-13.63-.46l-8.11,22a16.18,16.18,0,0,1-21.71,9.1l-67-29.71a15.93,15.93,0,0,1-9.06-18.51L38,58A16.07,16.07,0,0,1,51,46.14l36.06-5.93a16.22,16.22,0,0,1,18.26,11.88l3.26,12.84Q118.11,64,128,64t19.4.93l3.26-12.84a16.21,16.21,0,0,1,18.26-11.88L205,46.14A16.07,16.07,0,0,1,218,58l29.53,116.38A15.93,15.93,0,0,1,238.45,192.9ZM232,178.28,202.47,62s0,0-.08,0L166.33,56a.17.17,0,0,0-.17,0l-2.83,11.14c5,.94,10,2.06,14.83,3.42A8,8,0,0,1,176,86.31a8.09,8.09,0,0,1-2.16-.3A172.25,172.25,0,0,0,128,80a172.25,172.25,0,0,0-45.84,6,8,8,0,1,1-4.32-15.4c4.82-1.36,9.78-2.48,14.82-3.42L89.83,56s0,0-.12,0h0L53.61,61.93a.17.17,0,0,0-.09,0L24,178.33,91,208a.23.23,0,0,0,.22,0L98,189.72a173.2,173.2,0,0,1-20.14-4.32A8,8,0,0,1,82.16,170,171.85,171.85,0,0,0,128,176a171.85,171.85,0,0,0,45.84-6,8,8,0,0,1,4.32,15.41A173.2,173.2,0,0,1,158,189.72L164.75,208a.22.22,0,0,0,.21,0Z" /></svg> </a><a href="https://www.linkedin.com/company/last9/" target="_blank" aria-label="Last9 on LinkedIn" class="text-foreground transition-colors duration-200 ease-in-out hover:text-foreground-3"> <svg viewBox="0 0 256 256" fill="currentColor" class="h-6 w-6 fill-current" aria-hidden="true"><path d="M216,24H40A16,16,0,0,0,24,40V216a16,16,0,0,0,16,16H216a16,16,0,0,0,16-16V40A16,16,0,0,0,216,24Zm0,192H40V40H216V216ZM96,112v64a8,8,0,0,1-16,0V112a8,8,0,0,1,16,0Zm88,28v36a8,8,0,0,1-16,0V140a20,20,0,0,0-40,0v36a8,8,0,0,1-16,0V112a8,8,0,0,1,15.79-1.78A36,36,0,0,1,184,140ZM100,84A12,12,0,1,1,88,72,12,12,0,0,1,100,84Z" /></svg> </a><a href="https://x.com/last9io/" target="_blank" aria-label="Last9 on X (Twitter)" class="text-foreground transition-colors duration-200 ease-in-out hover:text-foreground-3"> <svg viewBox="0 0 256 256" fill="currentColor" class="h-6 w-6 fill-current" aria-hidden="true"><path d="M214.75,211.71l-62.6-98.38,61.77-67.95a8,8,0,0,0-11.84-10.76L143.24,99.34,102.75,35.71A8,8,0,0,0,96,32H48a8,8,0,0,0-6.75,12.3l62.6,98.37-61.77,68a8,8,0,1,0,11.84,10.76l58.84-64.72,40.49,63.63A8,8,0,0,0,160,224h48a8,8,0,0,0,6.75-12.29ZM164.39,208,62.57,48h29L193.43,208Z" /></svg> </a><a href="https://youtube.com/@last9/" target="_blank" aria-label="Last9 on YouTube" class="text-foreground transition-colors duration-200 ease-in-out hover:text-foreground-3"> <svg viewBox="0 0 256 256" fill="currentColor" class="h-6 w-6 fill-current" aria-hidden="true"><path d="M164.44,121.34l-48-32A8,8,0,0,0,104,96v64a8,8,0,0,0,12.44,6.66l48-32a8,8,0,0,0,0-13.32ZM120,145.05V111l25.58,17ZM234.33,69.52a24,24,0,0,0-14.49-16.4C185.56,39.88,131,40,128,40s-57.56-.12-91.84,13.12a24,24,0,0,0-14.49,16.4C19.08,79.5,16,97.74,16,128s3.08,48.5,5.67,58.48a24,24,0,0,0,14.49,16.41C69,215.56,120.4,216,127.34,216h1.32c6.94,0,58.37-.44,91.18-13.11a24,24,0,0,0,14.49-16.41c2.59-10,5.67-28.22,5.67-58.48S236.92,79.5,234.33,69.52Zm-15.49,113a8,8,0,0,1-4.77,5.49c-31.65,12.22-85.48,12-86,12H128c-.54,0-54.33.2-86-12a8,8,0,0,1-4.77-5.49C34.8,173.39,32,156.57,32,128s2.8-45.39,5.16-54.47A8,8,0,0,1,41.93,68c30.52-11.79,81.66-12,85.85-12h.27c.54,0,54.38-.18,86,12a8,8,0,0,1,4.77,5.49C221.2,82.61,224,99.43,224,128S221.2,173.39,218.84,182.47Z" /></svg> </a> </div> <p>
|
||
© 2026 Last9, Inc. All rights reserved
|
||
</p> </div> </div> <nav class="flex flex-col gap-3 text-lg tracking-tight text-wrap text-foreground lg:text-base lg:text-nowrap" aria-label="Resources"> <h2 class="text-sm font-medium tracking-wider text-foreground-3 uppercase lg:text-xs"> Resources </h2> <ul class="flex flex-col gap-2"> <li> <a href="/customers/" class="transition-colors duration-200 ease-in-out hover:text-foreground-3"> Customers </a> </li><li> <a href="/blog/" class="transition-colors duration-200 ease-in-out hover:text-foreground-3"> Blog </a> </li><li> <a href="/events/" class="transition-colors duration-200 ease-in-out hover:text-foreground-3"> Events </a> </li><li> <a href="/changelog/" class="transition-colors duration-200 ease-in-out hover:text-foreground-3"> Changelog </a> </li><li> <a href="/guides/" class="transition-colors duration-200 ease-in-out hover:text-foreground-3"> Guides </a> </li><li> <a href="/docs/" class="transition-colors duration-200 ease-in-out hover:text-foreground-3"> Documentation </a> </li><li> <a href="/llms.txt" class="transition-colors duration-200 ease-in-out hover:text-foreground-3"> llms.txt </a> </li> </ul> </nav> <nav class="flex flex-col gap-3 text-lg tracking-tight text-wrap text-foreground lg:text-base lg:text-nowrap" aria-label="Platform"> <h2 class="text-sm font-medium tracking-wider text-foreground-3 uppercase lg:text-xs"> Platform </h2> <ul class="flex flex-col gap-2"> <li> <a href="/control-plane/" class="transition-colors duration-200 ease-in-out hover:text-foreground-3"> Control Plane </a> </li><li> <a href="/logs/" class="transition-colors duration-200 ease-in-out hover:text-foreground-3"> Logs </a> </li><li> <a href="/metrics/" class="transition-colors duration-200 ease-in-out hover:text-foreground-3"> Metrics </a> </li><li> <a href="/traces/" class="transition-colors duration-200 ease-in-out hover:text-foreground-3"> Traces </a> </li><li> <a href="/real-user-monitoring/" class="transition-colors duration-200 ease-in-out hover:text-foreground-3"> Applications (RUM) </a> </li><li> <a href="/synthetic-monitoring/" class="transition-colors duration-200 ease-in-out hover:text-foreground-3"> Synthetic Monitoring </a> </li><li> <a href="/gpu-observability/" class="transition-colors duration-200 ease-in-out hover:text-foreground-3"> GPU Workloads </a> </li><li> <a href="/coding-agent-observability/" class="transition-colors duration-200 ease-in-out hover:text-foreground-3"> Coding Agent Observability </a> </li><li> <a href="/alerting/" class="transition-colors duration-200 ease-in-out hover:text-foreground-3"> Alerting </a> </li><li> <a href="/mcp/" class="transition-colors duration-200 ease-in-out hover:text-foreground-3"> Last9 MCP </a> </li> </ul> </nav> <nav class="flex flex-col gap-3 text-lg tracking-tight text-wrap text-foreground lg:text-base lg:text-nowrap lg:col-start-8" aria-label="Company"> <h2 class="text-sm font-medium tracking-wider text-foreground-3 uppercase lg:text-xs"> Company </h2> <ul class="flex flex-col gap-2"> <li> <a href="/about-us/" class="transition-colors duration-200 ease-in-out hover:text-foreground-3"> About Us </a> </li><li> <a href="/partners/" class="transition-colors duration-200 ease-in-out hover:text-foreground-3"> Partners </a> </li><li> <a href="/schedule-demo/" class="transition-colors duration-200 ease-in-out hover:text-foreground-3"> Book a Demo </a> </li><li> <a href="/privacy/" class="transition-colors duration-200 ease-in-out hover:text-foreground-3"> Privacy </a> </li><li> <a href="/terms/" class="transition-colors duration-200 ease-in-out hover:text-foreground-3"> Terms </a> </li> </ul> </nav> <div class="flex flex-wrap gap-6 lg:flex-nowrap lg:gap-4" role="group" aria-label="Compliance certifications"> <div class="shrink-0"> <img src="/_astro/soc2-badge.B2MQLw12_TkEiy.svg" alt="SOC 2 Certified" loading="lazy" decoding="async" fetchpriority="auto" width="48" height="48" class="w-auto h-10"> </div><div class="shrink-0"> <img src="/_astro/pci-badge.CbTSbH9k_10cHa9.svg" alt="PCI DSS Compliant" loading="lazy" decoding="async" fetchpriority="auto" width="73" height="48" class="w-auto h-10"> </div><div class="shrink-0"> <img src="/_astro/hippa-badge.DzBr5vtd_TkEiy.svg" alt="HIPAA Compliant" loading="lazy" decoding="async" fetchpriority="auto" width="48" height="48" class="w-auto h-10"> </div><div class="shrink-0"> <img src="/_astro/iso-badge.Duy_1zKz_WVmDJ.svg" alt="ISO 27001 Compliant" loading="lazy" decoding="async" fetchpriority="auto" width="60" height="48" class="w-auto h-10"> </div> </div> </div> </footer> <script>(function(){const FOOTER_ANIMATION_ID = "us-footer-animation";
|
||
|
||
const FOOTER_FILE = "/common/animations/footer-animation.json.txt";
|
||
const FOOTER_ALT_TEXT = "Animated footer background";
|
||
const FOOTER_ARIA_LABEL = "Interactive WebGL animation for footer";
|
||
const MOBILE_QUERY = window.matchMedia("(max-width: 767px)");
|
||
let footerScene = null;
|
||
|
||
//The footer scene never runs on mobile, so it needs no reduced-perf options
|
||
const createFooterScene = () =>
|
||
UnicornStudio.addScene({
|
||
elementId: FOOTER_ANIMATION_ID,
|
||
filePath: FOOTER_FILE,
|
||
lazyLoad: true,
|
||
production: true,
|
||
altText: FOOTER_ALT_TEXT,
|
||
ariaLabel: FOOTER_ARIA_LABEL,
|
||
});
|
||
|
||
const destroyFooterScene = () => {
|
||
if (footerScene && !footerScene.destroyed) footerScene.destroy();
|
||
footerScene = null;
|
||
};
|
||
|
||
const setupFooterScene = (isMobile) => {
|
||
destroyFooterScene();
|
||
if (isMobile) return;
|
||
createFooterScene().then((scene) => {
|
||
footerScene = scene;
|
||
});
|
||
};
|
||
|
||
//Registering the listener only after the async library loads keeps every call site off an undefined UnicornStudio.
|
||
window.unicornStudioReady.then(() => {
|
||
setupFooterScene(MOBILE_QUERY.matches);
|
||
MOBILE_QUERY.addEventListener("change", (e) => setupFooterScene(e.matches));
|
||
});
|
||
})();</script> </div> </body></html> |