1<!DOCTYPE html><html lang="en"> <head><!-- Google tag (gtag.js) -->
vendor: 63 bytes, line 1
1<script async src="https://www.googletagmanager.com/gtag/js?id=
1G-EL3982RBS8
vendor: 11 bytes, line 1
1"></script>
1<script type="module" src="/_astro/Layout.astro_astro_type_script_index_0_lang.Cqrgs33o.js"></script>
1<meta charset="UTF-8"><meta name="viewport" content="width=device-width"><link rel="icon" type="image/x-icon" href="/favicon.ico"><link rel="apple-touch-icon" sizes="180x180" href="/apple-touch-icon.png"><link rel="sitemap" href="/sitemap-index.xml"><link rel="canonical" href="https://www.bluesunrise.com/project/groundwork/"><meta name="generator" content="Astro v5.2.5"><title>Groundwork | Bluesunrise - Enterprise Software Development & AI Solutions</title><meta name="description" content="Our team created a state of the art unified monitoring system running in Docker Compose and soon Kubernetes."><meta name="keywords" content><meta name="robots" content="index, follow"><link rel="preconnect" href="https://fonts.googleapis.com"><link rel="preconnect" href="https://fonts.gstatic.com" crossorigin><link href="https://fonts.googleapis.com/css2?family=Bruno+Ace+SC&family=Noto+Sans+KR:[email protected]&display=swap" rel="stylesheet"><!-- Open Graph / Facebook --><meta property="og:type" content="website"><meta property="og:url" content="https://www.bluesunrise.com/project/groundwork/"><meta property="og:title" content="Groundwork | Bluesunrise - Enterprise Software Development & AI Solutions"><meta property="og:description" content="Our team created a state of the art unified monitoring system running in Docker Compose and soon Kubernetes."><meta property="og:image" content="https://bluesunrise.com/_astro/groundwork_1.CR8Lhs4P.png"><!-- Twitter --><meta property="twitter:card" content="summary_large_image"><meta property="twitter:url" content="https://www.bluesunrise.com/project/groundwork/"><meta property="twitter:title" content="Groundwork | Bluesunrise - Enterprise Software Development & AI Solutions"><meta property="twitter:description" content="Our team created a state of the art unified monitoring system running in Docker Compose and soon Kubernetes."><meta property="twitter:image" content="https://bluesunrise.com/_astro/groundwork_1.CR8Lhs4P.png"><link rel="stylesheet" href="/_astro/_page_.XAzlI875.css"> 2<style>.blog-image[data-astro-cid-nrjrvarh]{max-width:500px;margin:0 auto} 3</style></head> <body data-theme="hermes"> <header class="fixed top-0 z-50 w-full left-0"> <div class="site-container mx-auto px-4 mt-4"> <div class="flex justify-between items-center bg-white py-4 rounded-lg px-4 border-black border"> <a href="/" class="logo uppercase font-logo transition-colors duration-200 font-light text-header-logo hover:text-primary" data-astro-cid-tvrurpns> <div class="bluesunrise-logo" data-astro-cid-tvrurpns> <img src="/_astro/logo.C33WeTwE_f8A3Y.webp" alt="Logo" data-astro-cid-tvrurpns="true" width="30" height="30" loading="lazy" decoding="async"> <span class="font-bold bluesunrise-title" data-astro-cid-tvrurpns>bluesunrise</span> </div> </a> <nav class="relative flex items-center gap-2 lg:gap-8" aria-label="Site Navigation"> <!-- Desktop Menu --> <ul class="hidden lg:flex lg:gap-8 items-center"> <li class="relative group"> <div class="flex items-center gap-1"> <a href="/blog" class="text-small font-medium rounded-md px-2 py-1 focus:outline-none focus:ring-2 focus:ring-nav-text-active text-nav-text hover:text-nav-text-hover"> Blog </a> </div> </li><li class="relative group"> <div class="flex items-center gap-1"> <a href="/project" class="text-small font-medium rounded-md px-2 py-1 focus:outline-none focus:ring-2 focus:ring-nav-text-active text-nav-text-current font-semibold" aria-current="page"> Case Studies & Projects </a> </div> </li><li class="relative group"> <div class="flex items-center gap-1"> <a href="https://www.youtube.com/@BluesunriseAI" target="_blank" class="text-small font-medium rounded-md px-2 py-1 focus:outline-none focus:ring-2 focus:ring-nav-text-active text-nav-text hover:text-nav-text-hover"> YouTube </a> </div> </li> </ul> <a href="/contact" class="group relative inline-flex overflow-hidden items-center justify-center rounded-border-small font-medium transition-all duration-300 ease-out focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 rounded-md flex items-center gap-2 bg-primary text-white hover:bg-primary-light focus-visible:ring-primary hover:ring-2 hover:ring-primary hover:ring-offset-2 h-10 px-4 py-2 text-small " aria-disabled="false"> <span class="absolute left-0 -mt-12 h-32 w-1/2 translate-x-[250%] rotate-12 bg-white opacity-20 transition-all duration-250 ease-out group-hover:translate-x-[2%]"></span> Contact Us </a> <!-- Mobile Menu Button --> <button class="mobile-menu-button relative z-30 p-2 border-none cursor-pointer bg-transparent lg:hidden" aria-label="Toggle Menu" aria-expanded="false"> <span class="menu-icon block"> <svg xmlns="http://www.w3.org/2000/svg" stroke-width="2" width="24" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" fill="none" viewBox="0 0 24 24" class="lucide lucide-menu text-body-base"> <line x1="4" x2="20" y1="12" y2="12"></line> <line x1="4" x2="20" y1="6" y2="6"></line> <line x1="4" x2="20" y1="18" y2="18"></line> </svg> </span> <span class="close-icon hidden"> <svg xmlns="http://www.w3.org/2000/svg" stroke-width="2" width="24" height="24" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" fill="none" viewBox="0 0 24 24" class="lucide lucide-x text-white"> <path d="M18 6 6 18"></path> <path d="m6 6 12 12"></path> </svg> </span> </button> <!-- Mobile Menu Panel --> <div class="mobile-menu fixed inset-0 z-20 px-8 pt-20 bg-primary lg:hidden hidden opacity-0 scale-95 transform transition-all duration-200 ease-out overflow-y-auto"> <ul class="flex flex-col gap-4"> <li> <div class="text-white"> <div class="flex items-center justify-between"> <a href="/blog" class="py-1 rounded-md focus:outline-none focus:ring-2 focus:ring-nav-mobile-text-active text-nav-mobile-text hover:text-nav-mobile-text-hover"> Blog </a> </div> </div> </li><li> <div class="text-white"> <div class="flex items-center justify-between"> <a href="/project" class="py-1 rounded-md focus:outline-none focus:ring-2 focus:ring-nav-mobile-text-active text-nav-mobile-text-current font-semibold" aria-current="page"> Case Studies & Projects </a> </div> </div> </li><li> <div class="text-white"> <div class="flex items-center justify-between"> <a class="py-1 rounded-md focus:outline-none focus:ring-2 focus:ring-nav-mobile-text-active text-nav-mobile-text hover:text-nav-mobile-text-hover"> YouTube </a> </div> </div> </li> </ul> <!-- Updated mobile CTA button styling --> <div class="mt-8 pb-8"> <a href="/contact" class="group relative inline-flex overflow-hidden items-center justify-center rounded-border-small font-medium transition-all duration-300 ease-out focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 rounded-md flex items-center gap-2 text-white ring-2 ring-white focus-visible:ring-white hover:ring-2 hover:ring-black hover:ring-offset-2 h-10 px-4 py-2 text-small " aria-disabled="false"> <span class="absolute left-0 -mt-12 h-32 w-1/2 translate-x-[250%] rotate-12 bg-white opacity-20 transition-all duration-250 ease-out group-hover:translate-x-[2%]"></span> Contact Us </a> </div> </div> </nav> </div> </div></header>
3<script type="module">const v=document.querySelectorAll(".group");v.forEach(s=>{const e=s.querySelector("a"),t=s.querySelector(".submenu"),n=t?.querySelectorAll("a");t&&e&&(s.addEventListener("mouseenter",()=>{l(t,e)}),s.addEventListener("mouseleave",()=>{i(t,e)}),e.addEventListener("keydown",c=>{c.key==="ArrowDown"&&s.children&&(c.preventDefault(),l(t,e),n?.[0]?.focus())}),e.addEventListener("focus",()=>{i(t,e)}),n?.forEach((c,a)=>{c.addEventListener("keydown",d=>{const m=n.length-1;switch(d.key){case"ArrowDown":d.preventDefault(),a<m&&n[a+1].focus();break;case"ArrowUp":d.preventDefault(),a>0?n[a-1].focus():(e.focus(),i(t,e));break;case"Escape":d.preventDefault(),i(t,e),e.focus();break;case"Tab":i(t,e);break}})}),document.addEventListener("focusin",c=>{s&&!s.contains(c.target)&&i(t,e)}))});function l(s,e){s.classList.remove("invisible","opacity-0"),s.classList.add("visible","opacity-100"),e.setAttribute("aria-expanded","true")}function i(s,e){s.classList.add("invisible","opacity-0"),s.classList.remove("visible","opacity-100"),e.setAttribute("aria-expanded","false")}document.querySelectorAll(".mobile-submenu-button").forEach(s=>{s.addEventListener("click",()=>{const e=s.parentElement?.nextElementSibling,t=s.querySelector("svg");if(e){e.classList.toggle("hidden"),t?.classList.toggle("rotate-180");const n=e.classList.contains("hidden")?"false":"true";s.setAttribute("aria-expanded",n)}})});const f=document.querySelector(".mobile-menu-button"),o=document.querySelector(".mobile-menu"),r=document.querySelector(".menu-icon"),u=document.querySelector(".close-icon");f?.addEventListener("click",()=>{o?.classList.contains("hidden")?(document.body.style.overflow="hidden",o?.classList.remove("hidden"),requestAnimationFrame(()=>{o?.classList.remove("opacity-0","scale-95"),o?.classList.add("opacity-100","scale-100")}),r?.classList.add("hidden"),u?.classList.remove("hidden")):(document.body.style.overflow="",o?.classList.add("opacity-0","scale-95"),o?.classList.remove("opacity-100","scale-100"),setTimeout(()=>{o?.classList.add("hidden")},200),r?.classList.remove("hidden"),u?.classList.add("hidden"))});</script>
3 <div class="w-full h-120 absolute top-0 left-0 z-0 overflow-hidden border-b border-black" data-astro-cid-nrjrvarh> <img src="/_astro/groundwork_1.CR8Lhs4P_1LLgIM.webp" alt="GroundWork Monitor 8, Enterprise Edition" data-astro-cid-nrjrvarh="true" width="1920" height="1080" loading="lazy" decoding="async" class="w-full h-full object-cover grayscale opacity-20"> <div class="absolute inset-0 bg-primary/10 backdrop-blur-md" data-astro-cid-nrjrvarh></div> </div> <article class="site-container--small mx-auto px-4 prose relative z-10 pb-base" data-astro-cid-nrjrvarh> <div class="mt-42 mb-12 text-center" data-astro-cid-nrjrvarh> <h1 data-astro-cid-nrjrvarh>GroundWork Monitor 8, Enterprise Edition</h1> </div> <img src="/_astro/groundwork_1.CR8Lhs4P_Z85yTf.webp" alt="GroundWork Monitor 8, Enterprise Edition" data-astro-cid-nrjrvarh="true" width="1200" height="675" loading="lazy" decoding="async" class="w-full h-auto rounded-lg border mb-12 border-black blog-image"> <div data-astro-cid-nrjrvarh> <h3 class="m-0 mt-6 mb-3" data-astro-cid-nrjrvarh>Tech Stack: </h3> <section class="relative bg-background-base"> <div class="site-container px-4 text-center"> <div class="flex flex-wrap gap-4 justify-center"> <div class="logo-wrapper flex items-center border border-black rounded-[var(--border-radius-base)] p-2" data-aos="fade-up" data-aos-delay="0"> <div class="flex items-center gap-2 filter grayscale hover:grayscale-0 opacity-75 hover:opacity-100 transition-all duration-300"> <span>Docker</span> <img src="/_astro/docker.CXELyr7r_aiJbO.svg" alt="Docker" title="Docker" width="200" height="80" loading="lazy" decoding="async" class="h-8 md:h-10 w-auto object-contain object-center"> </div> </div><div class="logo-wrapper flex items-center border border-black rounded-[var(--border-radius-base)] p-2" data-aos="fade-up" data-aos-delay="100"> <div class="flex items-center gap-2 filter grayscale hover:grayscale-0 opacity-75 hover:opacity-100 transition-all duration-300"> <span>InfluxDB</span> <img src="/_astro/influxdb.DURTOAFz_Z1Qi0zf.svg" alt="InfluxDB" title="InfluxDB" width="200" height="80" loading="lazy" decoding="async" class="h-8 md:h-10 w-auto object-contain object-center"> </div> </div><div class="logo-wrapper flex items-center border border-black rounded-[var(--border-radius-base)] p-2" data-aos="fade-up" data-aos-delay="200"> <div class="flex items-center gap-2 filter grayscale hover:grayscale-0 opacity-75 hover:opacity-100 transition-all duration-300"> <span>Kubernetes</span> <img src="/_astro/kubernetes.CW0ofpnu_ZHOkIv.svg" alt="Kubernetes" title="Kubernetes" width="200" height="80" loading="lazy" decoding="async" class="h-8 md:h-10 w-auto object-contain object-center"> </div> </div><div class="logo-wrapper flex items-center border border-black rounded-[var(--border-radius-base)] p-2" data-aos="fade-up" data-aos-delay="300"> <div class="flex items-center gap-2 filter grayscale hover:grayscale-0 opacity-75 hover:opacity-100 transition-all duration-300"> <span>APM</span> <img src="/_astro/apm.McPinWwQ_Z1WfPII.svg" alt="APM" title="APM" width="200" height="80" loading="lazy" decoding="async" class="h-8 md:h-10 w-auto object-contain object-center"> </div> </div><div class="logo-wrapper flex items-center border border-black rounded-[var(--border-radius-base)] p-2" data-aos="fade-up" data-aos-delay="400"> <div class="flex items-center gap-2 filter grayscale hover:grayscale-0 opacity-75 hover:opacity-100 transition-all duration-300"> <span>Prometheus</span> <img src="/_astro/prometheus.Rox4aTJf_Zm3o2k.svg" alt="Prometheus" title="Prometheus" width="200" height="80" loading="lazy" decoding="async" class="h-8 md:h-10 w-auto object-contain object-center"> </div> </div><div class="logo-wrapper flex items-center border border-black rounded-[var(--border-radius-base)] p-2" data-aos="fade-up" data-aos-delay="500"> <div class="flex items-center gap-2 filter grayscale hover:grayscale-0 opacity-75 hover:opacity-100 transition-all duration-300"> <span>Grafana</span> <img src="/_astro/grafana.DUmJu9ie_28Kopc.svg" alt="Grafana" title="Grafana" width="200" height="80" loading="lazy" decoding="async" class="h-8 md:h-10 w-auto object-contain object-center"> </div> </div><div class="logo-wrapper flex items-center border border-black rounded-[var(--border-radius-base)] p-2" data-aos="fade-up" data-aos-delay="600"> <div class="flex items-center gap-2 filter grayscale hover:grayscale-0 opacity-75 hover:opacity-100 transition-all duration-300"> <span>Jaeger</span> <img src="/_astro/jaeger.C7f4hRGI_Z1WiUwR.svg" alt="Jaeger" title="Jaeger" width="200" height="80" loading="lazy" decoding="async" class="h-8 md:h-10 w-auto object-contain object-center"> </div> </div><div class="logo-wrapper flex items-center border border-black rounded-[var(--border-radius-base)] p-2" data-aos="fade-up" data-aos-delay="700"> <div class="flex items-center gap-2 filter grayscale hover:grayscale-0 opacity-75 hover:opacity-100 transition-all duration-300"> <span>Logstash</span> <img src="/_astro/logstash.ClwlC4W6_Ub8Ah.svg" alt="Logstash" title="Logstash" width="200" height="80" loading="lazy" decoding="async" class="h-8 md:h-10 w-auto object-contain object-center"> </div> </div><div class="logo-wrapper flex items-center border border-black rounded-[var(--border-radius-base)] p-2" data-aos="fade-up" data-aos-delay="800"> <div class="flex items-center gap-2 filter grayscale hover:grayscale-0 opacity-75 hover:opacity-100 transition-all duration-300"> <span>Open Telemetry</span> <img src="/_astro/opentelemetry.DtmcW3Zb_ZQf1GB.svg" alt="Open Telemetry" title="Open Telemetry" width="200" height="80" loading="lazy" decoding="async" class="h-8 md:h-10 w-auto object-contain object-center"> </div> </div><div class="logo-wrapper flex items-center border border-black rounded-[var(--border-radius-base)] p-2" data-aos="fade-up" data-aos-delay="900"> <div class="flex items-center gap-2 filter grayscale hover:grayscale-0 opacity-75 hover:opacity-100 transition-all duration-300"> <span>Nagios</span> <img src="/_astro/nagios.D6lE6UA5_kdVT0.svg" alt="Nagios" title="Nagios" width="200" height="80" loading="lazy" decoding="async" class="h-8 md:h-10 w-auto object-contain object-center"> </div> </div><div class="logo-wrapper flex items-center border border-black rounded-[var(--border-radius-base)] p-2" data-aos="fade-up" data-aos-delay="1000"> <div class="flex items-center gap-2 filter grayscale hover:grayscale-0 opacity-75 hover:opacity-100 transition-all duration-300"> <span>Elastic Search</span> <img src="/_astro/elastic.JQAg-LuF_3v3K5.svg" alt="Elastic Search" title="Elastic Search" width="200" height="80" loading="lazy" decoding="async" class="h-8 md:h-10 w-auto object-contain object-center"> </div> </div><div class="logo-wrapper flex items-center border border-black rounded-[var(--border-radius-base)] p-2" data-aos="fade-up" data-aos-delay="1100"> <div class="flex items-center gap-2 filter grayscale hover:grayscale-0 opacity-75 hover:opacity-100 transition-all duration-300"> <span>Nodejs</span> <img src="/_astro/nodejs.BpqCeu0T_XiQ4A.svg" alt="Nodejs" title="Nodejs" width="200" height="80" loading="lazy" decoding="async" class="h-8 md:h-10 w-auto object-contain object-center"> </div> </div><div class="logo-wrapper flex items-center border border-black rounded-[var(--border-radius-base)] p-2" data-aos="fade-up" data-aos-delay="1200"> <div class="flex items-center gap-2 filter grayscale hover:grayscale-0 opacity-75 hover:opacity-100 transition-all duration-300"> <span>Go</span> <img src="/_astro/go.CPdnxH1I_ZNlTtX.svg" alt="Go" title="Go" width="200" height="80" loading="lazy" decoding="async" class="h-8 md:h-10 w-auto object-contain object-center"> </div> </div><div class="logo-wrapper flex items-center border border-black rounded-[var(--border-radius-base)] p-2" data-aos="fade-up" data-aos-delay="1300"> <div class="flex items-center gap-2 filter grayscale hover:grayscale-0 opacity-75 hover:opacity-100 transition-all duration-300"> <span>Nginx</span> <img src="/_astro/nginx.X2CLU2Ex_EUg8X.svg" alt="Nginx" title="Nginx" width="200" height="80" loading="lazy" decoding="async" class="h-8 md:h-10 w-auto object-contain object-center"> </div> </div><div class="logo-wrapper flex items-center border border-black rounded-[var(--border-radius-base)] p-2" data-aos="fade-up" data-aos-delay="1400"> <div class="flex items-center gap-2 filter grayscale hover:grayscale-0 opacity-75 hover:opacity-100 transition-all duration-300"> <span>Bootstrap</span> <img src="/_astro/bootstrap.BhWie9MO_Z1WefRv.svg" alt="Bootstrap" title="Bootstrap" width="200" height="80" loading="lazy" decoding="async" class="h-8 md:h-10 w-auto object-contain object-center"> </div> </div><div class="logo-wrapper flex items-center border border-black rounded-[var(--border-radius-base)] p-2" data-aos="fade-up" data-aos-delay="1500"> <div class="flex items-center gap-2 filter grayscale hover:grayscale-0 opacity-75 hover:opacity-100 transition-all duration-300"> <span>Angular</span> <img src="/_astro/angular.DgrutDQs_TivOQ.svg" alt="Angular" title="Angular" width="200" height="80" loading="lazy" decoding="async" class="h-8 md:h-10 w-auto object-contain object-center"> </div> </div><div class="logo-wrapper flex items-center border border-black rounded-[var(--border-radius-base)] p-2" data-aos="fade-up" data-aos-delay="1600"> <div class="flex items-center gap-2 filter grayscale hover:grayscale-0 opacity-75 hover:opacity-100 transition-all duration-300"> <span>Kafka</span> <img src="/_astro/kafka.dfrB81X9_Z1lS5ol.svg" alt="Kafka" title="Kafka" width="200" height="80" loading="lazy" decoding="async" class="h-8 md:h-10 w-auto object-contain object-center"> </div> </div><div class="logo-wrapper flex items-center border border-black rounded-[var(--border-radius-base)] p-2" data-aos="fade-up" data-aos-delay="1700"> <div class="flex items-center gap-2 filter grayscale hover:grayscale-0 opacity-75 hover:opacity-100 transition-all duration-300"> <span>TS</span> <img src="/_astro/ts.N8YVENTS_Z1hnsjO.svg" alt="TS" title="TS" width="200" height="80" loading="lazy" decoding="async" class="h-8 md:h-10 w-auto object-contain object-center"> </div> </div><div class="logo-wrapper flex items-center border border-black rounded-[var(--border-radius-base)] p-2" data-aos="fade-up" data-aos-delay="1800"> <div class="flex items-center gap-2 filter grayscale hover:grayscale-0 opacity-75 hover:opacity-100 transition-all duration-300"> <span>Postgres</span> <img src="/_astro/postgres.QUQl7G09_85mvh.svg" alt="Postgres" title="Postgres" width="200" height="80" loading="lazy" decoding="async" class="h-8 md:h-10 w-auto object-contain object-center"> </div> </div> </div> </div> </section> </div> <div class="mt-8" data-astro-cid-nrjrvarh> <h2 id="-groundwork-monitor-8-a-scalable-unified-monitoring-system">ð¯ Groundwork Monitor 8â¢: A Scalable Unified Monitoring System</h2> 4<p>
4Our customer, <strong>Diamanti</strong> hired the Bluesunrise team to create the latest versions of the <strong>Groundwork Monitor 8</strong>. 5GroundWork Monitor 8, Enterprise Edition, is a powerful IT monitoring software for physical, virtual, and cloud-based infrastructures. GroundWork can monitor your entire IT environment. âIf you use it, we can monitor it.â</p> 6<h2 id="-about-the-client-diamantis-groundwork-enterprise-monitor">ð§© About the Client: <a href="https://diamanti.com/groundwork-monitor/">Diamantiâs Groundwork Enterprise Monitor</a></h2> 7<p><a href="https://diamanti.com/">Diamanti</a> is a well known Kubernetes innovator who has specialized in improving performance of Kubernetes networks and storage devices. The Groundwork Monitor is an addition to their suite of Kubernetes products. We were hired to modernize the Groundwork product stack, make it scalable, and increase performance. Groundwork has its origins in open source, known as the Groundwork Open Source monitor. It integrated various open source products such as Nagios and NeDI in a loosely couple but heavy and hard to manage system (tech debt) based on aging Perl monitoring checks in Nagios.</p> 8<p>With the new architecture, we introduced a new containerized stack, based on Docker Compose. We are also working on running Groundwork 9, a new version of Groundwork Monitor, in Kubernetes. That is the subject of another blog. Lets first look at what we did for Groundwork 8:</p> 9<ul> 10<li> 11<p>Docker compose containers for each subsystem and integrated open source integrated product</p> 12</li> 13<li> 14<p>Complete redesign and rewrite of the heavy user interface, replacing with a API driven light weight UI app</p> 15</li> 16<li> 17<p>Scalability through the new Groundwork Messenger for Real Time Eventing</p> 18</li> 19<li> 20<p>TCG Transport, a new fast monitoring data transport for integration with standards like Prometheus and Open Telemetry</p> 21</li> 22<li> 23<p>New UI Components including NOC Boards, Event Viewer, SLA Dashboard and Configurable Menus and Dashboards</p> 24</li> 25<li> 26<p>Strong RBAC Security System across all components and integrations</p> 27</li> 28<li> 29<p>Integration with industry leading monitoring tools such as</p> 30<ul> 31<li>InfluxDB</li> 32<li>Grafana</li> 33<li>Prometheus</li> 34<li>Kibana</li> 35<li>Jaeger</li> 36<li>Logstash</li> 37<li>CAdvisor</li> 38<li>Open Telemetry</li> 39<li>Elastic Search</li> 40<li>Elastic Beats</li> 41</ul> 42</li> 43<li> 44<p>Continued and improved Integration of legacy monitoring tools</p> 45<ul> 46<li>Nagios</li> 47<li>Nedi</li> 48</ul> 49<div style="display: flex; gap: 1rem; flex-wrap: wrap; margin-top: 1rem;"> 50 <img src="/images/groundwork/architecture-3.png" alt="Groundwork Architecture"> 51</div> 52<h2 id="application-performance-monitoring">Application Performance Monitoring</h2> 53<p>At Bluesunrise, we are strong believers in standards. Here is a diagram of how our new pipeline (NATS queue) architecture, which queues Metrics and Inventory from the new connector component. This monitoring data wonât be removed from the queue until they are delivered to GroundWork Monitor. Once they are received by GroundWork Monitor, they are immediately made available to the GroundWork Monitor dashboards, Global Top Problems as well as other visualization applications that we integrated like Grafana, Kibana and Jaeger. All of these visualization UIs are packaged with GroundWork Monitor 8 out-of-the-box.</p> 54<div style="display: flex; gap: 1rem; flex-wrap: wrap; margin-top: 1rem;"> 55 <img src="/images/groundwork/architecture-2.png" alt="Groundwork Architecture"> 56 <img src="/images/groundwork/architecture-1.png" alt="Groundwork Architecture"> 57</div> 58</li> 59</ul> 60<p>Here are examples of the User Interface work we did for our customer:</p> 61 <div style="display: flex; gap: 1rem; flex-wrap: wrap; margin-top: 1rem;"> 62 <img src="/images/groundwork/home.jpg" alt="Home and SLA"> 63 <img src="/images/groundwork/cpu.jpg" alt="CPU Metrics"> 64 <img src="/images/groundwork/finance-service.png" alt="Finance APM Service"> 65 <img src="/images/groundwork/apm-status.png" alt="Status View"> 66 <img src="/images/groundwork/event.jpg" alt="Events"> 67 <img src="/images/groundwork/events.png" alt="Events"> 68 <img src="/images/groundwork/trouble.png" alt="Trouble"> 69 <img src="/images/groundwork/grafana.png" alt="Grafana"> 70 </div> </div> </article> <footer class="bg-black text-white pb-2 pt-2 "> <div class="site-container mx-auto px-4"> <div class=""> <div class="flex gap-4"> <a href="/" class="logo uppercase font-logo transition-colors duration-200 font-light text-footer-logo hover:text-primary" data-astro-cid-tvrurpns> <div class="bluesunrise-logo" data-astro-cid-tvrurpns> <img src="/_astro/logo.C33WeTwE_f8A3Y.webp" alt="Logo" data-astro-cid-tvrurpns="true" width="30" height="30" loading="lazy" decoding="async"> <span class="font-bold bluesunrise-title" data-astro-cid-tvrurpns>bluesunrise</span> </div> </a> 71© 2025 </div> </div> </div> </footer> <div id="toastContainer" class="toast-container"></div>
71<script type="module">document.addEventListener("DOMContentLoaded",()=>{window.addEventListener("toast:show",e=>{const{message:n,type:o}=e.detail,s=document.getElementById("toastContainer"),t=document.createElement("div");t.className=`toast ${o} show`,t.textContent=n,s.appendChild(t),setTimeout(()=>{t.classList.add("hide"),setTimeout(()=>{t.remove()},300)},3e3)})});</script>
71
71<script type="module">window.dataLayer=window.dataLayer||[];function a(){dataLayer.push(arguments)}a("js",new Date);a("config","G-EL3982RBS8");</script>
71 <!--
71<script src="https://app.fastbots.ai/embed.js" data-bot-id="cm9lhlq6s0984s5k50j1sckj5" defer></script>
71-->
vendor: 77 bytes, line 71
71 <script src="https://www.google.com/recaptcha/api.js" async defer></script>
71<!--Bluesunrise Bot Script-->
71<script src="https://bot-builder.bluesunriseai.com/client/client.js" async data-bot-id="17"> 72 </script>
72 </body> </html>
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.