128 lines
48 KiB
HTML
128 lines
48 KiB
HTML
<!DOCTYPE html><html lang="en" class="scroll-smooth"> <head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1"><title>Self hosting full stack observability — Osuite</title><meta name="description" content="This article showcases the architecture of a cost-effective observability system using open-source tools, enabling startups to monitor their systems effectively without incurring high SaaS costs."><link rel="canonical" href="https://osuite.io/articles/full-stack-observability-self-hosted/"><link rel="alternate" type="application/rss+xml" title="Osuite Blog" href="/feed.xml"><!-- Open Graph --><meta property="og:type" content="article"><meta property="og:site_name" content="Osuite"><meta property="og:title" content="Self hosting full stack observability — Osuite"><meta property="og:description" content="This article showcases the architecture of a cost-effective observability system using open-source tools, enabling startups to monitor their systems effectively without incurring high SaaS costs."><meta property="og:url" content="https://osuite.io/articles/full-stack-observability-self-hosted/"><meta property="og:image" content="https://osuite.io/content/full-stack-observability-2.jpeg"><!-- Twitter --><meta name="twitter:card" content="summary_large_image"><meta name="twitter:title" content="Self hosting full stack observability — Osuite"><meta name="twitter:description" content="This article showcases the architecture of a cost-effective observability system using open-source tools, enabling startups to monitor their systems effectively without incurring high SaaS costs."><meta name="twitter:image" content="https://osuite.io/content/full-stack-observability-2.jpeg"><link rel="icon" type="image/svg+xml" href="/favicon.svg"><link rel="icon" href="/favicon.ico"><meta name="generator" content="Astro v5.17.1"><script type="application/ld+json">{"@context":"https://schema.org","@type":"Organization","name":"Osuite","url":"https://osuite.io/","logo":"https://osuite.io/favicon.svg","sameAs":["https://www.linkedin.com/company/osuite-io"]}</script><script type="application/ld+json">{"@context":"https://schema.org","@type":"WebSite","name":"Osuite","url":"https://osuite.io/"}</script><script async src="https://www.googletagmanager.com/gtag/js?id=G-V1G4V7YR10"></script><script>
|
||
window.dataLayer = window.dataLayer || [];
|
||
function gtag() { dataLayer.push(arguments); }
|
||
gtag("js", new Date());
|
||
gtag("config", "G-V1G4V7YR10", location.hostname === "localhost" ? { debug_mode: true } : {});
|
||
document.addEventListener("astro:after-swap", () => {
|
||
gtag("event", "page_view", { page_location: location.href, page_title: document.title });
|
||
});
|
||
document.addEventListener("click", (e) => {
|
||
const a = e.target.closest("a[data-cta]");
|
||
if (!a) return;
|
||
gtag("event", "cta_click", {
|
||
cta_label: a.textContent.trim(),
|
||
cta_destination: a.href,
|
||
cta_location: a.closest("[data-cta-location]")?.dataset.ctaLocation ?? "other",
|
||
});
|
||
});
|
||
</script> <script type="application/ld+json">{"@context":"https://schema.org","@type":"BlogPosting","headline":"Self hosting full stack observability","description":"This article showcases the architecture of a cost-effective observability system using open-source tools, enabling startups to monitor their systems effectively without incurring high SaaS costs.","image":"https://osuite.io/content/full-stack-observability-2.jpeg","datePublished":"2024-09-16T00:00:00.000Z","author":{"@type":"Person","name":"Malay Hazarika"},"publisher":{"@type":"Organization","name":"Osuite","logo":{"@type":"ImageObject","url":"https://osuite.io/favicon.svg"}},"mainEntityOfPage":"https://osuite.io/articles/full-stack-observability-self-hosted/"}</script> <link rel="alternate" type="text/markdown" href="/articles/full-stack-observability-self-hosted.md"> <meta name="astro-view-transitions-enabled" content="true"><meta name="astro-view-transitions-fallback" content="animate"><script type="module" src="/_astro/ClientRouter.astro_astro_type_script_index_0_lang.DmZtTH59.js"></script><link rel="stylesheet" href="/_astro/_page_.DnSsF1BE.css"><script type="module" src="/_astro/page.CtpI7X2x.js"></script></head> <body class="font-sans antialiased bg-light text-heading-light"> <nav class="fixed top-0 z-50 w-full transition-all duration-300 nav-light astro-5blmo7yk" id="navbar" data-variant="light" data-cta-location="nav"> <div class="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 astro-5blmo7yk"> <div class="flex justify-between items-center h-16 astro-5blmo7yk"> <div class="flex items-center gap-10 astro-5blmo7yk"> <!-- Logo --> <a href="/" class="flex items-center gap-2 astro-5blmo7yk"> <img src="/favicon.svg" alt="Osuite Logo" class="h-8 w-8 astro-5blmo7yk"> <span class="text-xl font-bold nav-logo-text transition-colors duration-300 text-slate-900 astro-5blmo7yk">Osuite</span> </a> <!-- Desktop Menu --> <div class="hidden lg:flex items-center gap-8 astro-5blmo7yk"> <!-- Products Dropdown --> <div class="relative group astro-5blmo7yk"> <button class="flex items-center gap-1 text-sm font-medium transition-colors py-2 nav-link-light astro-5blmo7yk">
|
||
Products
|
||
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-chevron-down w-4 h-4 transition-transform duration-200 group-hover:rotate-180 astro-5blmo7yk" aria-hidden="true"><path d="m6 9 6 6 6-6"></path></svg> </button> <div class="absolute top-full left-0 w-80 rounded-2xl shadow-xl opacity-0 invisible group-hover:opacity-100 group-hover:visible transition-all duration-200 transform translate-y-2 group-hover:translate-y-0 p-2 bg-white border border-slate-200 astro-5blmo7yk"> <div class="flex flex-col gap-1 astro-5blmo7yk"> <a href="/products/log-management/" class="flex items-start gap-3 p-3 rounded-xl transition-colors hover:bg-slate-50 astro-5blmo7yk"> <div class="flex items-center justify-center w-8 h-8 rounded-lg bg-gradient-to-br from-accent/20 to-accent-indigo/20 mt-0.5 flex-shrink-0 astro-5blmo7yk"> <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-file-text w-4 h-4 text-blue-500 astro-5blmo7yk" aria-hidden="true"><path d="M6 22a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.704.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2z"></path><path d="M14 2v5a1 1 0 0 0 1 1h5"></path><path d="M10 9H8"></path><path d="M16 13H8"></path><path d="M16 17H8"></path></svg> </div> <div class="astro-5blmo7yk"> <div class="text-sm font-medium text-slate-800 astro-5blmo7yk"> Log management </div> <div class="text-xs mt-0.5 text-slate-500 astro-5blmo7yk"> Collect, analyze, and visualize your logs in one place </div> </div> </a><a href="/products/distributed-tracing/" class="flex items-start gap-3 p-3 rounded-xl transition-colors hover:bg-slate-50 astro-5blmo7yk"> <div class="flex items-center justify-center w-8 h-8 rounded-lg bg-gradient-to-br from-accent/20 to-accent-indigo/20 mt-0.5 flex-shrink-0 astro-5blmo7yk"> <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-git-branch w-4 h-4 text-blue-500 astro-5blmo7yk" aria-hidden="true"><line x1="6" x2="6" y1="3" y2="15"></line><circle cx="18" cy="6" r="3"></circle><circle cx="6" cy="18" r="3"></circle><path d="M18 9a9 9 0 0 1-9 9"></path></svg> </div> <div class="astro-5blmo7yk"> <div class="text-sm font-medium text-slate-800 astro-5blmo7yk"> Distributed Tracing </div> <div class="text-xs mt-0.5 text-slate-500 astro-5blmo7yk"> Trace requests across your distributed systems with ease </div> </div> </a><a href="/products/apm/" class="flex items-start gap-3 p-3 rounded-xl transition-colors hover:bg-slate-50 astro-5blmo7yk"> <div class="flex items-center justify-center w-8 h-8 rounded-lg bg-gradient-to-br from-accent/20 to-accent-indigo/20 mt-0.5 flex-shrink-0 astro-5blmo7yk"> <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-activity w-4 h-4 text-blue-500 astro-5blmo7yk" aria-hidden="true"><path d="M22 12h-2.48a2 2 0 0 0-1.93 1.46l-2.35 8.36a.25.25 0 0 1-.48 0L9.24 2.18a.25.25 0 0 0-.48 0l-2.35 8.36A2 2 0 0 1 4.49 12H2"></path></svg> </div> <div class="astro-5blmo7yk"> <div class="text-sm font-medium text-slate-800 astro-5blmo7yk"> Application Performance Monitoring </div> <div class="text-xs mt-0.5 text-slate-500 astro-5blmo7yk"> Monitor and optimize your application's performance </div> </div> </a><a href="/products/rum/" class="flex items-start gap-3 p-3 rounded-xl transition-colors hover:bg-slate-50 astro-5blmo7yk"> <div class="flex items-center justify-center w-8 h-8 rounded-lg bg-gradient-to-br from-accent/20 to-accent-indigo/20 mt-0.5 flex-shrink-0 astro-5blmo7yk"> <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-mouse-pointer-click w-4 h-4 text-blue-500 astro-5blmo7yk" aria-hidden="true"><path d="M14 4.1 12 6"></path><path d="m5.1 8-2.9-.8"></path><path d="m6 12-1.9 2"></path><path d="M7.2 2.2 8 5.1"></path><path d="M9.037 9.69a.498.498 0 0 1 .653-.653l11 4.5a.5.5 0 0 1-.074.949l-4.349 1.041a1 1 0 0 0-.74.739l-1.04 4.35a.5.5 0 0 1-.95.074z"></path></svg> </div> <div class="astro-5blmo7yk"> <div class="text-sm font-medium text-slate-800 astro-5blmo7yk"> Real User Monitoring </div> <div class="text-xs mt-0.5 text-slate-500 astro-5blmo7yk"> See every click, error, and Core Web Vital from real users — stitched into your backend traces </div> </div> </a><a href="/products/infrastructure/" class="flex items-start gap-3 p-3 rounded-xl transition-colors hover:bg-slate-50 astro-5blmo7yk"> <div class="flex items-center justify-center w-8 h-8 rounded-lg bg-gradient-to-br from-accent/20 to-accent-indigo/20 mt-0.5 flex-shrink-0 astro-5blmo7yk"> <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-server w-4 h-4 text-blue-500 astro-5blmo7yk" aria-hidden="true"><rect width="20" height="8" x="2" y="2" rx="2" ry="2"></rect><rect width="20" height="8" x="2" y="14" rx="2" ry="2"></rect><line x1="6" x2="6.01" y1="6" y2="6"></line><line x1="6" x2="6.01" y1="18" y2="18"></line></svg> </div> <div class="astro-5blmo7yk"> <div class="text-sm font-medium text-slate-800 astro-5blmo7yk"> Infrastructure Monitoring </div> <div class="text-xs mt-0.5 text-slate-500 astro-5blmo7yk"> Get real-time visibility into your hosts, containers, and cloud resources </div> </div> </a><a href="/products/dashboards/" class="flex items-start gap-3 p-3 rounded-xl transition-colors hover:bg-slate-50 astro-5blmo7yk"> <div class="flex items-center justify-center w-8 h-8 rounded-lg bg-gradient-to-br from-accent/20 to-accent-indigo/20 mt-0.5 flex-shrink-0 astro-5blmo7yk"> <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-layout-dashboard w-4 h-4 text-blue-500 astro-5blmo7yk" aria-hidden="true"><rect width="7" height="9" x="3" y="3" rx="1"></rect><rect width="7" height="5" x="14" y="3" rx="1"></rect><rect width="7" height="9" x="14" y="12" rx="1"></rect><rect width="7" height="5" x="3" y="16" rx="1"></rect></svg> </div> <div class="astro-5blmo7yk"> <div class="text-sm font-medium text-slate-800 astro-5blmo7yk"> Custom Dashboards </div> <div class="text-xs mt-0.5 text-slate-500 astro-5blmo7yk"> Build production-ready dashboards manually or with AI </div> </div> </a><a href="/products/ai-agent/" class="flex items-start gap-3 p-3 rounded-xl transition-colors hover:bg-slate-50 astro-5blmo7yk"> <div class="flex items-center justify-center w-8 h-8 rounded-lg bg-gradient-to-br from-accent/20 to-accent-indigo/20 mt-0.5 flex-shrink-0 astro-5blmo7yk"> <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-bot w-4 h-4 text-blue-500 astro-5blmo7yk" aria-hidden="true"><path d="M12 8V4H8"></path><rect width="16" height="12" x="4" y="8" rx="2"></rect><path d="M2 14h2"></path><path d="M20 14h2"></path><path d="M15 13v2"></path><path d="M9 13v2"></path></svg> </div> <div class="astro-5blmo7yk"> <div class="text-sm font-medium text-slate-800 astro-5blmo7yk"> AI Agent </div> <div class="text-xs mt-0.5 text-slate-500 astro-5blmo7yk"> An investigation agent in your IDE, plus a visualizer agent for dashboards </div> </div> </a> </div> </div> </div> <!-- Customers Dropdown --> <div class="relative group astro-5blmo7yk"> <button class="flex items-center gap-1 text-sm font-medium transition-colors py-2 nav-link-light astro-5blmo7yk">
|
||
Customers
|
||
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-chevron-down w-4 h-4 transition-transform duration-200 group-hover:rotate-180 astro-5blmo7yk" aria-hidden="true"><path d="m6 9 6 6 6-6"></path></svg> </button> <div class="absolute top-full left-0 w-80 rounded-2xl shadow-xl opacity-0 invisible group-hover:opacity-100 group-hover:visible transition-all duration-200 transform translate-y-2 group-hover:translate-y-0 p-2 bg-white border border-slate-200 astro-5blmo7yk"> <div class="flex flex-col gap-1 astro-5blmo7yk"> <a href="/#testimonials" class="flex items-start gap-3 p-3 rounded-xl transition-colors hover:bg-slate-50 astro-5blmo7yk"> <div class="flex items-center justify-center w-8 h-8 rounded-lg bg-gradient-to-br from-accent/20 to-accent-indigo/20 mt-0.5 flex-shrink-0 astro-5blmo7yk"> <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-message-square w-4 h-4 text-blue-500 astro-5blmo7yk" aria-hidden="true"><path d="M22 17a2 2 0 0 1-2 2H6.828a2 2 0 0 0-1.414.586l-2.202 2.202A.71.71 0 0 1 2 21.286V5a2 2 0 0 1 2-2h16a2 2 0 0 1 2 2z"></path></svg> </div> <div class="astro-5blmo7yk"> <div class="text-sm font-medium text-slate-800 astro-5blmo7yk"> Testimonials </div> <div class="text-xs mt-0.5 text-slate-500 astro-5blmo7yk"> What our customers say about us </div> </div> </a><a href="/articles/miden-casestudy/" class="flex items-start gap-3 p-3 rounded-xl transition-colors hover:bg-slate-50 astro-5blmo7yk"> <div class="flex items-center justify-center w-8 h-8 rounded-lg bg-gradient-to-br from-accent/20 to-accent-indigo/20 mt-0.5 flex-shrink-0 astro-5blmo7yk"> <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-book w-4 h-4 text-blue-500 astro-5blmo7yk" aria-hidden="true"><path d="M4 19.5v-15A2.5 2.5 0 0 1 6.5 2H19a1 1 0 0 1 1 1v18a1 1 0 0 1-1 1H6.5a1 1 0 0 1 0-5H20"></path></svg> </div> <div class="astro-5blmo7yk"> <div class="text-sm font-medium text-slate-800 astro-5blmo7yk"> Case Study: Miden </div> <div class="text-xs mt-0.5 text-slate-500 astro-5blmo7yk"> Read how Miden scaled their observability with Osuite </div> </div> </a><a href="/articles/infinity-casestudy/" class="flex items-start gap-3 p-3 rounded-xl transition-colors hover:bg-slate-50 astro-5blmo7yk"> <div class="flex items-center justify-center w-8 h-8 rounded-lg bg-gradient-to-br from-accent/20 to-accent-indigo/20 mt-0.5 flex-shrink-0 astro-5blmo7yk"> <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-users w-4 h-4 text-blue-500 astro-5blmo7yk" aria-hidden="true"><path d="M16 21v-2a4 4 0 0 0-4-4H6a4 4 0 0 0-4 4v2"></path><path d="M16 3.128a4 4 0 0 1 0 7.744"></path><path d="M22 21v-2a4 4 0 0 0-3-3.87"></path><circle cx="9" cy="7" r="4"></circle></svg> </div> <div class="astro-5blmo7yk"> <div class="text-sm font-medium text-slate-800 astro-5blmo7yk"> Case Study: Infinity </div> <div class="text-xs mt-0.5 text-slate-500 astro-5blmo7yk"> Learn how infinity improved reliability with Osuite </div> </div> </a> </div> </div> </div> <a href="/pricing/" class="text-sm font-medium transition-colors nav-link-light astro-5blmo7yk">
|
||
Pricing
|
||
</a> <a href="/articles/" class="text-sm font-medium transition-colors nav-link-light astro-5blmo7yk">
|
||
Blog
|
||
</a> <a href="/docs/" class="text-sm font-medium transition-colors nav-link-light astro-5blmo7yk">
|
||
Docs
|
||
</a> </div> </div> <!-- CTA Button --> <div class="hidden lg:flex items-center gap-5 astro-5blmo7yk"> <a href="https://app.us.osuite.io" class="text-sm font-medium transition-colors nav-link-light astro-5blmo7yk">
|
||
Log in
|
||
</a> <a href="https://app.us.osuite.io/signup" class="inline-flex items-center justify-center gap-2 rounded-full font-semibold transition-all duration-300 cursor-pointer px-4 py-2 text-sm bg-linear-to-r from-accent to-accent-indigo text-white hover:shadow-glow hover:scale-[1.02] astro-5blmo7yk" data-cta>Sign up</a> </div> <!-- Mobile Menu Button --> <div class="flex lg:hidden astro-5blmo7yk"> <button type="button" class="p-2 transition-colors text-slate-600 hover:text-slate-900 astro-5blmo7yk" id="mobile-menu-button" aria-expanded="false"> <span class="sr-only astro-5blmo7yk">Open main menu</span> <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-menu h-6 w-6 astro-5blmo7yk" aria-hidden="true" id="menu-icon"><path d="M4 5h16"></path><path d="M4 12h16"></path><path d="M4 19h16"></path></svg> <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-x h-6 w-6 hidden astro-5blmo7yk" aria-hidden="true" id="close-icon"><path d="M18 6 6 18"></path><path d="m6 6 12 12"></path></svg> </button> </div> </div> </div> <!-- Mobile Menu Overlay --> <div class="lg:hidden hidden fixed inset-0 top-16 z-40 astro-5blmo7yk" id="mobile-menu"> <!-- Backdrop --> <div class="absolute inset-0 bg-black/60 backdrop-blur-sm astro-5blmo7yk" id="mobile-backdrop"></div> <!-- Menu Panel --> <div class="relative bg-deep border-t border-white/10 max-h-[calc(100vh-4rem)] overflow-y-auto astro-5blmo7yk"> <div class="px-4 pt-2 pb-6 space-y-1 astro-5blmo7yk"> <!-- Mobile Products --> <div class="border-b border-white/10 pb-2 astro-5blmo7yk"> <button class="flex w-full items-center justify-between py-3 text-base font-medium text-slate-100 astro-5blmo7yk" id="mobile-products-button">
|
||
Products
|
||
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-chevron-down h-4 w-4 text-slate-400 transition-transform duration-200 astro-5blmo7yk" aria-hidden="true" id="mobile-products-icon"><path d="m6 9 6 6 6-6"></path></svg> </button> <div class="hidden pl-4 space-y-1 mt-1 mb-2 astro-5blmo7yk" id="mobile-products-menu"> <a href="/products/log-management/" class="flex items-center gap-3 py-2.5 text-sm text-slate-400 hover:text-blue-400 transition-colors astro-5blmo7yk"> <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-file-text w-4 h-4 astro-5blmo7yk" aria-hidden="true"><path d="M6 22a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.704.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2z"></path><path d="M14 2v5a1 1 0 0 0 1 1h5"></path><path d="M10 9H8"></path><path d="M16 13H8"></path><path d="M16 17H8"></path></svg> Log management </a><a href="/products/distributed-tracing/" class="flex items-center gap-3 py-2.5 text-sm text-slate-400 hover:text-blue-400 transition-colors astro-5blmo7yk"> <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-git-branch w-4 h-4 astro-5blmo7yk" aria-hidden="true"><line x1="6" x2="6" y1="3" y2="15"></line><circle cx="18" cy="6" r="3"></circle><circle cx="6" cy="18" r="3"></circle><path d="M18 9a9 9 0 0 1-9 9"></path></svg> Distributed Tracing </a><a href="/products/apm/" class="flex items-center gap-3 py-2.5 text-sm text-slate-400 hover:text-blue-400 transition-colors astro-5blmo7yk"> <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-activity w-4 h-4 astro-5blmo7yk" aria-hidden="true"><path d="M22 12h-2.48a2 2 0 0 0-1.93 1.46l-2.35 8.36a.25.25 0 0 1-.48 0L9.24 2.18a.25.25 0 0 0-.48 0l-2.35 8.36A2 2 0 0 1 4.49 12H2"></path></svg> Application Performance Monitoring </a><a href="/products/rum/" class="flex items-center gap-3 py-2.5 text-sm text-slate-400 hover:text-blue-400 transition-colors astro-5blmo7yk"> <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-mouse-pointer-click w-4 h-4 astro-5blmo7yk" aria-hidden="true"><path d="M14 4.1 12 6"></path><path d="m5.1 8-2.9-.8"></path><path d="m6 12-1.9 2"></path><path d="M7.2 2.2 8 5.1"></path><path d="M9.037 9.69a.498.498 0 0 1 .653-.653l11 4.5a.5.5 0 0 1-.074.949l-4.349 1.041a1 1 0 0 0-.74.739l-1.04 4.35a.5.5 0 0 1-.95.074z"></path></svg> Real User Monitoring </a><a href="/products/infrastructure/" class="flex items-center gap-3 py-2.5 text-sm text-slate-400 hover:text-blue-400 transition-colors astro-5blmo7yk"> <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-server w-4 h-4 astro-5blmo7yk" aria-hidden="true"><rect width="20" height="8" x="2" y="2" rx="2" ry="2"></rect><rect width="20" height="8" x="2" y="14" rx="2" ry="2"></rect><line x1="6" x2="6.01" y1="6" y2="6"></line><line x1="6" x2="6.01" y1="18" y2="18"></line></svg> Infrastructure Monitoring </a><a href="/products/dashboards/" class="flex items-center gap-3 py-2.5 text-sm text-slate-400 hover:text-blue-400 transition-colors astro-5blmo7yk"> <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-layout-dashboard w-4 h-4 astro-5blmo7yk" aria-hidden="true"><rect width="7" height="9" x="3" y="3" rx="1"></rect><rect width="7" height="5" x="14" y="3" rx="1"></rect><rect width="7" height="9" x="14" y="12" rx="1"></rect><rect width="7" height="5" x="3" y="16" rx="1"></rect></svg> Custom Dashboards </a><a href="/products/ai-agent/" class="flex items-center gap-3 py-2.5 text-sm text-slate-400 hover:text-blue-400 transition-colors astro-5blmo7yk"> <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-bot w-4 h-4 astro-5blmo7yk" aria-hidden="true"><path d="M12 8V4H8"></path><rect width="16" height="12" x="4" y="8" rx="2"></rect><path d="M2 14h2"></path><path d="M20 14h2"></path><path d="M15 13v2"></path><path d="M9 13v2"></path></svg> AI Agent </a> </div> </div> <!-- Mobile Customers --> <div class="border-b border-white/10 pb-2 astro-5blmo7yk"> <button class="flex w-full items-center justify-between py-3 text-base font-medium text-slate-100 astro-5blmo7yk" id="mobile-customers-button">
|
||
Customers
|
||
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-chevron-down h-4 w-4 text-slate-400 transition-transform duration-200 astro-5blmo7yk" aria-hidden="true" id="mobile-customers-icon"><path d="m6 9 6 6 6-6"></path></svg> </button> <div class="hidden pl-4 space-y-1 mt-1 mb-2 astro-5blmo7yk" id="mobile-customers-menu"> <a href="/#testimonials" class="flex items-center gap-3 py-2.5 text-sm text-slate-400 hover:text-blue-400 transition-colors astro-5blmo7yk"> <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-message-square w-4 h-4 astro-5blmo7yk" aria-hidden="true"><path d="M22 17a2 2 0 0 1-2 2H6.828a2 2 0 0 0-1.414.586l-2.202 2.202A.71.71 0 0 1 2 21.286V5a2 2 0 0 1 2-2h16a2 2 0 0 1 2 2z"></path></svg> Testimonials </a><a href="/articles/miden-casestudy/" class="flex items-center gap-3 py-2.5 text-sm text-slate-400 hover:text-blue-400 transition-colors astro-5blmo7yk"> <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-book w-4 h-4 astro-5blmo7yk" aria-hidden="true"><path d="M4 19.5v-15A2.5 2.5 0 0 1 6.5 2H19a1 1 0 0 1 1 1v18a1 1 0 0 1-1 1H6.5a1 1 0 0 1 0-5H20"></path></svg> Case Study: Miden </a><a href="/articles/infinity-casestudy/" class="flex items-center gap-3 py-2.5 text-sm text-slate-400 hover:text-blue-400 transition-colors astro-5blmo7yk"> <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-users w-4 h-4 astro-5blmo7yk" aria-hidden="true"><path d="M16 21v-2a4 4 0 0 0-4-4H6a4 4 0 0 0-4 4v2"></path><path d="M16 3.128a4 4 0 0 1 0 7.744"></path><path d="M22 21v-2a4 4 0 0 0-3-3.87"></path><circle cx="9" cy="7" r="4"></circle></svg> Case Study: Infinity </a> </div> </div> <a href="/pricing/" class="block py-3 text-base font-medium text-slate-100 border-b border-white/10 astro-5blmo7yk">
|
||
Pricing
|
||
</a> <a href="/articles/" class="block py-3 text-base font-medium text-slate-100 border-b border-white/10 astro-5blmo7yk">
|
||
Blog
|
||
</a> <a href="/docs/" class="block py-3 text-base font-medium text-slate-100 border-b border-white/10 astro-5blmo7yk">
|
||
Docs
|
||
</a> <div class="pt-4 space-y-3 astro-5blmo7yk"> <a href="https://app.us.osuite.io/signup" class="inline-flex items-center justify-center gap-2 rounded-full font-semibold transition-all duration-300 cursor-pointer px-6 py-3 text-base bg-linear-to-r from-accent to-accent-indigo text-white hover:shadow-glow hover:scale-[1.02] w-full astro-5blmo7yk" data-cta>Sign up</a> <a href="https://app.us.osuite.io" class="inline-flex items-center justify-center gap-2 rounded-full font-semibold transition-all duration-300 cursor-pointer px-6 py-3 text-base border border-white/20 text-heading-dark hover:border-white/40 hover:bg-white/5 w-full astro-5blmo7yk" data-cta>
|
||
Log in
|
||
</a> </div> </div> </div> </div> </nav> <script type="module">function g(){const o=document.getElementById("navbar"),n=document.getElementById("mobile-menu-button"),c=document.getElementById("mobile-menu"),s=document.getElementById("mobile-backdrop"),d=document.getElementById("menu-icon"),i=document.getElementById("close-icon");if(!o)return;let l=0;if(window.addEventListener("scroll",()=>{const e=window.scrollY;o.classList.toggle("nav-scrolled",e>50),o.classList.toggle("nav-hidden",e>l&&e>200),l=e}),n&&c&&d&&i){const e=()=>{const t=n.getAttribute("aria-expanded")==="true";n.setAttribute("aria-expanded",(!t).toString()),c.classList.toggle("hidden",t),d.classList.toggle("hidden",!t),i.classList.toggle("hidden",t)};n.addEventListener("click",e),s&&s.addEventListener("click",e)}const m=(e,t,b)=>{const u=document.getElementById(e),a=document.getElementById(t),r=document.getElementById(b);u&&a&&r&&u.addEventListener("click",()=>{a.classList.toggle("hidden"),r.classList.toggle("rotate-180")})};m("mobile-products-button","mobile-products-menu","mobile-products-icon"),m("mobile-customers-button","mobile-customers-menu","mobile-customers-icon")}g();document.addEventListener("astro:after-swap",g);</script> <main class="bg-light"> <div class="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 pt-32 pb-24"> <div class="grid grid-cols-1 lg:grid-cols-4 gap-8 lg:gap-16"> <article class="lg:col-span-3 space-y-6"> <header class="space-y-4"> <h1 class="font-display text-3xl md:text-4xl font-bold tracking-tight leading-snug text-heading-light"> Self hosting full stack observability </h1> <div class="text-sm text-muted-light"> <span>Malay Hazarika</span> <span class="mx-2">•</span> <time datetime="2024-09-16T00:00:00.000Z"> September 16, 2024 </time> <span class="mx-2">•</span> <span>6 min read</span> </div> </header> <div class="rounded-2xl overflow-hidden"> <img src="/content/full-stack-observability-2.jpeg" alt="Self hosting full stack observability" class="w-full h-auto object-cover"> </div> <div class="prose"> <p>“Move fast and break things”. Yes, but you must know when and how things break as soon as they fail so that you can learn and fix your mistakes. This idea applied to engineering means you must have eyes on your systems for you to move faster.</p>
|
||
<p>Enter observability.</p>
|
||
<h2 id="why-your-startup-needs-it">Why your startup needs it</h2>
|
||
<p>As your startup grows, you’ll face unique challenges that demand real-time performance insights. Rapid scaling can introduce complexities that affect service quality. Issues like latency and service disruptions can arise from increased traffic or a more intricate architecture, making it essential to keep a close eye on system performance.</p>
|
||
<p>Neglecting observability can lead to outages. Consider this: downtime costs businesses a lot of money. For a startup, this could translate to significant revenue loss and potentially devastating effects on customer trust and retention. A single outage can mean the difference between retaining a loyal customer and losing them to competitors.</p>
|
||
<h2 id="why-self-host-it">Why self-host it</h2>
|
||
<p>You need a system that watches over your systems. As you explore the market for such a solution you’ll encounter solutions that are priced quite high, insanely high at times. What if it is cost-prohibitive for you? What if you are not able to convince management to allocate you $8000 - $10,000 a month?</p>
|
||
<p>You’ll still need one. So In this article goes over how to set up a system that gives you a 360-degree view of your system on your own using open-source tools, without the outrageous SaaS bills.</p>
|
||
<p>With this setup, you’ll only pay for the hardware you use. All the tools used are completely open-source and free to use.</p>
|
||
<p>The architecture is designed to be progressive. Meaning, you can implement a simpler version to get started and add complexities as your need grows.</p>
|
||
<p>I will show you how.</p>
|
||
<h2 id="what-it-includes">What It Includes</h2>
|
||
<p>To achieve full-stack observability, you’ll need to focus on several key components:</p>
|
||
<h3 id="logs">Logs</h3>
|
||
<p>Centralized logging is crucial for effective debugging and monitoring applications. By aggregating logs across all your services, you streamline analysis and significantly reduce the time it takes to resolve issues. For instance, if an error occurs, having consolidated logs allows you to trace it back quickly to its origin.</p>
|
||
<h3 id="metrics">Metrics</h3>
|
||
<p>Similar to how Key performance indicators (KPIs) are essential for tracking progress in business, you need KPIs for system health and application performance in real-time. Visualization tools can provide actionable insights into operational status, helping you make informed decisions. Metrics like response times and error rates give you a pulse on how your application is performing under various loads.</p>
|
||
<h3 id="dashboards">Dashboards</h3>
|
||
<p>Custom dashboards provide a comprehensive overview of your system’s performance metrics. By integrating multiple data sources into a single interface, you gain effective monitoring capabilities that empower your team to stay informed and respond swiftly to issues as they arise.</p>
|
||
<h3 id="traces">Traces</h3>
|
||
<p>Tracing user requests helps you identify latency issues across services. By employing tools that visualize request flows and provide contextual information, you can pinpoint where bottlenecks occur. This is especially crucial in microservices architectures, where a single slow service can affect the entire user experience.</p>
|
||
<h3 id="alerts">Alerts</h3>
|
||
<p>Real-time notifications are vital for proactive incident management. Setting up customizable thresholds for alerts ensures that your team is alerted to critical performance issues without being bombarded by noise. You can prioritize alerts based on severity, allowing your team to focus on what truly matters.</p>
|
||
<h2 id="components-and-why-each-of-them-is-chosen">Components and why each of them is chosen</h2>
|
||
<p>The following are the major components required for the system.</p>
|
||
<h3 id="opentelemetry">OpenTelemetry</h3>
|
||
<p>OpenTelemetry is essential for standardizing observability data collection across diverse tech stacks. Its auto-instrumentation capabilities for common programming languages reduce engineering overhead, allowing you to focus on product development. OpenTelemetry is vendor-neutral and has become the industry standard for collecting observability data.</p>
|
||
<h3 id="opensearch">OpenSearch</h3>
|
||
<p>OpenSearch serves as a cost-effective solution for indexing and searching logs and traces. Its ability to handle large volumes of data efficiently makes it ideal for startups expecting rapid growth.</p>
|
||
<h3 id="prometheus">Prometheus</h3>
|
||
<p>Prometheus excels at collecting and querying time-series metrics, particularly in cloud-native environments. Its reliability makes it a go-to choice for monitoring application performance in startups.</p>
|
||
<h3 id="grafana">Grafana</h3>
|
||
<p>Grafana is a powerful visualization tool that integrates seamlessly with multiple data sources, enabling dynamic dashboards for real-time insights. You will be using Grafana to build dashboards to monitor your systems and create alerts on the metrics.</p>
|
||
<h3 id="alertmanager">Alertmanager</h3>
|
||
<p>Alertmanager centralizes alert notifications to ensure your team remains aware of critical issues without being overwhelmed by noise. Configurable options allow you to prioritize alerts based on severity, helping your team focus on the most pressing concerns.</p>
|
||
<h3 id="kubernetes">Kubernetes</h3>
|
||
<p>Given the system consists of so many moving parts you need an orchestration system to make sure things are running reliably, which is where Kubernetes will help you. Even if the rest of the infrastructure is not in k8s, I would still recommend you use k8s for the observability system.</p>
|
||
<h2 id="the-architecture">The architecture</h2>
|
||
<p>Following will be the architecture of the full system.</p>
|
||
<p>Don’t be overwhelmed by it I will <img src="/content/observability-arch.png" alt="">explain the architecture and how to progressively implement it.</p>
|
||
<h3 id="setup-v1-the-simplest-setup">Setup v1: The simplest setup</h3>
|
||
<p>The heart of the system is the two data stores: Prometheus and OpenSearch. On top of that, you’ll have OpenSearch Dashboard for log searching, Jaeger UI for tracing, and Grafana for metrics.</p>
|
||
<p>In the v1 you’ll not have the separate Otel collector cluster (as shown inside “The observability system” in the diagram). You’ll run Otel collectors in every compute node you have(as a DaemonSet), which will collect the logs and traces and send them to OpenSearch and Jaeger directly. Prometheus will be configured to discover services and scrape the metrics.</p>
|
||
<p>This is the simplest setup and will take you a long way. Because you don’t have to think about scaling the Otel collectors an you are running multiple of them already.</p>
|
||
<p>However, the limitation of this setup is that when the volume of traces and logs gets high Otel collector will consume sizable resources in every compute node you have. At that point, you have to go through the full setup with an independent Otel collector cluster.</p>
|
||
<h3 id="setup-v2-full-setup">Setup v2: Full setup</h3>
|
||
<p>In this one, you’ll have the Otel collector cluster in “The observability system” and you’ll be <strong>not</strong> running otel collector in every compute node. Instead, all your services will send their traces and logs to the otel collector cluster, which you’ll scale independently as needed.</p>
|
||
<h2 id="implementation">Implementation</h2>
|
||
<p>Implementation of the whole system in one blog post is not possible without turning this into a 6-hour read. So here I will give you entry points to explore how to set up each component of the system. Here I assume you will be using Kubernetes to manage components</p>
|
||
<ul>
|
||
<li><strong>OpenSearch</strong>: In my experience, OpenSeach is the hardest and yet the most important piece of this puzzle. I would suggest you start with <a href="https://github.com/opensearch-project/opensearch-k8s-operator">the OpenSearch operator</a> which will help you a lot in maintaining the cluster.</li>
|
||
<li><strong>OpenTelemetry collector</strong>: I recommend the <a href="https://github.com/open-telemetry/opentelemetry-operator">opentelemetry collector operator</a> for running the otel collectors. Also read <a href="https://opentelemetry.io/docs/zero-code/">https://opentelemetry.io/docs/zero-code/</a> to learn how to instrument your services without any code.</li>
|
||
<li><strong>Jaeger</strong>: I will recommend the <a href="https://github.com/jaegertracing/jaeger-operator">Jaeger operator</a> to run Jaeger.</li>
|
||
<li><strong>Prometheus and Alertmanager</strong>: I will recommend the <a href="https://github.com/prometheus-operator/prometheus-operator">Prometheus operator</a> to run Prometheus, which also includes Alertmanager.</li>
|
||
<li><strong>Grafana</strong>: I recommend using <a href="https://github.com/grafana/helm-charts">this helm chart</a> to run Grafana.</li>
|
||
</ul>
|
||
<h2 id="challenges-in-implementation">Challenges in Implementation</h2>
|
||
<p>As you start your journey on setting up your observability stack, you might encounter some challenges:</p>
|
||
<h3 id="resource-constraints">Resource constraints</h3>
|
||
<p>Faced with limited resources, prioritize critical components first. Start with logging and metrics to establish a baseline observability strategy before expanding to traces and alerts. You can always iterate and improve as your team gains familiarity with the tools.</p>
|
||
<h3 id="integration-complexities">Integration complexities</h3>
|
||
<p>Existing systems can pose integration challenges. A phased rollout strategy can help mitigate disruptions— instrument a small subset of the services to begin with.</p>
|
||
<h3 id="team-training">Team training</h3>
|
||
<p>Your team will need training to effectively use observability tools. Consider conducting hands-on workshops to ensure everyone is familiar with the tools</p>
|
||
<h2 id="conclusion">Conclusion</h2>
|
||
<p>Self-hosting your full-stack observability is not just about implementing a set of tools; it’s about empowering your startup to make data-driven decisions for operational efficiency and user satisfaction. By taking control of your observability strategy, you can minimize downtime, optimize performance, and ultimately drive growth.</p>
|
||
<p>Are you ready to embark on your observability journey? Start today and transform how your startup approaches operational excellence! With the right tools and strategies, you can set your startup on a path toward success. Let’s make observability a core part of your operational strategy!</p> </div> </article> <aside class="hidden lg:block lg:col-span-1"> <div class="sticky top-[calc(var(--spacing-nav)+1rem)]"> <h2 class="text-xs font-semibold uppercase tracking-[0.2em] text-muted-light mb-4">
|
||
Table Of Contents
|
||
</h2> <nav> <ul class="space-y-2 text-sm"> <li class> <a href="#why-your-startup-needs-it" class="text-muted-light hover:text-heading-light transition-colors block"> Why your startup needs it </a> </li><li class> <a href="#why-self-host-it" class="text-muted-light hover:text-heading-light transition-colors block"> Why self-host it </a> </li><li class> <a href="#what-it-includes" class="text-muted-light hover:text-heading-light transition-colors block"> What It Includes </a> </li><li class="pl-4"> <a href="#logs" class="text-muted-light hover:text-heading-light transition-colors block"> Logs </a> </li><li class="pl-4"> <a href="#metrics" class="text-muted-light hover:text-heading-light transition-colors block"> Metrics </a> </li><li class="pl-4"> <a href="#dashboards" class="text-muted-light hover:text-heading-light transition-colors block"> Dashboards </a> </li><li class="pl-4"> <a href="#traces" class="text-muted-light hover:text-heading-light transition-colors block"> Traces </a> </li><li class="pl-4"> <a href="#alerts" class="text-muted-light hover:text-heading-light transition-colors block"> Alerts </a> </li><li class> <a href="#components-and-why-each-of-them-is-chosen" class="text-muted-light hover:text-heading-light transition-colors block"> Components and why each of them is chosen </a> </li><li class="pl-4"> <a href="#opentelemetry" class="text-muted-light hover:text-heading-light transition-colors block"> OpenTelemetry </a> </li><li class="pl-4"> <a href="#opensearch" class="text-muted-light hover:text-heading-light transition-colors block"> OpenSearch </a> </li><li class="pl-4"> <a href="#prometheus" class="text-muted-light hover:text-heading-light transition-colors block"> Prometheus </a> </li><li class="pl-4"> <a href="#grafana" class="text-muted-light hover:text-heading-light transition-colors block"> Grafana </a> </li><li class="pl-4"> <a href="#alertmanager" class="text-muted-light hover:text-heading-light transition-colors block"> Alertmanager </a> </li><li class="pl-4"> <a href="#kubernetes" class="text-muted-light hover:text-heading-light transition-colors block"> Kubernetes </a> </li><li class> <a href="#the-architecture" class="text-muted-light hover:text-heading-light transition-colors block"> The architecture </a> </li><li class="pl-4"> <a href="#setup-v1-the-simplest-setup" class="text-muted-light hover:text-heading-light transition-colors block"> Setup v1: The simplest setup </a> </li><li class="pl-4"> <a href="#setup-v2-full-setup" class="text-muted-light hover:text-heading-light transition-colors block"> Setup v2: Full setup </a> </li><li class> <a href="#implementation" class="text-muted-light hover:text-heading-light transition-colors block"> Implementation </a> </li><li class> <a href="#challenges-in-implementation" class="text-muted-light hover:text-heading-light transition-colors block"> Challenges in Implementation </a> </li><li class="pl-4"> <a href="#resource-constraints" class="text-muted-light hover:text-heading-light transition-colors block"> Resource constraints </a> </li><li class="pl-4"> <a href="#integration-complexities" class="text-muted-light hover:text-heading-light transition-colors block"> Integration complexities </a> </li><li class="pl-4"> <a href="#team-training" class="text-muted-light hover:text-heading-light transition-colors block"> Team training </a> </li><li class> <a href="#conclusion" class="text-muted-light hover:text-heading-light transition-colors block"> Conclusion </a> </li> </ul> </nav> </div> </aside> </div> </div> </main> <footer class="relative bg-deep text-slate-400 overflow-hidden"> <!-- Grid background pattern --> <div class="absolute inset-0 grid-bg pointer-events-none" aria-hidden="true"> <div class="absolute inset-0 bg-gradient-to-t from-deep via-transparent to-deep"></div> </div> <div class="relative mx-auto max-w-7xl px-4 sm:px-6 lg:px-8"> <div class="py-12 border-b border-white/10 flex flex-col md:flex-row items-start md:items-center justify-between gap-8"> <div> <a href="/" class="flex items-center gap-2 mb-3"> <img src="/favicon.svg" alt="Osuite Logo" class="h-8 w-8"> <span class="text-xl font-bold text-white">Osuite</span> </a> <p class="text-sm text-slate-500 max-w-sm">
|
||
AI-native observability. Instrument any stack in minutes, then let an
|
||
investigation agent in your IDE find the root cause and a fix — in
|
||
minutes, not hours of dashboard digging.
|
||
</p> </div> </div> <!-- Link grid --> <div class="py-12 grid grid-cols-2 md:grid-cols-4 gap-8"> <div> <h3 class="text-xs font-semibold uppercase tracking-[0.2em] text-heading-dark mb-4">
|
||
Product
|
||
</h3> <ul class="space-y-3"> <li> <a href="/products/log-management/" class="text-sm text-slate-500 hover:text-slate-200 transition-colors"> Log management </a> </li><li> <a href="/products/distributed-tracing/" class="text-sm text-slate-500 hover:text-slate-200 transition-colors"> Distributed Tracing </a> </li><li> <a href="/products/apm/" class="text-sm text-slate-500 hover:text-slate-200 transition-colors"> Application Performance Monitoring </a> </li><li> <a href="/products/rum/" class="text-sm text-slate-500 hover:text-slate-200 transition-colors"> Real User Monitoring </a> </li><li> <a href="/products/infrastructure/" class="text-sm text-slate-500 hover:text-slate-200 transition-colors"> Infrastructure Monitoring </a> </li><li> <a href="/products/dashboards/" class="text-sm text-slate-500 hover:text-slate-200 transition-colors"> Custom Dashboards </a> </li><li> <a href="/products/ai-agent/" class="text-sm text-slate-500 hover:text-slate-200 transition-colors"> AI Agent </a> </li> </ul> </div> <div> <h3 class="text-xs font-semibold uppercase tracking-[0.2em] text-heading-dark mb-4">
|
||
Resources
|
||
</h3> <ul class="space-y-3"> <li> <a href="/pricing/" class="text-sm text-slate-500 hover:text-slate-200 transition-colors"> Pricing </a> </li><li> <a href="/articles/" class="text-sm text-slate-500 hover:text-slate-200 transition-colors"> Blog </a> </li><li> <a href="/docs/" class="text-sm text-slate-500 hover:text-slate-200 transition-colors"> Documentation </a> </li><li> <a href="/contact/" class="text-sm text-slate-500 hover:text-slate-200 transition-colors"> Contact </a> </li> </ul> </div> <div> <h3 class="text-xs font-semibold uppercase tracking-[0.2em] text-heading-dark mb-4">
|
||
Legal
|
||
</h3> <ul class="space-y-3"> <li> <a href="/privacy-policy/" class="text-sm text-slate-500 hover:text-slate-200 transition-colors">
|
||
Privacy Policy
|
||
</a> </li> <li> <a href="/tos/" class="text-sm text-slate-500 hover:text-slate-200 transition-colors">
|
||
Terms of Service
|
||
</a> </li> </ul> </div> <div> <h3 class="text-xs font-semibold uppercase tracking-[0.2em] text-heading-dark mb-4">
|
||
Connect
|
||
</h3> <div class="flex gap-3"> <a href="https://www.linkedin.com/company/osuite-io" class="flex items-center justify-center w-9 h-9 rounded-full bg-white/5 border border-white/10 text-slate-400 hover:text-white hover:bg-white/10 hover:shadow-glow-sm transition-all duration-300" aria-label="LinkedIn"> <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-linkedin h-4 w-4" aria-hidden="true"><path d="M16 8a6 6 0 0 1 6 6v7h-4v-7a2 2 0 0 0-2-2 2 2 0 0 0-2 2v7h-4v-7a6 6 0 0 1 6-6z"></path><rect width="4" height="12" x="2" y="9"></rect><circle cx="4" cy="4" r="2"></circle></svg> </a> </div> </div> </div> <!-- Bottom bar --> <div class="py-6 border-t border-white/10 flex flex-col md:flex-row justify-between items-center gap-4"> <p class="text-xs text-body-dark">
|
||
© 2026 Osuite. All rights reserved.
|
||
</p> <p class="text-xs text-body-dark">Built for engineers who ship.</p> </div> </div> </footer> <script type="module">let i;function s(){const o=document.querySelectorAll("[data-animate]");o.forEach(e=>{e.getBoundingClientRect().top<window.innerHeight&&e.classList.add("is-visible")}),i?.disconnect();const t=new IntersectionObserver(e=>{e.forEach(n=>{n.isIntersecting&&(n.target.classList.add("is-visible"),t.unobserve(n.target))})},{threshold:.1,rootMargin:"0px 0px -60px 0px"});i=t,o.forEach(e=>{e.classList.contains("is-visible")||t.observe(e)})}s();document.addEventListener("astro:after-swap",s);function r(){const{hash:o}=window.location;if(!o)return;const t=document.querySelector(decodeURIComponent(o));t&&requestAnimationFrame(()=>{const e=t.getBoundingClientRect().top+window.scrollY-80;window.scrollTo({top:e,behavior:"smooth"})})}document.addEventListener("astro:page-load",r);</script> </body> </html> |