<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
    <id>https://opencost.io/blog</id>
    <title>OpenCost — open source cost monitoring for cloud native environments Blog</title>
    <updated>2026-02-23T00:00:00.000Z</updated>
    <generator>https://github.com/jpmonette/feed</generator>
    <link rel="alternate" href="https://opencost.io/blog"/>
    <subtitle>OpenCost — open source cost monitoring for cloud native environments Blog</subtitle>
    <icon>https://opencost.io/img/favicon.ico</icon>
    <entry>
        <title type="html"><![CDATA[New OpenCost community meeting schedule – join from any time zone]]></title>
        <id>https://opencost.io/blog/opencost-community-meeting-schedule</id>
        <link href="https://opencost.io/blog/opencost-community-meeting-schedule"/>
        <updated>2026-02-23T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[On March 5, 2026, we’re updating the OpenCost community meeting schedule so that contributors and users in the Americas, Europe/Middle East/Asia (EMEA) , and Asia-Pacific (APAC) can all join at a reasonable time. Here’s what’s changing and how to join.]]></summary>
        <content type="html"><![CDATA[<p>On March 5, 2026, we’re updating the OpenCost community meeting schedule so that contributors and users in the Americas, Europe/Middle East/Asia (EMEA) , and Asia-Pacific (APAC) can all join at a reasonable time. Here’s what’s changing and how to join.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="meeting-schedule">Meeting schedule<a href="https://opencost.io/blog/opencost-community-meeting-schedule#meeting-schedule" class="hash-link" aria-label="Direct link to Meeting schedule" title="Direct link to Meeting schedule" translate="no">​</a></h2>
<p><strong>Every 2nd Thursday at 10:00 AM EST</strong>, we hold an OpenCost community meeting. To support collaboration across time zones, <strong>starting March 5, 2026 we will alternate between two sessions each month:</strong></p>
<ul>
<li class=""><strong>One EMEA/APAC-focused meeting</strong> at 10:00 AM EST (15:00 UTC) (best for Europe, Middle East, Africa, and Asia-Pacific): <strong>This meeting will be held March 5, and every 4 weeks after that</strong></li>
<li class=""><strong>One Americas-focused meeting</strong> at 4:00 PM EST (21:00 UTC) (best for Americas):  <strong>This meeting will be held March 19, and every 4 weeks after that</strong></li>
</ul>
<p>So each month there will be one meeting optimized for NA and one for EMEA/APAC, making it easier to attend from your region.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="how-to-join">How to join<a href="https://opencost.io/blog/opencost-community-meeting-schedule#how-to-join" class="hash-link" aria-label="Direct link to How to join" title="Direct link to How to join" translate="no">​</a></h2>
<ul>
<li class="">
<p><strong>View Both Meetings on the Public Calendar (Self-Service)</strong><br>
<!-- -->View the full schedule with both meetings, and add meetings to your own calendar:<br>
<a href="https://zoom-lfx.platform.linuxfoundation.org/meetings/opencost?view=week" target="_blank" rel="noopener noreferrer" class="">OpenCost meetings – week view</a></p>
</li>
<li class="">
<p><strong>Americas Meeting</strong><br>
<!-- -->Direct join link for the EMEA/APAC session:<br>
<a href="https://zoom-lfx.platform.linuxfoundation.org/meeting/91331355925?password=c9dad982-c1e1-4c4c-955e-2365c6ca6517" target="_blank" rel="noopener noreferrer" class="">Join the Americas OpenCost Community Meeting</a></p>
</li>
<li class="">
<p><strong>EMEA/APAC Meeting</strong><br>
<!-- -->Direct join link for the EMEA/APAC session:<br>
<a href="https://zoom-lfx.platform.linuxfoundation.org/meeting/98789622091?password=52d3c6b4-54c9-48f2-83cd-eed20c7a39df" target="_blank" rel="noopener noreferrer" class="">Join the EMEA/APAC OpenCost Community Meeting</a></p>
</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="why-are-we-splitting-the-meetings">Why are we splitting the meetings?<a href="https://opencost.io/blog/opencost-community-meeting-schedule#why-are-we-splitting-the-meetings" class="hash-link" aria-label="Direct link to Why are we splitting the meetings?" title="Direct link to Why are we splitting the meetings?" translate="no">​</a></h2>
<p>OpenCost is used and contributed to from many regions. Holding one NA and one EMEA/APAC meeting per month gives each region a slot that’s more workable locally, so more people can join, share feedback, and collaborate without staying up late or getting up very early.</p>
<p>We hope to see you in an upcoming meeting. For more ways to connect, see the <a class="" href="https://opencost.io/community">Community</a> page.</p>]]></content>
        <author>
            <name>Alex Meijer</name>
            <uri>https://github.com/ameijer</uri>
        </author>
        <category label="opencost" term="opencost"/>
        <category label="community" term="community"/>
        <category label="meetings" term="meetings"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[OpenCost – a look back at 2025 and into the new year]]></title>
        <id>https://opencost.io/blog/opencost-2025-year-in-review</id>
        <link href="https://opencost.io/blog/opencost-2025-year-in-review"/>
        <updated>2025-12-17T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[The OpenCost project has had a fruitful year in terms of releases, our wonderful mentees and contributors, and fun gatherings at KubeCons.]]></summary>
        <content type="html"><![CDATA[<p>The OpenCost project has had a fruitful year in terms of releases, our wonderful mentees and contributors, and fun gatherings at KubeCons.</p>
<p><img decoding="async" loading="lazy" alt="opencost-2025" src="https://opencost.io/assets/images/OpenCost_Blog_Header_12172025-bcabe116bbc379b906ce119de5c151c1.png" title="OpenCost 2025" width="1200" height="630" class="img_ev3q"></p>
<p>If you’re new to OpenCost, it is an open-source cost and resources management tool that is an Incubating project in the Cloud Native Computing Foundation (CNCF). It was created by IBM Kubecost and continues to be maintained and supported by IBM Kubecost, Randoli, and a wider community of partners, including the major cloud providers. Aside from AWS, Microsoft, and Google, who have been contributing companies since OpenCost’s inception, we’ll also call out Oracle and DigitalOcean below. If you have further questions, you can find us on Slack or at the regular <a href="https://opencost.io/docs/community" target="_blank" rel="noopener noreferrer" class="">OpenCost meetings</a>.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="opencost-releases">OpenCost Releases<a href="https://opencost.io/blog/opencost-2025-year-in-review#opencost-releases" class="hash-link" aria-label="Direct link to OpenCost Releases" title="Direct link to OpenCost Releases" translate="no">​</a></h2>
<p>The OpenCost project has had <a href="https://github.com/opencost/opencost/releases" target="_blank" rel="noopener noreferrer" class="">11 releases in 2025</a>. These include new features and capabilities that improve the experience for both users and contributors. Here are a few highlights:</p>
<ul>
<li class=""><strong><a href="https://github.com/opencost/opencost/pull/3166" target="_blank" rel="noopener noreferrer" class="">Promless:</a></strong> OpenCost can be configured to run without Prometheus, using environment variables which can be set using helm. Users will be able to run OpenCost using the Collector Datasource (beta) which can be run without Prometheus.</li>
<li class=""><strong>OpenCost MCP server:</strong> AI agents can now query cost data in real-time using natural language. They can analyze spending patterns across namespaces, pods, and nodes, generate cost reports and recommendations automatically, and provide other insights from OpenCost data.</li>
<li class=""><strong>Export System:</strong> The project now has a generic Export Framework to make it possible to export cost data in a type-safe way.</li>
<li class=""><strong>Diagnostics System:</strong> OpenCost has a complete diagnostic framework with an interface, runners, and export capabilities.</li>
<li class=""><strong>Heartbeat System:</strong> You can do system health tracking with timestamped heartbeat events for export and more.</li>
<li class=""><strong>Cloud providers:</strong> There are continued improvements for users to track cloud and multi-cloud metrics. We appreciate contributions from Oracle (including providing hosting for the demo at <a href="http://demo.infra.opencost.io/" target="_blank" rel="noopener noreferrer" class="">demo.infra.opencost.io</a>) and DigitalOcean (for recent cloud services provider work).</li>
</ul>
<p>Thanks to our maintainers and contributors who make these releases possible and successful, including our mentees and community contributors as well.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="mentorship-and-community-management">Mentorship and Community management<a href="https://opencost.io/blog/opencost-2025-year-in-review#mentorship-and-community-management" class="hash-link" aria-label="Direct link to Mentorship and Community management" title="Direct link to Mentorship and Community management" translate="no">​</a></h2>
<p>Our project has been committed to mentorship through the Linux Foundation for a while, and we continue to have fantastic mentees who bring innovation and support to the community.</p>
<ul>
<li class="">
<p><strong>Manas Sivakumar</strong> was a summer 2025 mentee and worked on writing Integration tests for OpenCost’s Enterprise readiness. Manas’ work is now part of the OpenCost Integration Testing Pipeline for all future contributions. Manas has been voted in as a Maintainer of the OpenCost Integration Tests sub project!</p>
</li>
<li class="">
<p><strong>Adesh Pal</strong> also menteed with us and made a big splash with the <a class="" href="https://opencost.io/blog/opencost-mcp-server">OpenCost MCP server</a>. The MCP server is powerful because it now comes by default and needs no configuration. It outputs easily readable markdown on your metrics as well as step-by-step suggestions to make improvements.</p>
</li>
<li class="">
<p><strong>Sparsh Raj</strong> has been in our community for a while and has become our most recent mentee. Sparsh has come out already with a blog post on <a class="" href="https://opencost.io/blog/introducing-kubemodel">KubeModel</a>, the foundation of OpenCost's Data Model 2.0. Sparsh’s work will meet the needs for a robust and scalable data model that can handle Kubernetes complexity and constantly shifting resources.</p>
</li>
<li class="">
<p>On the community side, Tamao Nakahara was brought in to the IBM Kubecost team for a few months of open source and Developer Experience expertise. Tamao helped organize the regular OpenCost community meetings, leading actions around events, the website, and docs. On the website, Tamao improved the UX for new and returning users, and brought in Ginger Walker to help clean up the docs.</p>
</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="events-and-talks">Events and talks<a href="https://opencost.io/blog/opencost-2025-year-in-review#events-and-talks" class="hash-link" aria-label="Direct link to Events and talks" title="Direct link to Events and talks" translate="no">​</a></h2>
<p>As a CNCF incubating project, OpenCost participated in the key KubeCon events. Most recently, the team was at KubeCon Atlanta 2025, where maintainer Matt Bolt from IBM Kubecost kicked off the week with a Project lightning talk. During a co-located event that day, Rajith Attapattu, CTO of contributing company Randoli, also gave a talk on OpenCost. Dee Zeis, Rajith, and Tamao also answered questions at the OpenCost kiosk in the Project Pavilion.</p>
<p>Earlier in the year, the team was also at KubeCon London 2025 and KubeCon Japan 2025 giving talks and running the OpenCost kiosks.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="2026">2026!<a href="https://opencost.io/blog/opencost-2025-year-in-review#2026" class="hash-link" aria-label="Direct link to 2026!" title="Direct link to 2026!" translate="no">​</a></h2>
<p>What’s in store for OpenCost in the coming year? Aside from meeting all of you at future KubeCons, we’re also excited about a few roadmap highlights. As mentioned, our LFX mentee Sparsh is working on KubeModel, which will be important for improvements to OpenCost’s data model. As AI continues to increase in adoption, the team is also working on building out costing features to track AI usage. Finally, supply chain security improvements are a priority.</p>
<p>We’re looking forward to seeing more of you in the community in the next year!</p>]]></content>
        <author>
            <name>Tamao Nakahara</name>
            <uri>https://github.com/mewzherder</uri>
        </author>
        <category label="opencost" term="opencost"/>
        <category label="MCP" term="MCP"/>
        <category label="AI" term="AI"/>
        <category label="cost management" term="cost management"/>
        <category label="Kubernetes" term="Kubernetes"/>
        <category label="mentorship" term="mentorship"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Introducing KubeModel: OpenCost's Next-Generation Data Model]]></title>
        <id>https://opencost.io/blog/introducing-kubemodel</id>
        <link href="https://opencost.io/blog/introducing-kubemodel"/>
        <updated>2025-12-09T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[This project was initiated as part of the LFX Fall 2025 mentorship program at OpenCost and development is ongoing.]]></summary>
        <content type="html"><![CDATA[<p><em>This project was initiated as part of the LFX Fall 2025 mentorship program at OpenCost and development is ongoing.</em></p>
<p>OpenCost is evolving. As Kubernetes environments grow in complexity with pods being recreated, names being reused, and resources constantly shifting, the need for a more robust, scalable data model has become clear. Today, we're excited to introduce <strong>KubeModel</strong>, the foundation of OpenCost's Data Model 2.0, designed to bring precision, efficiency, and reliability to Kubernetes cost tracking.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="the-challenge-tracking-resources-in-a-dynamic-environment">The Challenge: Tracking Resources in a Dynamic Environment<a href="https://opencost.io/blog/introducing-kubemodel#the-challenge-tracking-resources-in-a-dynamic-environment" class="hash-link" aria-label="Direct link to The Challenge: Tracking Resources in a Dynamic Environment" title="Direct link to The Challenge: Tracking Resources in a Dynamic Environment" translate="no">​</a></h2>
<p>Kubernetes is inherently dynamic. Pods come and go, deployments scale up and down, and resource names can be reused across recreation cycles. Traditional metric tracking that relies solely on resource names struggles in this environment for a number of reasons including:</p>
<ul>
<li class=""><strong>Name reuse</strong>: When a pod is recreated with the same name, historical cost data can become ambiguous. This is particularly problematic in stateful set pods.</li>
<li class=""><strong>Resource correlation</strong>: Linking metrics across different time windows becomes unreliable.</li>
<li class=""><strong>Debugging complexity</strong>: Without stable identifiers, tracing cost anomalies back to specific resource instances is challenging.</li>
</ul>
<p>KubeModel addresses these challenges head-on with a comprehensive approach to resource identification and tracking.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="what-is-kubemodel">What is KubeModel?<a href="https://opencost.io/blog/introducing-kubemodel#what-is-kubemodel" class="hash-link" aria-label="Direct link to What is KubeModel?" title="Direct link to What is KubeModel?" translate="no">​</a></h2>
<p>KubeModel is a new data model for Kubernetes resource tracking in OpenCost. It introduces a <strong>flat architecture</strong> with core resource types that mirror Kubernetes primitives:</p>
<ul>
<li class=""><strong>Cluster</strong> - The top-level container</li>
<li class=""><strong>Namespace</strong> - Logical resource groupings</li>
<li class=""><strong>Node</strong> - Compute instances with CPU, RAM, and GPU details</li>
<li class=""><strong>Pod</strong> - The fundamental deployment unit</li>
<li class=""><strong>Container</strong> - Individual workload containers</li>
<li class=""><strong>Owner/Controller</strong> - Deployments, StatefulSets, ReplicaSets, DaemonSets, Jobs</li>
<li class=""><strong>Service</strong> - Network service abstractions</li>
<li class=""><strong>Volume &amp; PVC</strong> - Persistent storage resources</li>
<li class=""><strong>ResourceQuota</strong> - Namespace resource limits and requests</li>
<li class=""><strong>KubeModelSet</strong> - A collection of KubeModel resources for a specific time window</li>
<li class=""><strong>GPU</strong> - GPU resource tracking <em>(Coming soon)</em></li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="flat-architecture-for-performance">Flat Architecture for Performance<a href="https://opencost.io/blog/introducing-kubemodel#flat-architecture-for-performance" class="hash-link" aria-label="Direct link to Flat Architecture for Performance" title="Direct link to Flat Architecture for Performance" translate="no">​</a></h3>
<p>Unlike nested hierarchies, KubeModel maintains a <strong>flat map-based structure</strong> enabling O(1) lookups while preserving resource relationships through UIDs and references. This design choice prioritizes:</p>
<ul>
<li class=""><strong>Fast access</strong>: Constant-time lookups regardless of cluster size.</li>
<li class=""><strong>Clean relationships</strong>: Resources reference each other via stable identifiers.</li>
<li class=""><strong>Efficient serialization</strong>: The flat structure translates well to binary formats.</li>
<li class=""><strong>Use case agnostic</strong>: Flexible design supports diverse consumption patterns and applications.</li>
</ul>
<p>Here's the core KubeModelSet structure that holds all resources for a time window:</p>
<p><code>core/pkg/model/kubemodel/kubemodel.go</code></p>
<div class="language-go codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-go codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token keyword" style="color:#00009f">type</span><span class="token plain"> KubeModelSet </span><span class="token keyword" style="color:#00009f">struct</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">	Metadata   </span><span class="token operator" style="color:#393A34">*</span><span class="token plain">Metadata              </span><span class="token string" style="color:#e3116c">`json:"meta"`</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">	Window     Window                 </span><span class="token string" style="color:#e3116c">`json:"window"`</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">	Cluster    </span><span class="token operator" style="color:#393A34">*</span><span class="token plain">Cluster               </span><span class="token string" style="color:#e3116c">`json:"cluster"`</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">	Namespaces </span><span class="token keyword" style="color:#00009f">map</span><span class="token punctuation" style="color:#393A34">[</span><span class="token builtin">string</span><span class="token punctuation" style="color:#393A34">]</span><span class="token operator" style="color:#393A34">*</span><span class="token plain">Namespace  </span><span class="token string" style="color:#e3116c">`json:"namespaces"`</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">	Containers </span><span class="token keyword" style="color:#00009f">map</span><span class="token punctuation" style="color:#393A34">[</span><span class="token builtin">string</span><span class="token punctuation" style="color:#393A34">]</span><span class="token operator" style="color:#393A34">*</span><span class="token plain">Container  </span><span class="token string" style="color:#e3116c">`json:"containers,omitempty"`</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">	Owners     </span><span class="token keyword" style="color:#00009f">map</span><span class="token punctuation" style="color:#393A34">[</span><span class="token builtin">string</span><span class="token punctuation" style="color:#393A34">]</span><span class="token operator" style="color:#393A34">*</span><span class="token plain">Owner      </span><span class="token string" style="color:#e3116c">`json:"owners,omitempty"`</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">	Nodes      </span><span class="token keyword" style="color:#00009f">map</span><span class="token punctuation" style="color:#393A34">[</span><span class="token builtin">string</span><span class="token punctuation" style="color:#393A34">]</span><span class="token operator" style="color:#393A34">*</span><span class="token plain">Node       </span><span class="token string" style="color:#e3116c">`json:"nodes,omitempty"`</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">	Pods       </span><span class="token keyword" style="color:#00009f">map</span><span class="token punctuation" style="color:#393A34">[</span><span class="token builtin">string</span><span class="token punctuation" style="color:#393A34">]</span><span class="token operator" style="color:#393A34">*</span><span class="token plain">Pod        </span><span class="token string" style="color:#e3116c">`json:"pods,omitempty"`</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">	Services   </span><span class="token keyword" style="color:#00009f">map</span><span class="token punctuation" style="color:#393A34">[</span><span class="token builtin">string</span><span class="token punctuation" style="color:#393A34">]</span><span class="token operator" style="color:#393A34">*</span><span class="token plain">Service    </span><span class="token string" style="color:#e3116c">`json:"services,omitempty"`</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><br></div></code></pre></div></div>
<p>Each resource type is stored in a flat map keyed by UID, enabling O(1) lookups while maintaining relationships through UID references between resources.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="uid-support-the-heart-of-data-model-20">UID Support: The Heart of Data Model 2.0<a href="https://opencost.io/blog/introducing-kubemodel#uid-support-the-heart-of-data-model-20" class="hash-link" aria-label="Direct link to UID Support: The Heart of Data Model 2.0" title="Direct link to UID Support: The Heart of Data Model 2.0" translate="no">​</a></h2>
<p>The cornerstone of KubeModel is comprehensive <strong>UID (Unique Identifier) support</strong> across all Kubernetes resources. Every resource in Kubernetes has a UID - a stable, unique identifier that persists for the lifetime of that specific resource instance.</p>
<p><img decoding="async" loading="lazy" alt="UID Tracking Metrics" src="https://opencost.io/assets/images/uid_tracking_metrics-203050425eff6433290f2d55cfd2ad32.jpg" width="2178" height="993" class="img_ev3q">
<em>Figure 1: Prometheus metrics showing UID labels for precise resource identification across queries.</em></p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="enhanced-metric-tracking">Enhanced Metric Tracking<a href="https://opencost.io/blog/introducing-kubemodel#enhanced-metric-tracking" class="hash-link" aria-label="Direct link to Enhanced Metric Tracking" title="Direct link to Enhanced Metric Tracking" translate="no">​</a></h3>
<p>With UID support integrated into OpenCost's metrics, we now have:</p>
<ul>
<li class=""><strong>Stable resource identification</strong> across queries, even when names are reused.</li>
<li class=""><strong>Improved cost attribution</strong> to specific resource instances rather than just names.</li>
<li class=""><strong>Better multi-cluster support</strong> by preventing resource name conflicts.</li>
<li class=""><strong>Enhanced debugging</strong> through stable identifiers throughout the resource lifecycle.</li>
</ul>
<p>Here's an example of how we track node CPU capacity with UID support:</p>
<p><code>pkg/metrics/nodemetrics.go</code></p>
<div class="language-go codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-go codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token keyword" style="color:#00009f">type</span><span class="token plain"> KubeNodeStatusCapacityCPUCoresMetric </span><span class="token keyword" style="color:#00009f">struct</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">	fqName </span><span class="token builtin">string</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">	help   </span><span class="token builtin">string</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">	cores  </span><span class="token builtin">float64</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">	node   </span><span class="token builtin">string</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">	uid    </span><span class="token builtin">string</span><span class="token plain">  </span><span class="token comment" style="color:#999988;font-style:italic">// &lt;-- UID field for unique resource identification</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword" style="color:#00009f">func</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">newKubeNodeStatusCapacityCPUCoresMetric</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">fqname </span><span class="token builtin">string</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> node </span><span class="token builtin">string</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> uid </span><span class="token builtin">string</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> cores </span><span class="token builtin">float64</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> KubeNodeStatusCapacityCPUCoresMetric </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">	</span><span class="token keyword" style="color:#00009f">return</span><span class="token plain"> KubeNodeStatusCapacityCPUCoresMetric</span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">		fqName</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> fqname</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">		help</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain">   </span><span class="token string" style="color:#e3116c">"kube_node_status_capacity_cpu_cores Node Capacity CPU Cores"</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">		cores</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain">  cores</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">		node</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain">   node</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">		uid</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain">    uid</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">	</span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword" style="color:#00009f">func</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">nam KubeNodeStatusCapacityCPUCoresMetric</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">Write</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">m </span><span class="token operator" style="color:#393A34">*</span><span class="token plain">dto</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">Metric</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token builtin">error</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">	m</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">Gauge </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">&amp;</span><span class="token plain">dto</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">Gauge</span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">		Value</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">&amp;</span><span class="token plain">nam</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">cores</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">	</span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">	m</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">Label </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">[</span><span class="token punctuation" style="color:#393A34">]</span><span class="token operator" style="color:#393A34">*</span><span class="token plain">dto</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">LabelPair</span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">		</span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">			Name</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain">  </span><span class="token function" style="color:#d73a49">toStringPtr</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">"node"</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">			Value</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">&amp;</span><span class="token plain">nam</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">node</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">		</span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">		</span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">			Name</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain">  </span><span class="token function" style="color:#d73a49">toStringPtr</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">"uid"</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">			Value</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">&amp;</span><span class="token plain">nam</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">uid</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">		</span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">	</span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">	</span><span class="token keyword" style="color:#00009f">return</span><span class="token plain"> </span><span class="token boolean" style="color:#36acaa">nil</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><br></div></code></pre></div></div>
<p>The <code>uid</code> field is now a first-class citizen in every metric struct. The <code>Write</code> method serializes it as a Prometheus label, ensuring every emitted metric carries its resource's unique identifier for precise tracking.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="implementation-scope">Implementation Scope<a href="https://opencost.io/blog/introducing-kubemodel#implementation-scope" class="hash-link" aria-label="Direct link to Implementation Scope" title="Direct link to Implementation Scope" translate="no">​</a></h3>
<p>The UID implementation spans the entire OpenCost stack:</p>
<ul>
<li class=""><strong>61+ metric result types</strong> enhanced with UID fields</li>
<li class=""><strong>30+ Prometheus queries</strong> updated to include UID in aggregation</li>
<li class=""><strong>9 resource types</strong> with comprehensive UID validation</li>
<li class=""><strong>31 metrics</strong> covered by integration tests</li>
</ul>
<p>Resources enhanced include Pods, Deployments, StatefulSets, Services, Namespaces, Nodes, PersistentVolumes, PersistentVolumeClaims, Jobs, and ReplicaSets.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="binary-serialization-with-bingen">Binary Serialization with Bingen<a href="https://opencost.io/blog/introducing-kubemodel#binary-serialization-with-bingen" class="hash-link" aria-label="Direct link to Binary Serialization with Bingen" title="Direct link to Binary Serialization with Bingen" translate="no">​</a></h2>
<p>KubeModel introduces <strong>bingen-annotated Go structs</strong> enabling efficient binary serialization. Bingen is OpenCost specific tooling for generating binary serialization code from annotated Go structs. This provides:</p>
<ul>
<li class=""><strong>Compact storage</strong>: Binary formats are significantly smaller than JSON/YAML</li>
<li class=""><strong>Fast serialization/deserialization</strong>: Critical for high-frequency metric collection</li>
<li class=""><strong>FinOps-agent integration</strong>: Compatible with date-based storage hierarchies (YYYY/MM/DD)</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="metric-hydration-bridging-data-sources">Metric Hydration: Bridging Data Sources<a href="https://opencost.io/blog/introducing-kubemodel#metric-hydration-bridging-data-sources" class="hash-link" aria-label="Direct link to Metric Hydration: Bridging Data Sources" title="Direct link to Metric Hydration: Bridging Data Sources" translate="no">​</a></h2>
<p>The <strong>metric hydration</strong> system populates KubeModelSet instances with data from various sources:</p>
<ul>
<li class="">Prometheus metrics from the costmodel datasource</li>
<li class="">Cluster cache transformations for real-time resource state</li>
<li class="">Computed values like PublicIPSeconds per node for cloud cost attribution</li>
</ul>
<p>This creates a unified view of resource metrics that can be serialized, stored, and analyzed efficiently.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="implemented-so-far">Implemented So Far<a href="https://opencost.io/blog/introducing-kubemodel#implemented-so-far" class="hash-link" aria-label="Direct link to Implemented So Far" title="Direct link to Implemented So Far" translate="no">​</a></h2>
<p>KubeModel represents a significant step forward for OpenCost. The foundation has been laid through several contributions:</p>
<ol>
<li class=""><strong>Core resource types and KubeModelSet</strong> - The fundamental data structures</li>
<li class=""><strong>UID support across all metrics</strong> - Stable resource identification</li>
<li class=""><strong>Binary serialization pipeline</strong> - Efficient storage and transmission</li>
</ol>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="the-road-ahead">The Road Ahead<a href="https://opencost.io/blog/introducing-kubemodel#the-road-ahead" class="hash-link" aria-label="Direct link to The Road Ahead" title="Direct link to The Road Ahead" translate="no">​</a></h2>
<p>This work is part of a broader effort to modernize OpenCost's architecture, making it more capable of handling the demands of enterprise Kubernetes environments. Upcoming features include:</p>
<ol>
<li class=""><strong>ResourceQuota integration</strong> - Tracking namespace-level resource constraints</li>
<li class=""><strong>Comprehensive integration tests</strong> - Ensuring reliability at scale</li>
<li class=""><strong>S3 storage support</strong> - Storing compressed KubeModel entries in S3 for scalable, durable, and cost-effective long-term data retention</li>
</ol>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="get-involved">Get Involved<a href="https://opencost.io/blog/introducing-kubemodel#get-involved" class="hash-link" aria-label="Direct link to Get Involved" title="Direct link to Get Involved" translate="no">​</a></h2>
<p>KubeModel is being developed in the open, and we welcome contributions. Check out the ongoing work:</p>
<ul>
<li class=""><a href="https://github.com/opencost/opencost/pull/3472" target="_blank" rel="noopener noreferrer" class="">Core KubeModel Introduction</a></li>
<li class=""><a href="https://github.com/opencost/opencost/pull/3443" target="_blank" rel="noopener noreferrer" class="">Flat Architecture with Binary Serialization</a></li>
<li class=""><a href="https://github.com/opencost/opencost/pull/3366" target="_blank" rel="noopener noreferrer" class="">UID Support for K8s Resource Metrics</a></li>
<li class=""><a href="https://github.com/opencost/opencost/pull/3435" target="_blank" rel="noopener noreferrer" class="">ResourceQuotas Support</a></li>
<li class=""><a href="https://github.com/opencost/opencost/pull/3485" target="_blank" rel="noopener noreferrer" class="">Initial KubeModel Proposal</a></li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="acknowledgments">Acknowledgments<a href="https://opencost.io/blog/introducing-kubemodel#acknowledgments" class="hash-link" aria-label="Direct link to Acknowledgments" title="Direct link to Acknowledgments" translate="no">​</a></h2>
<p>A special thanks to my mentors for their guidance and support throughout this project: <a href="https://github.com/ameijer" target="_blank" rel="noopener noreferrer" class="">Alex Meijer</a>, <a href="https://github.com/Sean-Holcomb" target="_blank" rel="noopener noreferrer" class="">Sean Holcomb</a>, and <a href="https://github.com/nikovacevic" target="_blank" rel="noopener noreferrer" class="">Niko Kovacevic</a>.</p>
<hr>
<p><em>KubeModel is the next evolution of OpenCost's data infrastructure. As we continue building out Data Model 2.0, we're excited to deliver more accurate, efficient, and reliable Kubernetes cost tracking for the community.</em></p>]]></content>
        <author>
            <name>Sparsh Raj</name>
            <uri>https://github.com/spa-raj</uri>
        </author>
        <category label="kubemodel" term="kubemodel"/>
        <category label="Data Model 2.0" term="Data Model 2.0"/>
        <category label="Kubernetes" term="Kubernetes"/>
        <category label="UID" term="UID"/>
        <category label="LFX mentorship" term="LFX mentorship"/>
        <category label="OpenCost" term="OpenCost"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[OpenCost at KubeCon Atlanta 2025]]></title>
        <id>https://opencost.io/blog/kubecon-na-2025</id>
        <link href="https://opencost.io/blog/kubecon-na-2025"/>
        <updated>2025-10-30T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[The OpenCost team will be at KubeCon Atlanta 2025 with talks and activities November 10-13, 2025!]]></summary>
        <content type="html"><![CDATA[<p>The OpenCost team will be at <a href="https://events.linuxfoundation.org/kubecon-cloudnativecon-north-america/" target="_blank" rel="noopener noreferrer" class="">KubeCon Atlanta 2025</a> with talks and activities November 10-13, 2025!</p>
<p><img decoding="async" loading="lazy" alt="KubeCon Atlanta 2025" src="https://opencost.io/assets/images/CNCF-Banner-3716477323-c041d83976c76931d68b97221f5115ad.jpg" width="2400" height="840" class="img_ev3q"></p>
<p>The activities kick off right away with 2 events on Monday, November 10:</p>
<ul>
<li class="">
<p>Matt Bolt will deliver the OpenCost Project Lightning Talk <a href="https://sched.co/28yMn" target="_blank" rel="noopener noreferrer" class="">Learn Kubernetes Best Practices With OpenCost</a>. Always check the live schedule link for any changes, but currently the talk is scheduled for 2:53pm - 2:58pm EST in Building C | Level 3 | Georgia Ballroom 2.
Matt, who is a project founder and maintainers, will give an overview of OpenCost and show the recent OpenCost MCP Server! Matt will be available right after the talk to take questions outside of the ballroom.</p>
</li>
<li class="">
<p>That same evening, join us for <a href="https://www.apptio.com/kubecon-cloudnativecon/#party" target="_blank" rel="noopener noreferrer" class="">a rooftop reception near the KubeCon convention center</a>, Monday 7:00 - 9:00 pm. Come hang out with OpenCost maintainers and members while enjoying the view. Make sure to <a href="https://www.apptio.com/kubecon-cloudnativecon/#party" target="_blank" rel="noopener noreferrer" class="">save your spot</a> so that you can get in.</p>
</li>
</ul>
<p>On Tuesday, come say hello at the OpenCost kiosk in the Project Pavilion. We will be there, Tuesday only, from 10:45 am - 3:00pm. We'd love to hear your use cases and help troubleshoot any issues you may have.</p>]]></content>
        <author>
            <name>Tamao Nakahara</name>
            <uri>https://github.com/mewzherder</uri>
        </author>
        <category label="opencost" term="opencost"/>
        <category label="cncf" term="cncf"/>
        <category label="kubecon" term="kubecon"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[OpenCost MCP Server: AI-Powered Cost Management for Kubernetes]]></title>
        <id>https://opencost.io/blog/opencost-mcp-server</id>
        <link href="https://opencost.io/blog/opencost-mcp-server"/>
        <updated>2025-10-23T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[OpenCost MCP Server]]></summary>
        <content type="html"><![CDATA[<p><img decoding="async" loading="lazy" alt="OpenCost MCP Server" src="https://opencost.io/assets/images/opencost-mcp-server-6bd406c051e74bfc6cb8c3c9c0c98193.png" width="1344" height="768" class="img_ev3q"></p>
<p>The future of Kubernetes cost management is here, and it's powered by AI. We're excited to announce that OpenCost now includes a built-in <strong>Model Context Protocol (MCP) server</strong> that enables AI agents to directly access and analyze your Kubernetes cost data. This groundbreaking integration brings intelligent automation to cost optimization, making it easier than ever to understand, predict, and optimize your cloud spending.</p>
<blockquote>
<p>Note: This is available as of OpenCost v1.118.</p>
</blockquote>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="what-is-model-context-protocol-mcp">What is Model Context Protocol (MCP)?<a href="https://opencost.io/blog/opencost-mcp-server#what-is-model-context-protocol-mcp" class="hash-link" aria-label="Direct link to What is Model Context Protocol (MCP)?" title="Direct link to What is Model Context Protocol (MCP)?" translate="no">​</a></h2>
<p>The Model Context Protocol is an open standard introduced by Anthropic in late 2024 that standardizes how AI systems integrate with external tools and data sources. Think of MCP as a universal translator that allows AI agents to seamlessly interact with your infrastructure, databases, and applications.</p>
<p><img decoding="async" loading="lazy" alt="MCP Architecture" src="https://opencost.io/assets/images/mcp-workflow-4aa5282ea4d6ae052dea6d8da102cfdf.png" width="1408" height="736" class="img_ev3q"></p>
<p>For OpenCost, this means AI agents can now:</p>
<ul>
<li class=""><strong>Query cost data</strong> in real-time using natural language</li>
<li class=""><strong>Analyze spending patterns</strong> across namespaces, pods, and nodes</li>
<li class=""><strong>Generate cost reports</strong> and recommendations automatically</li>
<li class=""><strong>Monitor budget alerts</strong> and cost anomalies</li>
<li class=""><strong>Optimize resource allocation</strong> based on historical data</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="opencost-mcp-server-zero-configuration-ai-integration">OpenCost MCP Server: Zero-Configuration AI Integration<a href="https://opencost.io/blog/opencost-mcp-server#opencost-mcp-server-zero-configuration-ai-integration" class="hash-link" aria-label="Direct link to OpenCost MCP Server: Zero-Configuration AI Integration" title="Direct link to OpenCost MCP Server: Zero-Configuration AI Integration" translate="no">​</a></h2>
<p>The best part? OpenCost's MCP server is <strong>enabled by default</strong> in every deployment. No additional setup, no complex configuration—just intelligent cost management out of the box.</p>
<ul>
<li class=""><strong>⚙️ Full-Featured</strong>: Supports all the filters and features of our battle-tested APIs.</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="available-mcp-tools">Available MCP Tools<a href="https://opencost.io/blog/opencost-mcp-server#available-mcp-tools" class="hash-link" aria-label="Direct link to Available MCP Tools" title="Direct link to Available MCP Tools" translate="no">​</a></h2>
<p>The OpenCost MCP server provides three powerful tools for AI agents:</p>
<p><img decoding="async" loading="lazy" alt="OpenCost MCP Tools" src="data:image/png;base64,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" width="619" height="98" class="img_ev3q"></p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="1-get_allocation_costs">1. <code>get_allocation_costs</code><a href="https://opencost.io/blog/opencost-mcp-server#1-get_allocation_costs" class="hash-link" aria-label="Direct link to 1-get_allocation_costs" title="Direct link to 1-get_allocation_costs" translate="no">​</a></h3>
<p>Retrieve detailed cost allocation data with advanced filtering and aggregation.</p>
<p><strong>Example Use Cases:</strong></p>
<ul>
<li class="">"Show me the cost breakdown by namespace for the last 7 days"</li>
<li class="">"Which pods are consuming the most resources in production?"</li>
<li class="">"Compare costs between different nodes in my cluster"</li>
</ul>
<p><strong>Parameters:</strong></p>
<ul>
<li class=""><code>window</code> (required): Time window (e.g., "7d", "1h", "30m")</li>
<li class=""><code>aggregate</code> (optional): Group by namespace, pod, node, etc.</li>
<li class=""><code>step</code> (optional): Resolution step size</li>
<li class=""><code>accumulate</code> (optional): Whether to accumulate over time</li>
<li class=""><code>share_idle</code> (optional): Whether to share idle costs</li>
<li class=""><code>include_idle</code> (optional): Whether to include idle resources</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="2-get_asset_costs">2. <code>get_asset_costs</code><a href="https://opencost.io/blog/opencost-mcp-server#2-get_asset_costs" class="hash-link" aria-label="Direct link to 2-get_asset_costs" title="Direct link to 2-get_asset_costs" translate="no">​</a></h3>
<p>Access comprehensive asset information including nodes, disks, load balancers, and more.</p>
<p><strong>Example Use Cases:</strong></p>
<ul>
<li class="">"What are my current infrastructure costs?"</li>
<li class="">"Show me the cost of all storage volumes"</li>
<li class="">"Which load balancers are most expensive?"</li>
</ul>
<p><strong>Parameters:</strong></p>
<ul>
<li class=""><code>window</code> (required): Time window for cost analysis</li>
</ul>
<p><strong>Supported Asset Types:</strong></p>
<ul>
<li class=""><strong>🖥️ Node</strong>: Compute instances with CPU, RAM, GPU details</li>
<li class=""><strong>💾 Disk</strong>: Storage volumes with usage and cost breakdown</li>
<li class=""><strong>⚖️ LoadBalancer</strong>: Load balancer instances with IP and private status</li>
<li class=""><strong>🌐 Network</strong>: Network-related costs and usage</li>
<li class=""><strong>☁️ Cloud</strong>: Cloud service costs with credit information</li>
<li class=""><strong>☸️ ClusterManagement</strong>: Kubernetes cluster management costs</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="3-get_cloud_costs">3. <code>get_cloud_costs</code><a href="https://opencost.io/blog/opencost-mcp-server#3-get_cloud_costs" class="hash-link" aria-label="Direct link to 3-get_cloud_costs" title="Direct link to 3-get_cloud_costs" translate="no">​</a></h3>
<p>Query cloud cost data with provider, service, and region filtering.</p>
<p><strong>Example Use Cases:</strong></p>
<ul>
<li class="">"How much am I spending on AWS EC2 instances?"</li>
<li class="">"Compare costs between different regions"</li>
<li class="">"Show me the breakdown of GCP services"</li>
</ul>
<p><strong>Parameters:</strong></p>
<ul>
<li class=""><code>window</code> (required): Time window</li>
<li class=""><code>aggregate</code> (optional): Group by provider, service, region</li>
<li class=""><code>provider</code> (optional): Filter by AWS, GCP, Azure, etc.</li>
<li class=""><code>service</code> (optional): Filter by specific services</li>
<li class=""><code>region</code> (optional): Filter by geographic regions</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="example-interaction">Example Interaction<a href="https://opencost.io/blog/opencost-mcp-server#example-interaction" class="hash-link" aria-label="Direct link to Example Interaction" title="Direct link to Example Interaction" translate="no">​</a></h2>
<p>Here's a glimpse of what's possible when you connect an AI agent to OpenCost's MCP server.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="allocation-costs">Allocation Costs<a href="https://opencost.io/blog/opencost-mcp-server#allocation-costs" class="hash-link" aria-label="Direct link to Allocation Costs" title="Direct link to Allocation Costs" translate="no">​</a></h3>
<p>A simple prompt asking for "allocation costs for the last 7 days aggregated by namespace" yields a detailed breakdown:</p>
<p><img decoding="async" loading="lazy" alt="Allocation Costs" src="https://opencost.io/assets/images/allocation-costs-by-namespace-6b7128d5d1a35f0100f763ec91eea396.png" width="1660" height="830" class="img_ev3q"></p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="saving-insights">Saving Insights<a href="https://opencost.io/blog/opencost-mcp-server#saving-insights" class="hash-link" aria-label="Direct link to Saving Insights" title="Direct link to Saving Insights" translate="no">​</a></h3>
<p>The MCP server can also provide actionable saving insights.</p>
<p><img decoding="async" loading="lazy" alt="Saving Insights 1" src="https://opencost.io/assets/images/saving-insights-1-e5bf6dc2aa93d34729f62bd338f418e6.png" width="1660" height="888" class="img_ev3q"></p>
<p><img decoding="async" loading="lazy" alt="Saving Insights 2" src="https://opencost.io/assets/images/saving-insights-2-d7b8c3ba85fccac313ed1b124b4a4234.png" width="1660" height="567" class="img_ev3q"></p>
<hr>
<p><em>Ready to revolutionize your cost management with AI? Deploy OpenCost and start exploring the possibilities with our built-in MCP server.</em></p>]]></content>
        <author>
            <name>Adesh Pal</name>
            <uri>https://github.com/sneaxhuh</uri>
        </author>
        <category label="MCP" term="MCP"/>
        <category label="AI" term="AI"/>
        <category label="cost management" term="cost management"/>
        <category label="Kubernetes" term="Kubernetes"/>
        <category label="automation" term="automation"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[That Summer with OpenCost]]></title>
        <id>https://opencost.io/blog/summer-with-opencost</id>
        <link href="https://opencost.io/blog/summer-with-opencost"/>
        <updated>2025-09-25T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[I wouldn't have imagined spending an entire summer working on integration tests for OpenCost after watching a KubeCon video. By cosmic karma, I came across a mentorship under the Linux Foundation for writing Integration tests for OpenCosts Enterprise readiness. I spent my first few hours frantically reading OpenCost docs to deploy the demo in my local environment and draft my application.]]></summary>
        <content type="html"><![CDATA[<p>I wouldn't have imagined spending an entire summer working on integration tests for OpenCost after watching a KubeCon video. By cosmic karma, I came across a mentorship under the Linux Foundation for writing Integration tests for OpenCosts Enterprise readiness. I spent my first few hours frantically reading OpenCost docs to deploy the demo in my local environment and draft my application.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="getting-started-with-opencost">Getting Started with OpenCost<a href="https://opencost.io/blog/summer-with-opencost#getting-started-with-opencost" class="hash-link" aria-label="Direct link to Getting Started with OpenCost" title="Direct link to Getting Started with OpenCost" translate="no">​</a></h2>
<p>In the brief moment before the mentorship started, I was looking up Prometheus queries and Go structs in OpenCost. This was my first time working on a big project in Go, so I was really nervous that I wouldn't be able to keep up. The idea behind my summer was to test every metric exported in the <code>/allocation</code> and <code>/assets</code> API, which were numbers synthesized by OpenCost on top of Prom metrics.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="early-challenges-and-breakthroughs">Early Challenges and Breakthroughs<a href="https://opencost.io/blog/summer-with-opencost#early-challenges-and-breakthroughs" class="hash-link" aria-label="Direct link to Early Challenges and Breakthroughs" title="Direct link to Early Challenges and Breakthroughs" translate="no">​</a></h2>
<p>I was able to breeze through the first couple of tests, but I hit a roadblock when it came to time-aggregated results. OpenCost adopts a bottom-to-top approach, where the rules are applied on the lowest level, the containers, and the results are propagated up from Pods to Namespaces to Nodes. I missed this crucial observation until my mentors pointed it out.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="the-persistent-volume-cost-challenge">The Persistent Volume Cost Challenge<a href="https://opencost.io/blog/summer-with-opencost#the-persistent-volume-cost-challenge" class="hash-link" aria-label="Direct link to The Persistent Volume Cost Challenge" title="Direct link to The Persistent Volume Cost Challenge" translate="no">​</a></h2>
<p>My second biggest obstacle came in the form of Persistent Volume Costs. Here, the combined use of Kubernetes UID, Container runtimes, and Pod Claims to Persistent Volume Bytes complicated my debugging process. I eventually managed to break down most of the challenges myself and made the tests pass. This was the only test that ate my mind, but also was the most satisfying to write. I offer a specific example of a test helper function below that helped me make sense of how OpenCost allocates its PVCs:</p>
<div class="language-go codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-go codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token keyword" style="color:#00009f">func</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">buildPodPVCMap</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">window </span><span class="token builtin">string</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> endTime </span><span class="token builtin">int64</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> podMap </span><span class="token keyword" style="color:#00009f">map</span><span class="token punctuation" style="color:#393A34">[</span><span class="token plain">PodKey</span><span class="token punctuation" style="color:#393A34">]</span><span class="token operator" style="color:#393A34">*</span><span class="token plain">PodData</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> persistentVolumeMap </span><span class="token keyword" style="color:#00009f">map</span><span class="token punctuation" style="color:#393A34">[</span><span class="token builtin">string</span><span class="token punctuation" style="color:#393A34">]</span><span class="token operator" style="color:#393A34">*</span><span class="token plain">PersistentVolume</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> persistentVolumeClaimMap </span><span class="token keyword" style="color:#00009f">map</span><span class="token punctuation" style="color:#393A34">[</span><span class="token plain">PersistentVolumeClaimKey</span><span class="token punctuation" style="color:#393A34">]</span><span class="token operator" style="color:#393A34">*</span><span class="token plain">PersistentVolumeClaim</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> IngestUID </span><span class="token builtin">bool</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> podUIDKeyMap </span><span class="token keyword" style="color:#00009f">map</span><span class="token punctuation" style="color:#393A34">[</span><span class="token plain">PodKey</span><span class="token punctuation" style="color:#393A34">]</span><span class="token punctuation" style="color:#393A34">[</span><span class="token punctuation" style="color:#393A34">]</span><span class="token plain">PodKey</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> t </span><span class="token operator" style="color:#393A34">*</span><span class="token plain">testing</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">T</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">map</span><span class="token punctuation" style="color:#393A34">[</span><span class="token plain">PodKey</span><span class="token punctuation" style="color:#393A34">]</span><span class="token punctuation" style="color:#393A34">[</span><span class="token punctuation" style="color:#393A34">]</span><span class="token operator" style="color:#393A34">*</span><span class="token plain">PersistentVolumeClaim </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">	podPVCAllocation</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> err </span><span class="token operator" style="color:#393A34">:=</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">queryPodPVCAllocation</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">window</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> endTime</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain">  </span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">	</span><span class="token keyword" style="color:#00009f">if</span><span class="token plain"> err </span><span class="token operator" style="color:#393A34">!=</span><span class="token plain"> </span><span class="token boolean" style="color:#36acaa">nil</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain">  </span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">		t</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">Fatalf</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">"Error Occurred while querying PromQL pod_pvc_allocation: %v"</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> err</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain">  </span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">	</span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">	podPVCMap </span><span class="token operator" style="color:#393A34">:=</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">make</span><span class="token punctuation" style="color:#393A34">(</span><span class="token keyword" style="color:#00009f">map</span><span class="token punctuation" style="color:#393A34">[</span><span class="token plain">PodKey</span><span class="token punctuation" style="color:#393A34">]</span><span class="token punctuation" style="color:#393A34">[</span><span class="token punctuation" style="color:#393A34">]</span><span class="token operator" style="color:#393A34">*</span><span class="token plain">PersistentVolumeClaim</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">	</span><span class="token keyword" style="color:#00009f">for</span><span class="token plain"> </span><span class="token boolean" style="color:#36acaa">_</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> podPVCAllocationItem </span><span class="token operator" style="color:#393A34">:=</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">range</span><span class="token plain"> podPVCAllocation</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">Data</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">Result </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">		namespace </span><span class="token operator" style="color:#393A34">:=</span><span class="token plain"> podPVCAllocationItem</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">Metric</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">Namespace  </span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">		pod </span><span class="token operator" style="color:#393A34">:=</span><span class="token plain"> podPVCAllocationItem</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">Metric</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">Pod  </span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">		persistentVolumeName </span><span class="token operator" style="color:#393A34">:=</span><span class="token plain"> podPVCAllocationItem</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">Metric</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">PersistentVolume  </span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">		persistentVolumeClaimName </span><span class="token operator" style="color:#393A34">:=</span><span class="token plain"> podPVCAllocationItem</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">Metric</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">PersistentVolumeClaim</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">		</span><span class="token keyword" style="color:#00009f">if</span><span class="token plain"> namespace </span><span class="token operator" style="color:#393A34">==</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">""</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">||</span><span class="token plain"> pod </span><span class="token operator" style="color:#393A34">==</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">""</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">||</span><span class="token plain"> persistentVolumeName </span><span class="token operator" style="color:#393A34">==</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">""</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">||</span><span class="token plain"> persistentVolumeClaimName </span><span class="token operator" style="color:#393A34">==</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">""</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain">  </span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">			t</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">Logf</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">"PV Test: pvc allocation query result missing field"</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain">  </span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">			</span><span class="token keyword" style="color:#00009f">continue</span><span class="token plain">  </span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">		</span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">		podKey </span><span class="token operator" style="color:#393A34">:=</span><span class="token plain"> PodKey</span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain">  </span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">			Namespace</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> namespace</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain">  </span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">			Pod</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain">       pod</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain">  </span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">		</span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">		persistentVolumeClaimKey </span><span class="token operator" style="color:#393A34">:=</span><span class="token plain"> PersistentVolumeClaimKey</span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain">  </span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">			Namespace</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain">                 namespace</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain">  </span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">			PersistentVolumeClaimName</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> persistentVolumeClaimName</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain">  </span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">		</span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">		</span><span class="token keyword" style="color:#00009f">if</span><span class="token plain"> </span><span class="token boolean" style="color:#36acaa">_</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> ok </span><span class="token operator" style="color:#393A34">:=</span><span class="token plain"> persistentVolumeMap</span><span class="token punctuation" style="color:#393A34">[</span><span class="token plain">persistentVolumeName</span><span class="token punctuation" style="color:#393A34">]</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">!</span><span class="token plain">ok </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain">  </span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">			t</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">Logf</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">"PV Test: pv missing for pvc allocation query result: %s"</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> persistentVolumeName</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain">  </span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">		</span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">		pvc</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> ok </span><span class="token operator" style="color:#393A34">:=</span><span class="token plain"> persistentVolumeClaimMap</span><span class="token punctuation" style="color:#393A34">[</span><span class="token plain">persistentVolumeClaimKey</span><span class="token punctuation" style="color:#393A34">]</span><span class="token plain">  </span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">		</span><span class="token keyword" style="color:#00009f">if</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">!</span><span class="token plain">ok </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain">  </span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">			t</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">Logf</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">"PV Test: pvc missing for from PVC alloctions prom query: %s"</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> persistentVolumeClaimKey</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain">  </span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">			</span><span class="token keyword" style="color:#00009f">continue</span><span class="token plain">  </span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">		</span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">		pvc</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">Mounted </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token boolean" style="color:#36acaa">true</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">		</span><span class="token keyword" style="color:#00009f">if</span><span class="token plain"> IngestUID </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain">  </span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">			</span><span class="token keyword" style="color:#00009f">for</span><span class="token plain"> </span><span class="token boolean" style="color:#36acaa">_</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> key </span><span class="token operator" style="color:#393A34">:=</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">range</span><span class="token plain"> podUIDKeyMap</span><span class="token punctuation" style="color:#393A34">[</span><span class="token plain">podKey</span><span class="token punctuation" style="color:#393A34">]</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain">  </span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">				podPVCMap</span><span class="token punctuation" style="color:#393A34">[</span><span class="token plain">key</span><span class="token punctuation" style="color:#393A34">]</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">append</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">podPVCMap</span><span class="token punctuation" style="color:#393A34">[</span><span class="token plain">key</span><span class="token punctuation" style="color:#393A34">]</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> pvc</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain">  </span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">			</span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain">  </span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">		</span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">else</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain">  </span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">			podPVCMap</span><span class="token punctuation" style="color:#393A34">[</span><span class="token plain">podKey</span><span class="token punctuation" style="color:#393A34">]</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">append</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">podPVCMap</span><span class="token punctuation" style="color:#393A34">[</span><span class="token plain">podKey</span><span class="token punctuation" style="color:#393A34">]</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> pvc</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain">  </span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">		</span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain">  </span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">	</span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">	</span><span class="token keyword" style="color:#00009f">return</span><span class="token plain"> podPVCMap  </span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><br></div></code></pre></div></div>
<p>Here is a function that builds a podPVC map. The PodPVC map represents all the Persistent VolumeClaims made by a pod. This is useful in particular, when we wish to calculate costs for a Pod incurred by each PV (through a PVC). The PV Claim includes Persistent Volume and Time Allocated information, with this we can calculate costs using the weighted average formula. Notice we apply the PVCs to all Pod UIDs, even if the pod runtimes are separated for a longer time.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="impact-and-future-plans">Impact and Future Plans<a href="https://opencost.io/blog/summer-with-opencost#impact-and-future-plans" class="hash-link" aria-label="Direct link to Impact and Future Plans" title="Direct link to Impact and Future Plans" translate="no">​</a></h2>
<p>The most fulfilling part of this summer is that my tests are now run on the OpenCost pipeline. I'm thrilled to think that everyone who wants to make a new change will now have to pass my tests before merging code. My tests run in the context of the OpenCost Integration Testing Pipeline, here:</p>
<p><img decoding="async" loading="lazy" alt="pipeline" src="https://opencost.io/assets/images/arch-wh-bg-dda48050b5a16f016796bb16f89c1b5e.png" width="1802" height="4520" class="img_ev3q"></p>
<p>I want to keep contributing to OpenCost and work my way up to a maintainer. I'm grateful for being given this opportunity and for my mentors, <a href="https://github.com/ameijer" target="_blank" rel="noopener noreferrer" class="">@ameijer</a> and <a href="https://github.com/mbolt35" target="_blank" rel="noopener noreferrer" class="">@mbolt35</a>.</p>]]></content>
        <author>
            <name>Manas Sivakumar</name>
            <uri>https://github.com/Manas23601</uri>
        </author>
        <category label="mentorship" term="mentorship"/>
        <category label="integration tests" term="integration tests"/>
        <category label="Linux Foundation" term="Linux Foundation"/>
        <category label="OpenCost" term="OpenCost"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[OpenCost Updates: New Plugins & CNCF Incubation]]></title>
        <id>https://opencost.io/blog/Latest Updates - New OpenCost Plugins and $1,000 incentive for Community Developers</id>
        <link href="https://opencost.io/blog/Latest Updates - New OpenCost Plugins and $1,000 incentive for Community Developers"/>
        <updated>2024-11-21T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[Banner]]></summary>
        <content type="html"><![CDATA[<p><img decoding="async" loading="lazy" alt="Banner" src="https://opencost.io/assets/images/OCUPDATEBLOGHDR-f5d7263b1b180df653c781a7fda6fa8f.png" width="1200" height="628" class="img_ev3q"></p>
<p>At last week’s KubeCon North America, OpenCost shared exciting updates about our project, including our new status as a CNCF Incubating Project!
This milestone underscores our commitment to open-source excellence and the trust the community has placed in OpenCost as a leading solution for Kubernetes cost management.
In this post, we’ll recap the Kubecon highlights, including details on our latest plugins, upcoming integrations, and our $1,000 reward for accepted community plugin contributions.
Check out Alex Meijer’s KubeCon session on OpenCost plugins <a href="https://www.youtube.com/watch?v=yLAx2z4FqSk" target="_blank" rel="noopener noreferrer" class="">here on YouTube</a>.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="new-plugins-datadog-mongodb-atlas-and-openai">New Plugins: Datadog, MongoDB Atlas, and OpenAI<a href="https://opencost.io/blog/Latest%20Updates%20-%20New%20OpenCost%20Plugins%20and%20$1,000%20incentive%20for%20Community%20Developers#new-plugins-datadog-mongodb-atlas-and-openai" class="hash-link" aria-label="Direct link to New Plugins: Datadog, MongoDB Atlas, and OpenAI" title="Direct link to New Plugins: Datadog, MongoDB Atlas, and OpenAI" translate="no">​</a></h2>
<p><img decoding="async" loading="lazy" alt="external costs" src="https://opencost.io/assets/images/external_costs-3686c0dd4c601df57839b6aa394c6706.jpg" width="1600" height="822" class="img_ev3q"></p>
<p>If you didn’t hear the news already at Kubecon, we’ve released several new plugins to expand OpenCost’s integrations with essential tools and platforms. Here’s a look at the capabilities each plugin brings:</p>
<ol>
<li class="">Datadog Plugin: This plugin enables users to view and track Datadog’s costs directly within OpenCost. By consolidating Datadog expenses alongside Kubernetes workloads,
users gain a comprehensive view of monitoring-related expenses, making it easier to manage observability costs in the context of total infrastructure spending.</li>
<li class="">MongoDB Atlas Plugin: For teams using MongoDB Atlas as a managed database service, this plugin provides cost insights directly within OpenCost. By tracking MongoDB resource consumption alongside Kubernetes spending,
teams get a more unified view of total application costs.</li>
<li class="">OpenAI Plugin: OpenAI’s usage can be unpredictable and often scales rapidly with demand. With this plugin, OpenCost users can analyze and monitor OpenAI API usage costs alongside Kubernetes workloads,
helping organizations understand and manage the full scope of AI-driven application expenses.</li>
</ol>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="plugin-backlog-whats-coming-next">Plugin Backlog: What’s Coming Next<a href="https://opencost.io/blog/Latest%20Updates%20-%20New%20OpenCost%20Plugins%20and%20$1,000%20incentive%20for%20Community%20Developers#plugin-backlog-whats-coming-next" class="hash-link" aria-label="Direct link to Plugin Backlog: What’s Coming Next" title="Direct link to Plugin Backlog: What’s Coming Next" translate="no">​</a></h2>
<p>Our backlog is shaped by community feedback. Below are a few examples of plugins we are looking to build, but you can check out the full backlog on our <a href="https://github.com/opencost/opencost-plugins/issues" target="_blank" rel="noopener noreferrer" class="">GitHub issues page</a>.</p>
<ul>
<li class="">Snowflake: This plugin will enable tracking of Snowflake data warehousing costs, giving insights into data expenses alongside Kubernetes workloads.</li>
<li class="">Databricks: With Databricks' popularity for big data processing, this plugin will bring Databricks cost insights into OpenCost, allowing users to manage analytics costs in one place.</li>
<li class="">Cloudflare: This plugin will monitor the cost of Cloudflare, providing visibility into network and security-related expenses alongside Kubernetes infrastructure.</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="1000-reward-for-plugin-contributions">$1,000 Reward for Plugin Contributions<a href="https://opencost.io/blog/Latest%20Updates%20-%20New%20OpenCost%20Plugins%20and%20$1,000%20incentive%20for%20Community%20Developers#1000-reward-for-plugin-contributions" class="hash-link" aria-label="Direct link to $1,000 Reward for Plugin Contributions" title="Direct link to $1,000 Reward for Plugin Contributions" translate="no">​</a></h2>
<p>In addition to these updates, OpenCost is inviting community contributions by offering a $1,000 reward + a box of OpenCost swag for each accepted plugin. This reward is part of our commitment to building a robust,
community-driven ecosystem of cost management tools for Kubernetes. If you have experience with a particular tool or service that could benefit other OpenCost users, we’d love to collaborate with you!</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="how-to-get-started-with-opencost-plugins">How to get started with OpenCost Plugins<a href="https://opencost.io/blog/Latest%20Updates%20-%20New%20OpenCost%20Plugins%20and%20$1,000%20incentive%20for%20Community%20Developers#how-to-get-started-with-opencost-plugins" class="hash-link" aria-label="Direct link to How to get started with OpenCost Plugins" title="Direct link to How to get started with OpenCost Plugins" translate="no">​</a></h2>
<p>Visit our <a href="https://www.opencost.io/docs/integrations/plugins/" target="_blank" rel="noopener noreferrer" class="">Plugin Docs</a> for the full details on how to install OpenCost plugins in your environment. In general, installing a plugin is as simple as:</p>
<ol>
<li class="">Obtaining the plugin Binary</li>
<li class="">Adding your plugin API keys to the relevant plugin config</li>
<li class="">Watch all your cost data come together in one place!</li>
</ol>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="join-the-opencost-community">Join the OpenCost Community<a href="https://opencost.io/blog/Latest%20Updates%20-%20New%20OpenCost%20Plugins%20and%20$1,000%20incentive%20for%20Community%20Developers#join-the-opencost-community" class="hash-link" aria-label="Direct link to Join the OpenCost Community" title="Direct link to Join the OpenCost Community" translate="no">​</a></h2>
<p>Thank you to everyone who joined us at KubeCon! OpenCost’s new status as a CNCF Incubating Project represents a significant step forward, and we’re excited to grow with the community.
For those who missed the session, watch Alex Meijers’ KubeCon talk <a href="https://www.youtube.com/watch?v=yLAx2z4FqSk" target="_blank" rel="noopener noreferrer" class="">here on YouTube</a> and join us on <a href="https://github.com/opencost" target="_blank" rel="noopener noreferrer" class="">GitHub</a> to share your feedback and ideas.
Together, let’s build a powerful and open ecosystem for cost management!</p>]]></content>
        <author>
            <name>Kai Wombacher</name>
            <uri>https://www.linkedin.com/in/kai-wombacher-55948a104/</uri>
        </author>
        <category label="MongoDB" term="MongoDB"/>
        <category label="OpenAI" term="OpenAI"/>
        <category label="Datadog" term="Datadog"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[OpenCost Advances to CNCF Incubation]]></title>
        <id>https://opencost.io/blog/cncf-incubation</id>
        <link href="https://opencost.io/blog/cncf-incubation"/>
        <updated>2024-10-31T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[OpenCost Advances to CNCF Incubation]]></summary>
        <content type="html"><![CDATA[<p><img decoding="async" loading="lazy" alt="OpenCost Advances to CNCF Incubation" src="https://opencost.io/assets/images/10312024_blog__header-0fd4b4de1cd38c0d68ec0c2797e6168f.png" width="1200" height="628" class="img_ev3q"></p>
<p>The OpenCost project proudly announces that we’ve reached CNCF Incubating status! This milestone in our journey underscores the significant dedication the project has received from the community that contributes to OpenCost. We’d like to thank the developers, Kubernetes practitioners, and FinOps teams from organizations across the globe that continue to make this project meaningful.</p>
<p>Cloud-native adoption continues accelerating, and the need for clear, manageable insights into Kubernetes costs keeps pace. OpenCost addresses this need as an open-source tool designed to make Kubernetes cost management more accessible and standardized. Initially launched through a collaborative effort led by Kubecost and supported by experts from organizations like Amazon, Adobe, Google, Microsoft, and SUSE, OpenCost was welcomed into the CNCF Sandbox to improve cost management for Kubernetes. Our promotion to CNCF Incubation reflects strong community support and the important challenges it seeks to address.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="the-importance-of-opencost">The Importance of OpenCost<a href="https://opencost.io/blog/cncf-incubation#the-importance-of-opencost" class="hash-link" aria-label="Direct link to The Importance of OpenCost" title="Direct link to The Importance of OpenCost" translate="no">​</a></h2>
<p>OpenCost fills a critical gap by providing real-time visibility into Kubernetes costs across multi-cloud environments. With its vendor-neutral framework, OpenCost enables teams to allocate costs by Kubernetes service, deployment, container, and more. By standardizing cost allocation, OpenCost helps reduce cost overruns and gives teams a trusted model for budget planning, regardless of whether they use AWS, Google Cloud, Microsoft Azure, or on-premises infrastructure.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="from-sandbox-to-incubating">From Sandbox to Incubating<a href="https://opencost.io/blog/cncf-incubation#from-sandbox-to-incubating" class="hash-link" aria-label="Direct link to From Sandbox to Incubating" title="Direct link to From Sandbox to Incubating" translate="no">​</a></h2>
<p>Progressing from Sandbox to Incubation within the CNCF represents a vote of confidence from the cloud-native and open-source communities. Projects that reach this status are celebrated for their innovation and reliability, and they signal the potential for widespread adoption. For OpenCost, this transition validates our project’s solutions to Kubernetes cost challenges and recognizes the tool as becoming foundational for Kubernetes cost management at scale.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="key-milestones-for-opencost">Key Milestones for OpenCost<a href="https://opencost.io/blog/cncf-incubation#key-milestones-for-opencost" class="hash-link" aria-label="Direct link to Key Milestones for OpenCost" title="Direct link to Key Milestones for OpenCost" translate="no">​</a></h2>
<p>OpenCost’s growth has been remarkable. Here are some notable highlights:</p>
<ul>
<li class="">Broader Platform Integration: OpenCost has integrated with major cloud providers’ billing APIs and supports Prometheus for seamless cost data exporting.</li>
<li class="">Community-Driven Development: A diverse group of contributors from Adobe, Google, SUSE, and many others have significantly contributed to refining OpenCost, with frequent releases that keep it flexible, effective, and secure.</li>
<li class="">Open Source Plugin Framework: <a href="https://github.com/opencost/opencost-plugins" target="_blank" rel="noopener noreferrer" class="">OpenCost Plugins</a> were added to allow for cost monitoring of tools and services like Datadog, OpenAI, and MongoDB Atlas.</li>
<li class="">FinOps Certification: By aligning with the FinOps Foundation, OpenCost supports Kubernetes FinOps practitioners seeking to optimize their Kubernetes costs.</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="opencost-momentum">OpenCost Momentum<a href="https://opencost.io/blog/cncf-incubation#opencost-momentum" class="hash-link" aria-label="Direct link to OpenCost Momentum" title="Direct link to OpenCost Momentum" translate="no">​</a></h2>
<p>As an Incubating project, OpenCost’s future is bright and filled with opportunities to expand its capabilities. We look forward to developing new integrations, refining real-time cost monitoring, and offering deeper support for multi-cloud and hybrid-cloud environments. Our progress depends on the community of users, and we invite anyone interested in Kubernetes cost management to join us in building a sustainable, transparent future for Kubernetes operations.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="help-shape-the-future-of-opencost">Help Shape the Future of OpenCost<a href="https://opencost.io/blog/cncf-incubation#help-shape-the-future-of-opencost" class="hash-link" aria-label="Direct link to Help Shape the Future of OpenCost" title="Direct link to Help Shape the Future of OpenCost" translate="no">​</a></h2>
<p>OpenCost is powered by the passion and expertise of our community. We encourage you to explore OpenCost on <a href="https://github.com/opencost" target="_blank" rel="noopener noreferrer" class="">GitHub</a> and chat with us on <a href="https://cloud-native.slack.com/" target="_blank" rel="noopener noreferrer" class="">CNCF Slack</a>. Together, we’re creating an essential tool for Kubernetes teams worldwide, helping them manage cloud costs more effectively and transparently. Are you going to Kubecon NA 2024? Stop to say ‘hi’ at the OpenCost kiosk in the CNCF Project Pavillion.</p>]]></content>
        <author>
            <name>Ajay Tripathy</name>
            <uri>https://github.com/AjayTripathy</uri>
        </author>
        <category label="opencost" term="opencost"/>
        <category label="cncf" term="cncf"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Repost: Streamlining Kubernetes Cost Management with the New OpenCost Plugin for Headlamp]]></title>
        <id>https://opencost.io/blog/headlamp</id>
        <link href="https://opencost.io/blog/headlamp"/>
        <updated>2024-08-28T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[Reposted from the Headlamp blog post: Streamlining Kubernetes Cost Management with the New OpenCost Plugin for Headlamp, by Santhosh Nagaraj]]></summary>
        <content type="html"><![CDATA[
<p>Reposted from the <a href="https://headlamp.dev/blog/" target="_blank" rel="noopener noreferrer" class="">Headlamp blog</a> post: <a href="https://headlamp.dev/blog/2024/08/08/opencost-plugin" target="_blank" rel="noopener noreferrer" class="">Streamlining Kubernetes Cost Management with the New OpenCost Plugin for Headlamp</a>, by Santhosh Nagaraj</p>
<div class="theme-admonition theme-admonition-info admonition_xJq3 alert alert--info"><div class="admonitionHeading_Gvgb"><span class="admonitionIcon_Rf37"><svg viewBox="0 0 14 16"><path fill-rule="evenodd" d="M7 2.3c3.14 0 5.7 2.56 5.7 5.7s-2.56 5.7-5.7 5.7A5.71 5.71 0 0 1 1.3 8c0-3.14 2.56-5.7 5.7-5.7zM7 1C3.14 1 0 4.14 0 8s3.14 7 7 7 7-3.14 7-7-3.14-7-7-7zm1 3H6v5h2V4zm0 6H6v2h2v-2z"></path></svg></span>info</div><div class="admonitionContent_BuS1"><p>Headlamp is an open source Kubernetes UI that focuses on usability and can be extended via plugins. It is available as a web or desktop application. Learn more about it at <a href="https://headlamp.dev/" target="_blank" rel="noopener noreferrer" class="">headlamp.dev</a>.</p></div></div>
<p><img decoding="async" loading="lazy" alt="OpenCost + Headlamp" src="https://opencost.io/assets/images/splash-d91f1a7b8687b29c9298c7f45efc12a1.jpg" width="1800" height="1024" class="img_ev3q"></p>
<p><a href="https://www.opencost.io/" target="_blank" rel="noopener noreferrer" class="">OpenCost</a> is one of CNCF's leading open-source projects that offers real-time native cost monitoring for Kubernetes environments, providing visibility to developers and companies on the costs linked to their cloud-native applications. With OpenCost, one can trace the costs of single workloads, namespaces, and even particular labels in your Kubernetes cluster. The continuous granular cost visibility that OpenCost provides help in effectual usage of resources and better budgeting.</p>
<p>Given how useful OpenCost is, in the Headlamp team we created a <a href="https://headlamp.dev/" target="_blank" rel="noopener noreferrer" class="">Headlamp</a> plugin for OpenCost to help Headlamp users track their cluster resource costs. This integration aims to solve the visibility problem between cost and cluster management, enabling developers to make more informed decisions.</p>
<div class="theme-admonition theme-admonition-note admonition_xJq3 alert alert--secondary"><div class="admonitionHeading_Gvgb"><span class="admonitionIcon_Rf37"><svg viewBox="0 0 14 16"><path fill-rule="evenodd" d="M6.3 5.69a.942.942 0 0 1-.28-.7c0-.28.09-.52.28-.7.19-.18.42-.28.7-.28.28 0 .52.09.7.28.18.19.28.42.28.7 0 .28-.09.52-.28.7a1 1 0 0 1-.7.3c-.28 0-.52-.11-.7-.3zM8 7.99c-.02-.25-.11-.48-.31-.69-.2-.19-.42-.3-.69-.31H6c-.27.02-.48.13-.69.31-.2.2-.3.44-.31.69h1v3c.02.27.11.5.31.69.2.2.42.31.69.31h1c.27 0 .48-.11.69-.31.2-.19.3-.42.31-.69H8V7.98v.01zM7 2.3c-3.14 0-5.7 2.54-5.7 5.68 0 3.14 2.56 5.7 5.7 5.7s5.7-2.55 5.7-5.7c0-3.15-2.56-5.69-5.7-5.69v.01zM7 .98c3.86 0 7 3.14 7 7s-3.14 7-7 7-7-3.12-7-7 3.14-7 7-7z"></path></svg></span>note</div><div class="admonitionContent_BuS1"><p>OpenCost must be installed with Prometheus metrics export, for the OpenCost plugin to display the data.</p></div></div>
<p>Here is a quick video explaining the whole process:</p>
<iframe width="560" height="315" src="https://www.youtube.com/embed/J-jc0X8xk28?si=w_tmQW2cZgW9660k&amp;cc_load_policy=1" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin"></iframe>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="installing-opencost-in-the-cluster">Installing OpenCost in the cluster<a href="https://opencost.io/blog/headlamp#installing-opencost-in-the-cluster" class="hash-link" aria-label="Direct link to Installing OpenCost in the cluster" title="Direct link to Installing OpenCost in the cluster" translate="no">​</a></h2>
<p>If you don’t have Prometheus and OpenCost installed in your cluster and you are using Headlamp as a desktop app, you can use the App Catalog to install them. This can be done by accessing the Apps from the sidebar, after you enter your cluster in Headlamp, look for the Prometheus app that is distributed by the prometheus-community, click install and follow the instructions.</p>
<p><img decoding="async" loading="lazy" alt="Screenshot showing Prometheus Helm chart" src="https://opencost.io/assets/images/prometheus-helm-chart-8e9f1be2c9f9bd71ef95c5c2abe49d64.png" width="1331" height="700" class="img_ev3q"></p>
<p>Alternatively, you can install it by running the following commands.</p>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">helm repo add prometheus-community https://prometheus-community.github.io/helm-charts</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">helm install prom prometheus-community/kube-prometheus-stack</span><br></div></code></pre></div></div>
<p>Installing OpenCost:</p>
<div class="language-yaml codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-yaml codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token key atrule" style="color:#00a4db">opencost</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token key atrule" style="color:#00a4db">prometheus</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token key atrule" style="color:#00a4db">internal</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token key atrule" style="color:#00a4db">enabled</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> </span><span class="token boolean important" style="color:#36acaa">true</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token key atrule" style="color:#00a4db">namespaceName</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> &lt;Prometheus</span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain">Namespace</span><span class="token punctuation" style="color:#393A34">&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token key atrule" style="color:#00a4db">port</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">9090</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token key atrule" style="color:#00a4db">serviceName</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> &lt;Prometheus</span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain">Service</span><span class="token punctuation" style="color:#393A34">&gt;</span><br></div></code></pre></div></div>
<div class="theme-admonition theme-admonition-note admonition_xJq3 alert alert--secondary"><div class="admonitionHeading_Gvgb"><span class="admonitionIcon_Rf37"><svg viewBox="0 0 14 16"><path fill-rule="evenodd" d="M6.3 5.69a.942.942 0 0 1-.28-.7c0-.28.09-.52.28-.7.19-.18.42-.28.7-.28.28 0 .52.09.7.28.18.19.28.42.28.7 0 .28-.09.52-.28.7a1 1 0 0 1-.7.3c-.28 0-.52-.11-.7-.3zM8 7.99c-.02-.25-.11-.48-.31-.69-.2-.19-.42-.3-.69-.31H6c-.27.02-.48.13-.69.31-.2.2-.3.44-.31.69h1v3c.02.27.11.5.31.69.2.2.42.31.69.31h1c.27 0 .48-.11.69-.31.2-.19.3-.42.31-.69H8V7.98v.01zM7 2.3c-3.14 0-5.7 2.54-5.7 5.68 0 3.14 2.56 5.7 5.7 5.7s5.7-2.55 5.7-5.7c0-3.15-2.56-5.69-5.7-5.69v.01zM7 .98c3.86 0 7 3.14 7 7s-3.14 7-7 7-7-3.12-7-7 3.14-7 7-7z"></path></svg></span>note</div><div class="admonitionContent_BuS1"><p>Replace <code>&lt;Prometheus-Namespace&gt;</code> and <code>&lt;Prometheus-Service&gt;</code> with the namespace in which you have installed prometheus and prometheus service name.</p></div></div>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="installing-opencost-plugin-from-the-plugin-catalog">Installing OpenCost plugin from the plugin Catalog<a href="https://opencost.io/blog/headlamp#installing-opencost-plugin-from-the-plugin-catalog" class="hash-link" aria-label="Direct link to Installing OpenCost plugin from the plugin Catalog" title="Direct link to Installing OpenCost plugin from the plugin Catalog" translate="no">​</a></h2>
<ol>
<li class="">In Headlamp’s home screen click on Plugin Catalog &gt; Catalog.</li>
<li class="">Click the OpenCost plugin from the list of plugins that are displayed.</li>
<li class="">Click the Install button on the top right.</li>
</ol>
<p><img decoding="async" loading="lazy" alt="Screenshot showing OpenCost Plugin details" src="https://opencost.io/assets/images/opencost-plugin-details-377c1728b7cc54a55aba726c58ff9fe4.png" width="1360" height="715" class="img_ev3q"></p>
<p><img decoding="async" loading="lazy" alt="Screenshot showing OpenCost Plugin installation" src="https://opencost.io/assets/images/opencost-plugin-installation-f38ee2b0ecf7ad5e5ad063cbfecb3ec5.png" width="2127" height="1125" class="img_ev3q"></p>
<p><img decoding="async" loading="lazy" alt="Screenshot showing OpenCost Plugin installed" src="https://opencost.io/assets/images/opencost-plugin-installed-f137616dbaba874258d183656b324947.png" width="3488" height="1833" class="img_ev3q"></p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="visualizing-opencost-information">Visualizing OpenCost information<a href="https://opencost.io/blog/headlamp#visualizing-opencost-information" class="hash-link" aria-label="Direct link to Visualizing OpenCost information" title="Direct link to Visualizing OpenCost information" translate="no">​</a></h2>
<p>After OpenCost is correctly installed and configured, its information will appear integrated in various parts of the Headlamp UI, for example, tables listing resources in the workload related views (pods, deployments, etc.) will now show a column with the cost of running that resource.</p>
<p><img decoding="async" loading="lazy" alt="Screenshot showing OpenCost information in Headlamp" src="https://opencost.io/assets/images/opencost-in-headlamp-e22f18e0a30937a7a66454b3e0ca6e62.png" width="1202" height="803" class="img_ev3q"></p>
<p>Similarly, at the bottom of the details view of each individal resource, there will be a chart showing the resource’s cost over time.</p>
<p><img decoding="async" loading="lazy" alt="Screenshot showing OpenCost chart in Headlamp" src="https://opencost.io/assets/images/opencost-chart-in-headlamp-b98c7225cc7adde9d12b491a72d93dc6.png" width="4043" height="2099" class="img_ev3q"></p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="configuring-how-data-is-displayed">Configuring how data is displayed<a href="https://opencost.io/blog/headlamp#configuring-how-data-is-displayed" class="hash-link" aria-label="Direct link to Configuring how data is displayed" title="Direct link to Configuring how data is displayed" translate="no">​</a></h2>
<p>OpenCost's settings (under Settings &gt; Plugins &gt; OpenCost) provide options to adjust how the data is shown in the UI, ie. what currency symbol to be used, or timespan for which the cost has to be displayed. This way, users can easily adapt how OpenCost is displayed for them.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="conclusion">Conclusion<a href="https://opencost.io/blog/headlamp#conclusion" class="hash-link" aria-label="Direct link to Conclusion" title="Direct link to Conclusion" translate="no">​</a></h2>
<p>In the Headlamp team, we believe this plugin is useful for many users who want to keep their costs monitored close to their Kubernetes resources. We are looking forward to receiving feedback and contributions on how we can make the UI even more useful with OpenCost and other CNCF tools, so reach out to us and get involved in Headlamp!</p>
<div class="theme-admonition theme-admonition-info admonition_xJq3 alert alert--info"><div class="admonitionHeading_Gvgb"><span class="admonitionIcon_Rf37"><svg viewBox="0 0 14 16"><path fill-rule="evenodd" d="M7 2.3c3.14 0 5.7 2.56 5.7 5.7s-2.56 5.7-5.7 5.7A5.71 5.71 0 0 1 1.3 8c0-3.14 2.56-5.7 5.7-5.7zM7 1C3.14 1 0 4.14 0 8s3.14 7 7 7 7-3.14 7-7-3.14-7-7-7zm1 3H6v5h2V4zm0 6H6v2h2v-2z"></path></svg></span>info</div><div class="admonitionContent_BuS1"><p>If you want contribute to Headlamp or reach out to its developers, please check <a href="https://github.com/headlamp-k8s/headlamp?tab=readme-ov-file#get-involvedhttps://github.com/headlamp-k8s/headlamp?tab=readme-ov-file#get-involved" target="_blank" rel="noopener noreferrer" class="">how to get involved</a>.</p></div></div>]]></content>
        <author>
            <name>OpenCost Authors</name>
            <uri>https://github.com/opencost</uri>
        </author>
        <category label="opencost" term="opencost"/>
        <category label="headlamp" term="headlamp"/>
        <category label="kubernetes" term="kubernetes"/>
        <category label="ui" term="ui"/>
        <category label="integrations" term="integrations"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Introducing OpenCost Plugins]]></title>
        <id>https://opencost.io/blog/introducing-opencost-plugins</id>
        <link href="https://opencost.io/blog/introducing-opencost-plugins"/>
        <updated>2024-04-30T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[OpenCost banner]]></summary>
        <content type="html"><![CDATA[<p><img decoding="async" loading="lazy" alt="OpenCost banner" src="https://opencost.io/assets/images/OpenCost_plugins_2-a772ae86c9a0d42463e8f4c8e5d9ba9d.png" width="3600" height="1884" class="img_ev3q"></p>
<p>We are excited to announce that the CNCF OpenCost project has significantly expanded its scope and capabilities beyond existing Kubernetes and cloud costs monitoring. Via the new <a href="https://github.com/opencost/opencost-plugins" target="_blank" rel="noopener noreferrer" class="">OpenCost Plugins</a> framework, teams are now increasingly able to use OpenCost to monitor ALL of their IT spending (infrastructure monitoring, data platforms, cloud services or other tools) in one place. We have kicked things off with a Datadog plugin, but this is just the first of many plugins coming to OpenCost.</p>
<p>The new 1.110 release of OpenCost is a huge milestone in the project’s mission to deliver granular, real-time IT costs to the world. Already the leading project for monitoring the costs for Kubernetes and Cloud Services, OpenCost’s new Plugin architecture will provide comprehensive, unified cost monitoring capabilities to developers, FinOps practitioners, platform engineers, or anyone in your organization who values monitoring the cost of your IT resources.</p>
<p><img decoding="async" loading="lazy" alt="OpenCost" src="https://opencost.io/assets/images/opencost-66880b0a6cf462bcfa05405e10fed186.png" width="1600" height="1135" class="img_ev3q"></p>
<p>The plugin framework for adding additional cost sources to OpenCost is flexible enough to allow for cost monitoring from a wide range of tools and services – it supports new costs that conform to the <a href="https://focus.finops.org/" target="_blank" rel="noopener noreferrer" class="">FOCUS spec</a> developed by the FinOps Foundation to ensure costs are shown in a consistent way. If you are interested in a plugin to monitor your resources, you can review the process for <a href="https://github.com/opencost/opencost-plugins?tab=readme-ov-file#creating-a-new-plugin" target="_blank" rel="noopener noreferrer" class="">adding a new plugin</a> and make a contribution, or <a href="https://github.com/opencost/opencost/issues" target="_blank" rel="noopener noreferrer" class="">open an issue</a> requesting a new plugin. Additionally, the first 10 plugins contributed and accepted to OpenCost will receive a box full of OpenCost swag and $1,000! If you have any issues or questions you can <a href="https://slack.cncf.io/" target="_blank" rel="noopener noreferrer" class="">join our slack community</a> or email us at <a href="mailto:opencost-kubecost@wwpdl.vnet.ibm.com" target="_blank" rel="noopener noreferrer" class="">opencost-kubecost@wwpdl.vnet.ibm.com</a>.</p>
<p>To kick things off, we have created the first OpenCost plugin for Datadog cost monitoring! OpenCost 1.110 users are now able to monitor what it costs them to run Datadog’s various services in real time right alongside their monitoring of costs from Kubernetes and Cloud Services. Simply <a href="https://www.opencost.io/docs/integrations/datadog" target="_blank" rel="noopener noreferrer" class="">install the Datadog plugin</a>, and you are able to slice and dice your Datadog costs however you want – by Account, Resource Type, Resource Name, etc. This granular, real-time visibility makes it easy to understand your costs by business unit (team, application, etc.), quickly identify increases in spend, and ensure you are spending money efficiently.</p>
<p>Below you can see how the new OpenCost API’s can be used to view costs from the configured plugins. For example, once you’ve <a href="https://www.opencost.io/docs/integrations/datadog" target="_blank" rel="noopener noreferrer" class="">integrated your Datadog account</a>, you can access Datadog cost information via the following APIs:</p>
<ul>
<li class="">customCost/total<!-- -->
<ul>
<li class="">Used to grab a summary of custom costs over a window</li>
<li class="">Available aggregations:<!-- -->
<ul>
<li class="">zone</li>
<li class="">accountName</li>
<li class="">chargeCategory</li>
<li class="">description</li>
<li class="">resourceName</li>
<li class="">resourceType</li>
<li class="">providerId</li>
<li class="">usageUnit</li>
<li class="">domain</li>
<li class="">costSource</li>
</ul>
</li>
<li class="">The available filters are the same as the available aggregations. For example:<!-- -->
<ul>
<li class="">filter=domain:”datadog”</li>
<li class="">filter=zone:”us”</li>
<li class="">filter=resourceType:”infra_hosts”</li>
</ul>
</li>
</ul>
</li>
<li class="">customCost/timeseries<!-- -->
<ul>
<li class="">Essentially equivalent to calling /total over a range of time steps. For example, querying for the past 7 days will give you a /total response for each of those days, individually</li>
<li class="">All available aggregations and filters are the same as with /total</li>
</ul>
</li>
</ul>
<p>Below are some examples of these APIs in action.</p>
<p><em>Totals request, aggregating by domain over the past 7 days:</em></p>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">https://nightly.opencost.io/customCost/total?window=7d&amp;aggregate=domain</span><br></div></code></pre></div></div>
<p>Response:</p>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">{</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  "code": 200,</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  "data": {</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    "window": {</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">      "start": "2024-03-14T00:00:00Z",</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">      "end": "2024-03-21T00:00:00Z"</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    },</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    "totalBilledCost": 147.37999,</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    "totalListCost": 186.98547,</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    "customCosts": [</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">      {</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">        "id": "",</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">        "zone": "us",</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">        "account_name": "Kubecost",</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">        "charge_category": "",</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">        "description": "",</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">        "resource_name": "",</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">        "resource_type": "",</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">        "provider_id": "",</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">        "billedCost": 147.37999,</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">        "listCost": 186.98547,</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">        "list_unit_price": 0.082197905,</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">        "usage_quantity": 120,</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">        "usage_unit": "",</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">        "domain": "datadog",</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">        "cost_source": "observability",</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">        "aggregate": "datadog"</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">      }</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    ]</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  }</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">}</span><br></div></code></pre></div></div>
<p><em>Totals request, aggregating by providerId over the past 7 days:</em></p>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">https://nightly.opencost.io/customCost/total?window=7d&amp;aggregate=providerId</span><br></div></code></pre></div></div>
<p>Response:</p>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">{</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  "code": 200,</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  "data": {</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    "window": {</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">      "start": "2024-03-14T00:00:00Z",</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">      "end": "2024-03-21T00:00:00Z"</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    },</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    "totalBilledCost": 147.37999,</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    "totalListCost": 186.98546,</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    "customCosts": [</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">      {</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">        "id": "",</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">        "zone": "us",</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">        "account_name": "Kubecost",</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">        "charge_category": "usage",</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">        "description": "350+ integrations, alerting, custom metrics &amp; unlimited user accounts",</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">        "resource_name": "agent_host_count",</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">        "resource_type": "infra_hosts",</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">        "provider_id": "42c0ac62-8d80-11ed-96f3-da7ad0900005/agent_host_count",</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">        "billedCost": 0,</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">        "listCost": 8.876712,</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">        "list_unit_price": 0.073972605,</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">        "usage_quantity": 360,</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">        "usage_unit": "Infra Host - hours",</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">        "domain": "datadog",</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">        "cost_source": "observability",</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">        "aggregate": "42c0ac62-8d80-11ed-96f3-da7ad0900005/agent_host_count"</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">      },</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">      {</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">        "id": "",</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">        "zone": "us",</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">        "account_name": "Kubecost",</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">        "charge_category": "usage",</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">        "description": "Centralize your monitoring of systems and services (Per Container)",</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">        "resource_name": "container_count_excl_agent",</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">        "resource_type": "infra_hosts",</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">        "provider_id": "42c0ac62-8d80-11ed-96f3-da7ad0900005/container_count_excl_agent",</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">        "billedCost": 0,</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">        "listCost": 19.80274,</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">        "list_unit_price": 0.0041095894,</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">        "usage_quantity": 14456,</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">        "usage_unit": "Container - hours",</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">        "domain": "datadog",</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">        "cost_source": "observability",</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">        "aggregate": "42c0ac62-8d80-11ed-96f3-da7ad0900005/container_count_excl_agent"</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">      }</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">...</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    ]</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  }</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">}</span><br></div></code></pre></div></div>
<p>Datadog is just the first of many plugins! If you are interested in a plugin to monitor your resources, you can review the process for <a href="https://github.com/opencost/opencost-plugins?tab=readme-ov-file#creating-a-new-plugin" target="_blank" rel="noopener noreferrer" class="">adding a new plugin</a> and make a contribution, or <a href="https://github.com/opencost/opencost/issues" target="_blank" rel="noopener noreferrer" class="">open an issue</a> requesting a new plugin. The first 10 contributors who add a plugin which is accepted into OpenCost will receive swag and $1,000! If you have any issues or questions you can <a href="https://slack.cncf.io/" target="_blank" rel="noopener noreferrer" class="">join our slack community</a> or email us at <a href="mailto:opencost-kubecost@wwpdl.vnet.ibm.com" target="_blank" rel="noopener noreferrer" class="">opencost-kubecost@wwpdl.vnet.ibm.com</a>.</p>
<p>Let’s build something together!</p>]]></content>
        <author>
            <name>Kai Wombacher</name>
            <uri>https://www.linkedin.com/in/kai-wombacher-55948a104/</uri>
        </author>
        <category label="external costs" term="external costs"/>
        <category label="IT cost monitoring" term="IT cost monitoring"/>
        <category label="Datadog costs" term="Datadog costs"/>
        <category label="IT costs" term="IT costs"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Repost: Announcing OpenCost support for OCI]]></title>
        <id>https://opencost.io/blog/oracle</id>
        <link href="https://opencost.io/blog/oracle"/>
        <updated>2024-03-29T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[Reposted from the Oracle Developers series by Ali Mukadam: Announcing OpenCost support for OCI]]></summary>
        <content type="html"><![CDATA[
<p>Reposted from the <a href="https://medium.com/oracledevs/announcing-opencost-support-for-oci-f1a4cf45ae03" target="_blank" rel="noopener noreferrer" class="">Oracle Developers series</a> by Ali Mukadam: <a href="https://medium.com/oracledevs/announcing-opencost-support-for-oci-f1a4cf45ae03" target="_blank" rel="noopener noreferrer" class="">Announcing OpenCost support for OCI</a></p>
<p><img decoding="async" loading="lazy" alt="OCI + OpenCost" src="data:image/png;base64,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" width="549" height="80" class="img_ev3q"></p>
<p>It’s a fact now that Kubernetes has won the container wars. It has fought off Docker, Mesos, OpenStack and a number of other clustering and orchestration technologies to become the de-facto Cloud Operating System. Heck, <a href="https://thenewstack.io/how-the-u-s-air-force-deployed-kubernetes-and-istio-on-an-f-16-in-45-days/" target="_blank" rel="noopener noreferrer" class="">Kubernetes has even made it to F-16s</a>. You say Maverick is an ace? He’s got nothing on those F-16s pilots who are able to fly a cloud within clouds at Mach 2. I’m jealous of those pilots.</p>
<p><img decoding="async" loading="lazy" alt="Docker Knight" src="https://opencost.io/assets/images/oracle1-4df85e701e99674eea1887c249eac059.jpg" width="1176" height="500" class="img_ev3q"></p>
<p>Almost every type of workload now runs on Kubernetes. At Oracle, we are constantly striving to make the numerous software we build a first-class citizen of Kubernetes and the cloud-native ecosystem.</p>
<p>For those software that are foundational pieces which other applications rely on, we create <a href="https://kubernetes.io/docs/concepts/extend-kubernetes/operator/" target="_blank" rel="noopener noreferrer" class="">Kubernetes operators</a> for them e.g.</p>
<ul>
<li class="">Databases: <a href="https://github.com/oracle/oracle-database-operator" target="_blank" rel="noopener noreferrer" class="">Oracle Database</a>, MySQL.</li>
<li class="">In-memory data grid: <a href="https://github.com/oracle/coherence-operator" target="_blank" rel="noopener noreferrer" class="">Coherence</a>.</li>
<li class="">Application servers: <a href="https://github.com/oracle/weblogic-kubernetes-operator" target="_blank" rel="noopener noreferrer" class="">WebLogic</a>.</li>
</ul>
<p>For applications, we either build containerized versions of them or we evolve them and run them in a semi-microservices style e.g. <a href="https://docs.oracle.com/en/solutions/deploy-siebel-oke-oci/index.html#GUID-ADB72E84-2DC7-4331-9D1B-3A0F947740CC" target="_blank" rel="noopener noreferrer" class="">Siebel</a>. The benefits for customers are quite obvious:</p>
<ul>
<li class="">Run in the cloud (hopefully you choose Oracle Cloud).</li>
<li class="">Lean on Oracle Cloud and Kubernetes to scale your workloads when you need to.</li>
<li class="">Embrace modern software engineering architectures, methodologies, culture and practices.</li>
<li class="">Modernize your IT infrastructure and application landscape at your own pace.</li>
<li class="">Run more recent “cloud-native” workloads such as micro-services, AI/ML, serverless, observability etc alongside your traditional Oracle workloads.</li>
</ul>
<p>And finally, we also <a href="https://www.cncf.io/blog/2024/02/02/oracle-oci-credits-are-now-available-to-cncf-projects-here-is-what-you-need-to-know/" target="_blank" rel="noopener noreferrer" class="">contribute to CNCF projects</a> to enable our customers to use these projects smoothly, especially on Oracle Cloud and OKE. However, our contribution to CNCF is more than just financial. <a href="https://www.linkedin.com/feed/update/urn:li:activity:7075130044678881280?updateEntityUrn=urn%3Ali%3Afs_feedUpdate%3A%28V2%2Curn%3Ali%3Aactivity%3A7075130044678881280%29" target="_blank" rel="noopener noreferrer" class="">My colleague Mickey Boxell has led the Kubernetes documentation release team</a>, we have added support to <a href="https://medium.com/oracledevs/deploy-thanos-receive-with-native-oci-object-storage-on-kubernetes-829326ea0bc6" target="_blank" rel="noopener noreferrer" class="">Thanos and OCI Object Storage</a>, external-dns and we have recently made <a href="https://istio.io/" target="_blank" rel="noopener noreferrer" class="">Istio</a> available <a href="https://medium.com/oracledevs/cross-region-file-replication-with-longhorn-in-oracle-cloud-and-kubernetes-de5a5b82e4b7" target="_blank" rel="noopener noreferrer" class="">as a native OKE addon</a>.</p>
<p>All this is a long-winded way to announce that we have contributed to <a href="https://www.opencost.io/" target="_blank" rel="noopener noreferrer" class="">OpenCost</a> and <a href="https://www.opencost.io/blog/opencost-1.109" target="_blank" rel="noopener noreferrer" class="">added support for Oracle Cloud</a>, courtesy of my colleague <a href="https://github.com/anders-swanson" target="_blank" rel="noopener noreferrer" class="">Anders Swanson</a>.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="what-is-opencost">What is OpenCost?<a href="https://opencost.io/blog/oracle#what-is-opencost" class="hash-link" aria-label="Direct link to What is OpenCost?" title="Direct link to What is OpenCost?" translate="no">​</a></h2>
<p>From the horse’s mouth:</p>
<p><em><strong>OpenCost is a vendor-neutral open source project for measuring and allocating cloud infrastructure and container costs in real time. Built by Kubernetes experts and supported by Kubernetes practitioners, OpenCost shines a light into the black box of Kubernetes spend.</strong></em></p>
<p>Using OpenCost, you should be able to track the cost of running any Kubernetes clusters running on Oracle Cloud:</p>
<ul>
<li class="">OKE: Oracle’s managed Kubernetes service</li>
<li class="">user-managed: Kubernetes that you run yourself e.g. <a href="https://docs.oracle.com/en/operating-systems/olcne/" target="_blank" rel="noopener noreferrer" class="">OCNE</a>, <a href="https://medium.com/@lmukadam/k3s-on-oci-a-kubernetes-cluster-in-under-5-mins-d7c194c19d59" target="_blank" rel="noopener noreferrer" class="">K3s</a> on Oracle Cloud</li>
</ul>
<p>For the purpose of this article, we’ll use OKE. As I mentioned in a <a href="https://medium.com/oracledevs/announcing-release-of-terraform-oke-kubernetes-module-5-0-part-2-dca5bdd14c6b" target="_blank" rel="noopener noreferrer" class="">previous post</a>, you now have an astounding range of options to run your various workloads on OKE. From traditional Intel-based node pools to bare metal computes to HPC shapes running on ultra-low latency RDMA cluster network (very handy if you are in the AI/ML business), you can run them all on OKE and let us worry about the heavy lifting for you.</p>
<p>However, whenever Kubernetes and AI/ML are mentioned to customers, many users tend to picture thousands of servers and an astronomical sum to run these and are as a result, quite apprehensive to jump on the train. Well, <a href="https://blog.bradfieldcs.com/you-are-not-google-84912cf44afb" target="_blank" rel="noopener noreferrer" class="">you are still not running a planetary search engine</a> so it’s very unlikely that you have such a massive bill to foot.</p>
<p>With OpenCost support for OCI, you can now have a better visibility of these costs and thus be a lot more judicious when planning your cluster.</p>
<p>Let’s get started.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="installing-opencost-on-oke">Installing OpenCost on OKE<a href="https://opencost.io/blog/oracle#installing-opencost-on-oke" class="hash-link" aria-label="Direct link to Installing OpenCost on OKE" title="Direct link to Installing OpenCost on OKE" translate="no">​</a></h2>
<p>Use the <a href="https://github.com/oracle-terraform-modules/terraform-oci-oke" target="_blank" rel="noopener noreferrer" class="">Terraform module for OKE</a> to create a cluster. We’ll create a small cluster of 1 node pool and 3 worker nodes to get started. OpenCost requires <a href="https://prometheus.io/" target="_blank" rel="noopener noreferrer" class="">Prometheus</a> so let’s follow the guide install it:</p>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">helm install prometheus — repo https://prometheus-community.github.io/helm-charts prometheus \</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">--namespace prometheus-system — create-namespace \</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">--set prometheus-pushgateway.enabled=false \</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">--set alertmanager.enabled=false \</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"> -f https://raw.githubusercontent.com/opencost/opencost/develop/kubernetes/prometheus/extraScrapeConfigs.yaml</span><br></div></code></pre></div></div>
<p>Let’s now install OpenCost:</p>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">kubectl apply — namespace opencost -f https://raw.githubusercontent.com/opencost/opencost/develop/kubernetes/opencost.yaml</span><br></div></code></pre></div></div>
<p>We can now test OpenCost:</p>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">kubectl port-forward --namespace opencost service/opencost 9003:9090</span><br></div></code></pre></div></div>
<p>And we can see a nice chart giving us a breakdown of running OKE:</p>
<p><img decoding="async" loading="lazy" alt="OpenCost - OKE" src="https://opencost.io/assets/images/oracle2-2e88d3dc842b1774db50ce2af273e49c.jpg" width="1884" height="603" class="img_ev3q"></p>
<p>We can also see a more detailed breakdown by containers:</p>
<p><img decoding="async" loading="lazy" alt="Breakdown by containers" src="https://opencost.io/assets/images/oracle3-52156366b125c50180fe4e1a93f790e3.jpg" width="1898" height="830" class="img_ev3q"></p>
<p>But how do we know it’s really picking up the Oracle Cloud pricing? Retrieve the OpenCost pod name:</p>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">kubectl -n opencost get pods</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">NAME                        READY   STATUS    RESTARTS   AGE</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">opencost-794c54d566-5sh45   2/2     Running   0          42s</span><br></div></code></pre></div></div>
<p>And check the logs:</p>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">kubectl logs -f opencost-794c54d566-5sh45</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">2024-02-24T13:43:16.091546797Z ??? Log level set to info</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">2024-02-24T13:43:16.091621789Z INF Starting cost-model version dev (HEAD)</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">2024-02-24T13:43:16.091708313Z INF Prometheus/Thanos Client Max Concurrency set to 5</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">2024-02-24T13:43:16.096096365Z INF Success: retrieved the 'up' query against prometheus at: http://prometheus-server.prometheus-system.svc</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">...</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">2024-02-24T13:43:16.205189991Z INF Found ProviderID starting with "oracle", using Oracle Provider</span><br></div></code></pre></div></div>
<p>You can see it’s now found the ProviderID to be Oracle.</p>
<p>I would like to conclude by thanking my colleague Anders Swanson for his contribution to make this possible. If you have ideas and suggestions about how we can make OpenCost work better for you especially on OCI, please do not hesitate to reach out to us.</p>]]></content>
        <author>
            <name>Matt Ray</name>
            <uri>https://github.com/mattray</uri>
        </author>
        <category label="opencost" term="opencost"/>
        <category label="oracle" term="oracle"/>
        <category label="oci" term="oci"/>
        <category label="integrations" term="integrations"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[OpenCost Introduces Carbon Costs]]></title>
        <id>https://opencost.io/blog/carbon-costs</id>
        <link href="https://opencost.io/blog/carbon-costs"/>
        <updated>2024-03-20T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[The CNCF OpenCost project is increasing its scope to help environmental sustainability within the tech industry by introducing carbon cost emissions tracking across Kubernetes and cloud spend. This initiative comes as a response to the recognition of the growing environmental impact associated with cloud computing. By integrating carbon cost tracking into its framework, OpenCost aims to empower organizations to make informed decisions about their technology usage, taking into account not only the financial expenses but also the environmental impact.]]></summary>
        <content type="html"><![CDATA[<p>The CNCF <a href="https://opencost.io/" target="_blank" rel="noopener noreferrer" class="">OpenCost</a> project is increasing its scope to help environmental sustainability within the tech industry by introducing carbon cost emissions tracking across Kubernetes and cloud spend. This initiative comes as a response to the recognition of the growing environmental impact associated with cloud computing. By integrating carbon cost tracking into its framework, OpenCost aims to empower organizations to make informed decisions about their technology usage, taking into account not only the financial expenses but also the environmental impact.</p>
<p><a href="https://kubecost.com/" target="_blank" rel="noopener noreferrer" class="">Kubecost</a> joined efforts with <a href="https://www.thoughtworks.com/" target="_blank" rel="noopener noreferrer" class="">ThoughtWorks</a> and their open source <a href="https://cloudcarbonfootprint.org/" target="_blank" rel="noopener noreferrer" class="">Cloud Carbon Footprint</a> tool to bring resource-level carbon footprint monitoring data into OpenCost.</p>
<p><a href="https://cloudcarbonfootprint.org/" target="_blank" rel="noopener noreferrer" class=""><img decoding="async" loading="lazy" alt="Cloud Carbon Footprint" src="https://opencost.io/assets/images/opencost-ccf-d961221c16ce703935321c300fc7d550.png" width="256" height="146" class="img_ev3q"></a></p>
<p>"We are delighted to see Cloud Carbon Footprint integrated with Kubecost, a phenomenal cost management tool, and the underlying open source OpenCost project" said Ajay Chankramath, Head of Platform Engineering, responsible for the FinOps/GreenOps at Thoughtworks. "As organizations increasingly prioritize sustainability alongside financial efficiency, this integration empowers users to make informed decisions that benefit both their bottom line and the environment."</p>
<p>Cloud Carbon Footprint provides carbon costs across AWS, Azure, and GCP. OpenCost carbon costs support is currently in the mainline <a href="https://github.com/opencost/opencost" target="_blank" rel="noopener noreferrer" class="">develop branch of OpenCost</a> and will be available in the upcoming OpenCost 1.110 release. The OpenCost API has been extended to enable access and the OpenCost UI will be extended to support carbon costs.</p>
<p>**Example /allocation/carbon API  response data: **</p>
<div class="language-json codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-json codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token property" style="color:#36acaa">"code"</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">200</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token property" style="color:#36acaa">"data"</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">[</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token property" style="color:#36acaa">"cluster-one/gke-dev-1-kc-cloud-pool-80a91fb4-fbjy/alan-prom/alan-prom-prometheus-server-6d7bfd6f8d-gp2qc/prometheus-server"</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token property" style="color:#36acaa">"co2e"</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">0.00021789412060017551</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token property" style="color:#36acaa">"cluster-one/gke-dev-1-n2-standard-8-c01e010c-021v/alan-prom/alan-prom-cost-analyzer-86c75db68f-j4clf/cost-analyzer-frontend"</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token property" style="color:#36acaa">"co2e"</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">5.8024376361348894e-06</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token property" style="color:#36acaa">"cluster-one/gke-dev-1-n2-standard-8-c01e010c-021v/alan-prom/alan-prom-cost-analyzer-86c75db68f-j4clf/cost-model"</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token property" style="color:#36acaa">"co2e"</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">0.00011605019011287359</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token property" style="color:#36acaa">"cluster-one/gke-dev-1-n2-standard-8-c01e010c-021v/nick/kubecost-nick-aggregator-0/aggregator"</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token property" style="color:#36acaa">"co2e"</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">0.0005701628137437462</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token property" style="color:#36acaa">"cluster-one/gke-dev-1-n2-standard-8-c01e010c-021v/nick/kubecost-nick-cost-analyzer-7bbd5f4b6c-z4pqc/cost-analyzer-frontend"</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token property" style="color:#36acaa">"co2e"</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">5.801292027651357e-06</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token property" style="color:#36acaa">"cluster-one/gke-dev-1-n2-standard-8-c01e010c-021v/nick/kubecost-nick-cost-analyzer-7bbd5f4b6c-z4pqc/cost-model"</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token property" style="color:#36acaa">"co2e"</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">0.00011602584055302713</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token property" style="color:#36acaa">"cluster-one/gke-dev-1-n2-standard-8-c01e010c-kb6f/nick/kubecost-nick-aggregator-0/aggregator"</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token property" style="color:#36acaa">"co2e"</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">7.461035614569218e-05</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token property" style="color:#36acaa">"cluster-one/gke-dev-1-n2-standard-8-c01e010c-nz03/alex-sonarqube/sonarqube-sonarqube-0/sonarqube"</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token property" style="color:#36acaa">"co2e"</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">0.0002412874789797606</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token property" style="color:#36acaa">"cluster-one/gke-dev-1-n2-standard-8-c01e010c-nz03/ingress-nginx/ingress-nginx-controller-6859dbc4dc-cfjd8/controller"</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token property" style="color:#36acaa">"co2e"</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">5.802438122382271e-05</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token property" style="color:#36acaa">"cluster-one/gke-dev-1-n2-standard-8-c01e010c-nz03/kaelan/kaelan-kc-cost-analyzer-89658f954-ggsmp/aggregator"</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token property" style="color:#36acaa">"co2e"</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">7.249046165488723e-05</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">]</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><br></div></code></pre></div></div>
<p>Through the incorporation of carbon emissions tracking, OpenCost provides a valuable tool for organizations to assess and mitigate their environmental impact in line with sustainability goals. By quantifying the carbon footprint of cloud-based services and digital infrastructures, organizations can optimize resource allocation, minimize waste, and prioritize eco-friendly solutions. Moreover, this initiative fosters collaboration and knowledge-sharing within the tech community, encouraging the development of best practices for reducing carbon emissions across the industry. We look forward to expanding our coverage and sharing our findings with other tools and platforms for both a more sustainable digital ecosystem and the planet as a whole.</p>]]></content>
        <author>
            <name>Matt Ray</name>
            <uri>https://github.com/mattray</uri>
        </author>
        <category label="opencost" term="opencost"/>
        <category label="cncf" term="cncf"/>
        <category label="kubecon" term="kubecon"/>
        <category label="carbon" term="carbon"/>
        <category label="integrations" term="integrations"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[OpenCost at KubeCon Europe 2024]]></title>
        <id>https://opencost.io/blog/kubecon-eu-2024</id>
        <link href="https://opencost.io/blog/kubecon-eu-2024"/>
        <updated>2024-03-14T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[KubeCon Europe 2024 is coming up next week in Paris March 19-22 and we're looking forward to all the OpenCost news and events!]]></summary>
        <content type="html"><![CDATA[<p><a href="https://events.linuxfoundation.org/kubecon-cloudnativecon-europe/" target="_blank" rel="noopener noreferrer" class="">KubeCon Europe 2024</a> is coming up next week in Paris March 19-22 and we're looking forward to all the OpenCost news and events!</p>
<p><img decoding="async" loading="lazy" alt="KubeCon Europe 2024" src="https://opencost.io/assets/images/opencost-kubecon-eu-2024-f6bbdafa83544770bb7ff5eeb48a8bd0.png" width="2400" height="500" class="img_ev3q"></p>
<p>To kick things off on Tuesday there will be a Project Lightning Talk <a href="https://kccnceu2024.sched.com/event/1aQWQ/monitoring-kubernetes-and-cloud-spend-with-opencost-project-lightning-talk?iframe=no" target="_blank" rel="noopener noreferrer" class="">Monitoring Kubernetes and Cloud Spend with OpenCost</a> at 10:00 am in Pavilion 7, Level 7.1 Room D. This will be a introduction to OpenCost as a foundation for monitoring Kubernetes and cloud costs. There will be opportunities to follow up after the session, so introduce yourself and we can talk about the project afterwards.</p>
<p>OpenCost will be in the <a href="https://events.linuxfoundation.org/kubecon-cloudnativecon-europe/program/project-engagement/#project-pavilion" target="_blank" rel="noopener noreferrer" class="">Project Pavilion</a> on Wednesday 3:00-8:00pm and Friday 12:30-2:30pm in Kiosk PP11-B. Stop by with your questions, grab some stickers and other swag, or just drop in to discuss the latest news in the OpenCost community. All OpenCost community members are welcome to spend some time at the kiosk.</p>
<p>There has been a lot of new development and features launched since <a href="https://www.opencost.io/blog/kubecon-na-2023" target="_blank" rel="noopener noreferrer" class="">KubeCon NA 2023</a>, we're eager to talk about some major new features that we'll be discussing at KubeCon EU. We'll be involved with a number of discussions at the event, interviews, and attending sessions. If you want to catch up at KubeCon EU, you can drop an email at <a href="mailto:opencost-kubecost@wwpdl.vnet.ibm.com" target="_blank" rel="noopener noreferrer" class="">opencost-kubecost@wwpdl.vnet.ibm.com</a> or reach out in Slack. It's going to be a great week, see you there!</p>]]></content>
        <author>
            <name>Matt Ray</name>
            <uri>https://github.com/mattray</uri>
        </author>
        <category label="opencost" term="opencost"/>
        <category label="cncf" term="cncf"/>
        <category label="kubecon" term="kubecon"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Repost: Port & OpenCost: Bringing open source cost monitoring for cloud native environments to developers]]></title>
        <id>https://opencost.io/blog/port</id>
        <link href="https://opencost.io/blog/port"/>
        <updated>2024-03-07T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[Reposted from the Port blog Bringing open source cost monitoring for cloud native environments to developers]]></summary>
        <content type="html"><![CDATA[
<p>Reposted from the <a href="https://www.getport.io/blog/" target="_blank" rel="noopener noreferrer" class="">Port blog</a>: <a href="https://www.getport.io/blog/port-opencost-bringing-open-source-cost-monitoring-for-cloud-native-environments-to-developers" target="_blank" rel="noopener noreferrer" class="">Port &amp; OpenCost: Bringing open source cost monitoring for cloud native environments to developers</a></p>
<p><img decoding="async" loading="lazy" alt="Port + OpenCost" src="https://opencost.io/assets/images/port-opencost-009a8fdd6b61b85338230f4749f13595.png" width="1372" height="143" class="img_ev3q"></p>
<p><a href="https://www.getport.io/" target="_blank" rel="noopener noreferrer" class="">Port</a> officially integrates with OpenCost. This brings together <a href="https://docs.getport.io/build-your-software-catalog/sync-data-to-catalog/cloud-cost/opencost/#cost" target="_blank" rel="noopener noreferrer" class="">OpenCost data and Port’s internal developer portal</a>, providing developers with the autonomy to understand and manage the cost associated with their work as well as providing managers with alerts, scorecards and initiatives that make it much easier to control costs.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="who-are-port-and-opencost">Who are Port and OpenCost?<a href="https://opencost.io/blog/port#who-are-port-and-opencost" class="hash-link" aria-label="Direct link to Who are Port and OpenCost?" title="Direct link to Who are Port and OpenCost?" translate="no">​</a></h2>
<p>OpenCost is a vendor-neutral open source project from the Cloud Native Computing Foundation for measuring and allocating cloud infrastructure and container costs in real time. Built by Kubernetes experts and supported by Kubernetes practitioners, OpenCost shines a light into the black box of Kubernetes and cloud spend.</p>
<p>Port is an open internal developer portal, owned by platform engineering teams and built for developers. Port consolidates everything developers need to know and execute to deliver software autonomously and to comply with organizational standards. Internal developer portals such as Port are gaining popularity since the need to create an end-to-end unified developer experience became obvious, due to the increasing complexity of cloud native application development.</p>
<p>Unlocking new possibilities together</p>
<p>As part of the platform engineering movement there is a focus on bringing everything in one place, so developers can become autonomous and managers can easily track engineering standards compliance. This is also relevant to cost data, with the goal of making developers more cost aware since  they are the ones who build the applications and are therefore responsible to optimize them, also in terms of cost, both for the production environment and in earlier stages of the SDLC.</p>
<p>However, cloud cost reports are not developer friendly,  and can be overwhelming since it is difficult to relate the cost of a cloud service to an application.</p>
<p>When you integrate OpenCost data into a developer portal you’re presenting cost data in the central place that developers use to access anything SDLC. Showing cost data to developers, in context of the cloud environment and services they are developing provides developers with easy to understand data that they can act upon, and immediately see if something is amiss.</p>
<p>The OpenCost integration not only displays cost per service but also per namespace and can break down the cost to CPU, memory, load balancer, network cost etc.  Managers can use it to understand costs by business units or teams, saving them the need to dig into complex reports. As OpenCost continues to add more cloud billing coverage we'll continue to look for ways to expand the integration for our users.</p>
<p><a href="https://opencost.io/assets/files/port-1d12ad76f4501352082b55bf16a62744.png" target="_blank" class=""><img decoding="async" loading="lazy" alt="OpenCost Port Integration" src="https://opencost.io/assets/images/port-1d12ad76f4501352082b55bf16a62744.png" width="1677" height="778" class="img_ev3q"></a></p>
<p>To learn more about the integration, go here
<a href="https://docs.getport.io/build-your-software-catalog/sync-data-to-catalog/cloud-cost/opencost/" target="_blank" rel="noopener noreferrer" class="">https://docs.getport.io/build-your-software-catalog/sync-data-to-catalog/cloud-cost/opencost/</a></p>]]></content>
        <author>
            <name>Matt Ray</name>
            <uri>https://github.com/mattray</uri>
        </author>
        <category label="opencost" term="opencost"/>
        <category label="port" term="port"/>
        <category label="integrations" term="integrations"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[OpenCost 1.109 Brings Docker and Oracle Cloud Infrastructure Support]]></title>
        <id>https://opencost.io/blog/opencost-1.109</id>
        <link href="https://opencost.io/blog/opencost-1.109"/>
        <updated>2024-02-28T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[OpenCost 1.109.0 is now available and has a host of new features, enhancements, and bug fixes. This release has over 200 commits from 24 individuals and 8 of them are from first-time contributors. This is also the first release with a non-Kubecost Maintainer. Highlights from the release include:]]></summary>
        <content type="html"><![CDATA[<p><a href="https://github.com/opencost/opencost/releases/tag/v1.109.0" target="_blank" rel="noopener noreferrer" class="">OpenCost 1.109.0</a> is now available and has a host of new features, enhancements, and bug fixes. This release has over 200 commits from 24 individuals and 8 of them are from first-time contributors. This is also the first release with a <a href="https://github.com/opencost/opencost/blob/develop/MAINTAINERS.md" target="_blank" rel="noopener noreferrer" class="">non-Kubecost Maintainer</a>. Highlights from the release include:</p>
<ul>
<li class=""><a href="https://www.opencost.io/docs/configuration/oracle" target="_blank" rel="noopener noreferrer" class="">Oracle Cloud Infrastructure</a> support has been added, enabling Oracle Cloud Infrastructure <a href="https://docs.oracle.com/en-us/iaas/Content/ContEng/home.htm" target="_blank" rel="noopener noreferrer" class="">Container Engine for Kubernetes</a> (OKE) users to track their Cost Allocations across their deployments.</li>
<li class="">Additional patches for <a href="https://www.opencost.io/docs/installation/docker" target="_blank" rel="noopener noreferrer" class="">Docker</a> have been merged, making it easier to track Cloud Costs without requiring Kubernetes to be installed. This will allow Cloud Costs and other non-Kubernetes functionality to be accessed wherever you may need it.</li>
<li class="">The <a href="https://github.com/opencost/opencost/pkgs/container/opencost" target="_blank" rel="noopener noreferrer" class="">OpenCost</a> and <a href="https://github.com/opencost/opencost/pkgs/container/opencost-ui" target="_blank" rel="noopener noreferrer" class="">OpenCost-UI</a> containers have been moved to the <a href="https://github.com/orgs/opencost/packages" target="_blank" rel="noopener noreferrer" class="">GitHub Container Registry</a>. The <a href="https://github.com/opencost/opencost-helm-chart" target="_blank" rel="noopener noreferrer" class="">OpenCost Helm Chart</a>, the <a href="https://www.opencost.io/docs/integrations/opencost-exporter" target="_blank" rel="noopener noreferrer" class="">Prometheus OpenCost Exporter</a>, and the OpenCost <a href="https://github.com/opencost/opencost/blob/develop/kubernetes/opencost.yaml" target="_blank" rel="noopener noreferrer" class="">manifest</a> are all being updated to reflect the new download location.</li>
<li class="">The OpenCost UI now shows the version of OpenCost being used in the footer. This is included in the startup logging of each container as well, but it should help make debugging a little easier.</li>
</ul>
<p>There were many more community-provided enhancements, fixes, and additional tests that were added to continue improving OpenCost. Please join us in the <a href="https://www.opencost.io/docs/community" target="_blank" rel="noopener noreferrer" class="">OpenCost community</a> and help build our next great release!</p>]]></content>
        <author>
            <name>Matt Ray</name>
            <uri>https://github.com/mattray</uri>
        </author>
        <category label="opencost" term="opencost"/>
        <category label="oci" term="oci"/>
        <category label="docker" term="docker"/>
        <category label="github" term="github"/>
        <category label="cloud" term="cloud"/>
        <category label="integrations" term="integrations"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[OpenCost Exporter is now in the Prometheus Community Helm Charts]]></title>
        <id>https://opencost.io/blog/prometheus-opencost-exporter</id>
        <link href="https://opencost.io/blog/prometheus-opencost-exporter"/>
        <updated>2023-12-18T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[Using OpenCost as a Prometheus metric exporter has long been a supported use case, but now you can get this from the standard Prometheus Community Helm Charts repository. OpenCost is the open source CNCF project for monitoring cloud and Kubernetes infrastructure costs. For users who want to export various cost metrics from OpenCost without setting up any other OpenCost dependencies, the Prometheus OpenCost Exporter makes it easy to get up and running with minimal steps. If you’re using Helm already, it’s as simple as]]></summary>
        <content type="html"><![CDATA[<p>Using OpenCost as a Prometheus metric exporter has long been a <a href="https://www.opencost.io/docs/integrations/opencost-exporter" target="_blank" rel="noopener noreferrer" class="">supported use case</a>, but now you can get this from the standard <a href="https://github.com/prometheus-community/helm-charts" target="_blank" rel="noopener noreferrer" class="">Prometheus Community Helm Charts repository</a>. OpenCost is the open source CNCF project for monitoring cloud and Kubernetes infrastructure costs. For users who want to <a href="https://www.opencost.io/docs/integrations/prometheus#available-metrics" target="_blank" rel="noopener noreferrer" class="">export various cost metrics</a> from OpenCost without setting up any other OpenCost dependencies, the <a href="https://github.com/prometheus-community/helm-charts/tree/main/charts/prometheus-opencost-exporter" target="_blank" rel="noopener noreferrer" class="">Prometheus OpenCost Exporter</a> makes it easy to get up and running with minimal steps. If you’re using <a href="https://helm.sh/" target="_blank" rel="noopener noreferrer" class="">Helm</a> already, it’s as simple as</p>
<p><strong>Add the Helm Chart Repository</strong></p>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">helm repo add prometheus-community https://prometheus-community.github.io/helm-charts</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">helm repo update</span><br></div></code></pre></div></div>
<p><strong>Install the Chart</strong></p>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">helm install [RELEASE_NAME] prometheus-community/prometheus-opencost-exporter</span><br></div></code></pre></div></div>
<p>And this will install the latest version of the Prometheus OpenCost Exporter (currently 1.107.1). The Prometheus OpenCost Exporter will be kept in sync with future releases of OpenCost going forward. If you want to change any of the default settings, you can provide your own <a href="https://github.com/prometheus-community/helm-charts/blob/main/charts/prometheus-opencost-exporter/values.yaml" target="_blank" rel="noopener noreferrer" class="">values.yaml</a> as necessary.</p>
<p><img decoding="async" loading="lazy" alt="Prometheus Query" src="https://opencost.io/assets/images/prometheus-query-88a1cc020228a4fcc242da3e494881bc.png" width="1854" height="1678" class="img_ev3q"></p>
<p>For detailed information on leveraging the OpenCost Exporter within Prometheus, check out the <a href="https://www.opencost.io/docs/integrations/opencost-exporter" target="_blank" rel="noopener noreferrer" class="">OpenCost Prometheus Exporter documentation</a> and the list of <a href="https://www.opencost.io/docs/integrations/prometheus#available-metrics" target="_blank" rel="noopener noreferrer" class="">available metrics</a>. It’s easier than ever to get OpenCost deployed for your specific environment requirements, we look forward to solving even more use cases in the future! Join us in the <a href="https://www.opencost.io/docs/community" target="_blank" rel="noopener noreferrer" class="">OpenCost community</a> and help build our open source community!</p>]]></content>
        <author>
            <name>Matt Ray</name>
            <uri>https://github.com/mattray</uri>
        </author>
        <category label="opencost" term="opencost"/>
        <category label="prometheus" term="prometheus"/>
        <category label="helm" term="helm"/>
        <category label="integrations" term="integrations"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Cloud Costs Monitoring in Docker]]></title>
        <id>https://opencost.io/blog/k8sless-opencost</id>
        <link href="https://opencost.io/blog/k8sless-opencost"/>
        <updated>2023-11-21T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[OpenCost  is an open source implementation for Kubernetes cost monitoring and now cloud cost monitoring for AWS, Azure, and GCP.]]></summary>
        <content type="html"><![CDATA[<p><a href="https://opencost.io/" target="_blank" rel="noopener noreferrer" class="">OpenCost</a>  is an open source implementation for Kubernetes cost monitoring and now cloud cost monitoring for AWS, Azure, and GCP.
The project makes all of this data accessible via an API and user interface.
While discussing the idea of running OpenCost on platforms besides Kubernetes we realized that with this new <a href="https://www.opencost.io/blog/cloud-costs" target="_blank" rel="noopener noreferrer" class="">Cloud Costs feature</a> there are users who want API access to their cloud billing data without needing to run on Kubernetes.
I opened the Issue <a href="https://github.com/opencost/opencost/issues/2268" target="_blank" rel="noopener noreferrer" class="">OpenCost without Kubernetes #2268</a> and as luck would have it, we had our internal Hackathon last week.</p>
<p>If you're not familiar with <a href="https://opencost.io/" target="_blank" rel="noopener noreferrer" class="">OpenCost</a>, it's the open source CNCF project for monitoring Kubernetes and cloud spending.
It's a Golang implementation of the <a href="https://www.opencost.io/docs/specification" target="_blank" rel="noopener noreferrer" class="">OpenCost Specification</a> for monitoring Kubernetes cloud costs.
It has an optional web UI and you can also run it as a Prometheus metrics exporter.
The code is all at <a href="https://github.com/opencost/opencost" target="_blank" rel="noopener noreferrer" class="">https://github.com/opencost/opencost</a> and you can learn more about the project at <a href="https://opencost.io/" target="_blank" rel="noopener noreferrer" class="">https://opencost.io</a></p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="running-opencost-without-kubernetes">Running OpenCost without Kubernetes<a href="https://opencost.io/blog/k8sless-opencost#running-opencost-without-kubernetes" class="hash-link" aria-label="Direct link to Running OpenCost without Kubernetes" title="Direct link to Running OpenCost without Kubernetes" translate="no">​</a></h2>
<p>Given that not everyone who wants to look at their cloud billing is using Kubernetes, to run without Kubernetes you can either run from Docker or directly from the CLI. There are 3 environment variables you'll need to set:</p>
<ul>
<li class=""><code>KUBERNETES_ENABLED=false</code> (default is <code>true</code>)</li>
<li class=""><code>CLOUD_COST_ENABLED=true</code> (default is <code>false</code> since it's beta)</li>
<li class=""><code>CLOUD_COST_CONFIG_PATH=/path/to/file</code> - you'll need to <a href="https://www.opencost.io/docs/configuration/" target="_blank" rel="noopener noreferrer" class="">provide your credentials</a> in a file (default is <code>cloud-integration.json</code>). <a href="https://gist.github.com/mattray/090a43aa4e64f8fc78572cd8d504a4b7" target="_blank" rel="noopener noreferrer" class="">Here’s an example file</a>.</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="running-with-docker">Running with Docker<a href="https://opencost.io/blog/k8sless-opencost#running-with-docker" class="hash-link" aria-label="Direct link to Running with Docker" title="Direct link to Running with Docker" translate="no">​</a></h3>
<p>If you want to run with Docker, you can pull down the image from <a href="https://hub.docker.com/repository/docker/mattray/opencost/tags" target="_blank" rel="noopener noreferrer" class="">docker.io/mattray/opencost<!-- -->:k8sless</a> (or build it yourself).</p>
<p><code>docker pull mattray/opencost:k8sless</code></p>
<p>and run it with</p>
<p><code>docker run -e KUBERNETES_ENABLED=false -e CLOUD_COST_ENABLED=true -e CLOUD_COST_CONFIG_PATH=/tmp/cloud-integration.json -p 9003:9003 -d -v /tmp:/tmp mattray/opencost:k8sless</code></p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="building-and-running-from-the-cli">Building and Running from the CLI<a href="https://opencost.io/blog/k8sless-opencost#building-and-running-from-the-cli" class="hash-link" aria-label="Direct link to Building and Running from the CLI" title="Direct link to Building and Running from the CLI" translate="no">​</a></h3>
<p>You can <a href="https://github.com/mattray/opencost/tree/cloudclost-k8sless" target="_blank" rel="noopener noreferrer" class="">check out the code</a> and run <code>make</code> to build.</p>
<p>To test it, run:</p>
<p><code>KUBERNETES_ENABLED=false CLOUD_COST_ENABLED=true CLOUD_COST_CONFIG_PATH='cloud-costs.json' ./costmodel</code></p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="accessing-the-cloud-costs-api">Accessing the Cloud Costs API<a href="https://opencost.io/blog/k8sless-opencost#accessing-the-cloud-costs-api" class="hash-link" aria-label="Direct link to Accessing the Cloud Costs API" title="Direct link to Accessing the Cloud Costs API" translate="no">​</a></h2>
<p>The OpenCost <a href="https://www.opencost.io/docs/integrations/api#cloudcost" target="_blank" rel="noopener noreferrer" class="">Cloud Cost API</a> is exposed on port 9003, you test with</p>
<p><code>curl -G http://localhost:9003/cloudCost -d window=7d -d aggregate=provider | jq</code></p>
<p>The <a href="https://www.opencost.io/docs/integrations/api#cloudcost" target="_blank" rel="noopener noreferrer" class="">Cloud Cost API</a> provides the available query parameters and the <a href="https://www.opencost.io/docs/integrations/api-examples#cloudcost-examples" target="_blank" rel="noopener noreferrer" class="">API Examples</a> show how you could query the Services by your Provider or how to get billing items over a range of time. There are more Cloud Cost API endpoints available in the code, the documentation hasn’t kept up with all the new options so far.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="using-the-opencost-ui-from-docker">Using the OpenCost UI from Docker<a href="https://opencost.io/blog/k8sless-opencost#using-the-opencost-ui-from-docker" class="hash-link" aria-label="Direct link to Using the OpenCost UI from Docker" title="Direct link to Using the OpenCost UI from Docker" translate="no">​</a></h2>
<p>The OpenCost UI for Cloud Costs is still under development, but you can grab the beta build with</p>
<p><code>docker pull mattray/opencost-ui:docker-ui</code></p>
<p>and run it from Docker without Kubernetes:</p>
<p><code>docker run -p 9090:9090 -d mattray/opencost-ui:docker-ui</code></p>
<p>Go to <a href="http://localhost:9090/cloud" target="_blank" rel="noopener noreferrer" class="">http://localhost:9090/cloud</a> to check it out. The <strong>Cost Allocation</strong> tab will be empty because there’s no Kubernetes data, but the <strong>Cloud Costs</strong> should have whatever clouds you’ve configured access.</p>
<p><a href="https://opencost.io/assets/files/screenshot-e18d519e0cfd37c4051b78db7c4324ff.png" target="_blank" class=""><img decoding="async" loading="lazy" alt="OpenCost Cloud Costs" src="https://opencost.io/assets/images/screenshot-e18d519e0cfd37c4051b78db7c4324ff.png" width="3104" height="2024" class="img_ev3q"></a></p>
<p>The OpenCost UI already works for local development, you can find instructions <a href="https://github.com/opencost/opencost/tree/develop/ui#running-locally" target="_blank" rel="noopener noreferrer" class="">here</a>.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="walkthrough">Walkthrough<a href="https://opencost.io/blog/k8sless-opencost#walkthrough" class="hash-link" aria-label="Direct link to Walkthrough" title="Direct link to Walkthrough" translate="no">​</a></h2>
<p>If you’d rather just see a quick demo, I’ve recorded a screencast walking through the above steps and connecting with the UI.</p>
<iframe width="840" height="472" src="https://www.youtube.com/embed/rEBaOaHqrK4?si=-mR5lfC9aYHkhPR2" title="OpenCost Cloud Costs with Docker" frameborder="1" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share"></iframe>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="code-changes">Code Changes<a href="https://opencost.io/blog/k8sless-opencost#code-changes" class="hash-link" aria-label="Direct link to Code Changes" title="Direct link to Code Changes" translate="no">​</a></h2>
<p>This should get merged soon, but if you want to work with the branch it’s available here: <a href="https://github.com/mattray/opencost/tree/cloudclost-k8sless" target="_blank" rel="noopener noreferrer" class="">https://github.com/mattray/opencost/tree/cloudclost-k8sless</a> (<a href="https://github.com/opencost/opencost/blob/develop/CONTRIBUTING.md#building-opencost" target="_blank" rel="noopener noreferrer" class="">build instructions</a>). The OpenCost PR is here: <a href="https://github.com/opencost/opencost/pull/2317" target="_blank" rel="noopener noreferrer" class="">opencost/opencost#2317</a></p>
<p>I tested on MacOS with Docker (and EKS, K3s, and Kind for regression-checking), but it probably would work on any Unix-compatible platform (Windows?).</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="next-steps">Next Steps<a href="https://opencost.io/blog/k8sless-opencost#next-steps" class="hash-link" aria-label="Direct link to Next Steps" title="Direct link to Next Steps" translate="no">​</a></h2>
<p>I think there are a lot of use cases we're not aware of yet and hopefully this will get more folks interested in the project. We'll continue expanding documentation on the <a href="https://www.opencost.io/docs/integrations/api#cloudcost" target="_blank" rel="noopener noreferrer" class="">Cloud Costs API</a> and providing more <a href="https://www.opencost.io/docs/integrations/api-examples#cloudcost-examples" target="_blank" rel="noopener noreferrer" class="">examples</a> as it continues to mature. If you're involved in <a href="https://www.finops.org/" target="_blank" rel="noopener noreferrer" class="">FinOps</a> we'll be adding support for the upcoming <a href="https://focus.finops.org/" target="_blank" rel="noopener noreferrer" class="">FOCUS specification</a> for standardized billing, so that will make this even more compelling. Let me know what you think, looking forward to any feedback on how to get cloud billing data available in useful formats to even more people.</p>
<p>If you have any questions, email us at <a href="mailto:opencost-kubecost@wwpdl.vnet.ibm.com" target="_blank" rel="noopener noreferrer" class="">opencost-kubecost@wwpdl.vnet.ibm.com</a>,  join us in <a href="https://slack.cncf.io/" target="_blank" rel="noopener noreferrer" class="">CNCF #opencost Slack</a>, or check out the <a href="https://www.opencost.io/docs/community" target="_blank" rel="noopener noreferrer" class="">OpenCost Community page</a>.</p>]]></content>
        <author>
            <name>Matt Ray</name>
            <uri>https://github.com/mattray</uri>
        </author>
        <category label="opencost" term="opencost"/>
        <category label="docker" term="docker"/>
        <category label="cloud costs" term="cloud costs"/>
        <category label="integrations" term="integrations"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Announcing OpenCost Integration with Microsoft AKS Cost Analysis]]></title>
        <id>https://opencost.io/blog/aks-cost-analysis</id>
        <link href="https://opencost.io/blog/aks-cost-analysis"/>
        <updated>2023-11-16T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[We are pleased to announce that OpenCost is being integrated into Microsoft’s new Azure Kubernetes Service (AKS) Cost Analysis tool to enable usage metrics collection. Microsoft Azure customers can now experience native visibility of cost allocation based on Kubernetes-specific constructs.]]></summary>
        <content type="html"><![CDATA[<p>We are pleased to announce that <a href="https://opencost.io/" target="_blank" rel="noopener noreferrer" class="">OpenCost</a> is being integrated into Microsoft’s new <a href="https://aka.ms/aks/cost-analysis" target="_blank" rel="noopener noreferrer" class="">Azure Kubernetes Service (AKS) Cost Analysis tool</a> to enable usage metrics collection. Microsoft Azure customers can now experience native visibility of cost allocation based on Kubernetes-specific constructs.</p>
<p>AKS Cost Analysis is an add-on for Standard and Premium-tier AKS clusters offered to customers at no additional cost. It provides cost allocation reports directly in the Azure portal. AKS customers can now easily visualize their Kubernetes cost allocations as the foundation for further optimization and anomaly detection.</p>
<p><a href="https://opencost.io/assets/files/namespaces-8769a22cf721a3a1b630e86037bbede8.png" target="_blank" class=""><img decoding="async" loading="lazy" alt="AKS Cost Analysis: Namespaces View" src="https://opencost.io/assets/images/namespaces-8769a22cf721a3a1b630e86037bbede8.png" width="1397" height="881" class="img_ev3q"></a>
<em>New Kubernetes Namespaces view.</em></p>
<p>AKS is also the first Azure service that drills down into the specifics of the service’s granular cost details. These Kubernetes-specific views will surface cost allocation across AKS cluster resources (i.e. VMs, public IPs, disks, etc.). "Our goal in Microsoft Azure is to build Kubernetes-centric experiences on top of vendor-neutral open-source solutions, ensuring that our customers can take advantage of the innovation and portability of the CNCF ecosystem natively in Azure,” said Sean McKenna, Director of Product Management for Azure Cloud Native. “We've really enjoyed partnering with the OpenCost community on this project and are thrilled to get it in the hands of our customers." AKS customers will be able to configure how shared costs are allocated across namespaces.</p>
<p><a href="https://opencost.io/assets/files/cluster-c39487526ec75aac6b84841a08e39bb8.png" target="_blank" class=""><img decoding="async" loading="lazy" alt="AKS Cost Analysis: Cluster View" src="https://opencost.io/assets/images/cluster-c39487526ec75aac6b84841a08e39bb8.png" width="1397" height="882" class="img_ev3q"></a>
<em>New Kubernetes Cluster view.</em></p>
<p>OpenCost is the open source CNCF sandbox project and specification for the real-time monitoring of cloud costs and associated Kubernetes deployments. It models and tracks current and historical Kubernetes cloud spend and resource allocation as well as general cloud costs, which may be used as the basis for cost observability and optimizations. Check out the <a href="https://github.com/opencost/opencost" target="_blank" rel="noopener noreferrer" class="">code on GitHub</a> or <a href="https://www.opencost.io/docs/community" target="_blank" rel="noopener noreferrer" class="">join the community</a>.</p>
<p>Microsoft <a href="https://www.opencost.io/blog/azure-opencost" target="_blank" rel="noopener noreferrer" class="">announced their involvement with OpenCost</a> earlier this year and have been active in the community ever since. Today’s announcement is just another great step in our journey together. Microsoft has committed to helping establish OpenCost as the open source standard for Kubernetes and cloud costs monitoring. If you want to run your own OpenCost deployment, we have <a href="https://www.opencost.io/docs/configuration/azure" target="_blank" rel="noopener noreferrer" class="">Azure-specific instructions</a>, including accessing your own <a href="https://www.opencost.io/docs/configuration/azure#customer-specific-pricing" target="_blank" rel="noopener noreferrer" class="">Price Sheet API</a> and configuring <a href="https://www.opencost.io/docs/configuration/azure#azure-cloud-cost-configuration" target="_blank" rel="noopener noreferrer" class="">Azure Cloud Cost</a> access.</p>
<p>As more AKS users get visibility and understanding of their Kubernetes cloud billing, we’re sure they’ll join us in our goal of building more consistency across all providers. As we continue to ship new features, AKS users will continue to benefit from OpenCost’s success.</p>]]></content>
        <author>
            <name>Matt Ray</name>
            <uri>https://github.com/mattray</uri>
        </author>
        <category label="opencost" term="opencost"/>
        <category label="microsoft" term="microsoft"/>
        <category label="azure" term="azure"/>
        <category label="aks" term="aks"/>
        <category label="integrations" term="integrations"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[OpenCost at KubeCon 2023 Chicago]]></title>
        <id>https://opencost.io/blog/kubecon-na-2023</id>
        <link href="https://opencost.io/blog/kubecon-na-2023"/>
        <updated>2023-11-02T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[KubeCon North America 2023 is coming up next week November 6-9 and we can't wait for all the OpenCost-related events going on!]]></summary>
        <content type="html"><![CDATA[<p>KubeCon North America 2023 is coming up next week November 6-9 and we can't wait for all the OpenCost-related events going on!</p>
<p><img decoding="async" loading="lazy" alt="KubeCon North America 2023" src="https://opencost.io/assets/images/opencost-kubecon-na-2023-75411e7cf2725b77a9b841d484a7de2e.png" width="2400" height="500" class="img_ev3q"></p>
<p>There will be an <a href="https://events.linuxfoundation.org/kubecon-cloudnativecon-north-america/program/project-engagement/#in-person-project-working-session" target="_blank" rel="noopener noreferrer" class="">OpenCost Working Session</a> on Monday from 9:30 - 10:30am in the Hilton Garden Inn McCormick Place on level 3 in the Premier room. Everyone is encouraged to attend, whether you're an end-user, contributor, or just wanting to learn more about the project. We are planning on discussing the status of Incubation, the roadmap for the project, and future development on carbon footprint and the external asset costs.</p>
<p>OpenCost will be at the <a href="https://events.linuxfoundation.org/kubecon-cloudnativecon-north-america/program/project-engagement/#in-person-project-working-session" target="_blank" rel="noopener noreferrer" class="">Project Pavilion</a> in kiosk F34. We're there the entire duration, so be sure to stop by and say "hi", ask questions, and get stickers and other swag. We're looking for more volunteers to staff the kiosk, why don't you drop by and help answer questions?</p>
<p>Kubecost's Alex Meijer and Michael Dresser are giving the talk "<a href="https://kccncna2023.sched.com/event/95e6d14ed317f08831b04d6d0c535a13" target="_blank" rel="noopener noreferrer" class="">Node Size Matters - Running K8s as Cheaply as Possible</a>". They will be presenting a study of the system overhead, one of the biggest "hidden" costs of using Kubernetes, across cloud providers' node families and demonstrate new OpenCost functionality for measuring system overhead. This informative session is Wednesday, November 8 from 5:25pm - 6:00pm at W179.</p>
<p>Mark Poko and JuanJo Ciarlante from Grafana Labs will be presenting "<a href="https://kccncna2023.sched.com/event/1R2vE/wheres-your-money-going-the-beginners-guide-to-measuring-kubernetes-costs-mark-poko-juanjo-ciarlante-grafana-labs" target="_blank" rel="noopener noreferrer" class="">Where's Your Money Going? The Beginners Guide to Measuring Kubernetes Costs</a>". They'll dive into Grafana Labs' usage of OpenCost and how they embed it in their Grafana Cloud platform. We're looking forward to the session Thursday, November 9 from 2:55pm - 3:30pm at W180.</p>
<p>In addition to the OpenCost working session, kiosk, and the presentations we'll be discussing the <a href="https://www.opencost.io/blog/cloud-costs" target="_blank" rel="noopener noreferrer" class="">new cloud costs feature we just launched</a>. Be sure to join us at this week's <a href="https://bit.ly/opencost-calendar" target="_blank" rel="noopener noreferrer" class="">Community Meeting</a> for a sneak peek, or visit the KubeCon kiosk to learn more about cloud costs or anything else OpenCost-related. See you there!</p>]]></content>
        <author>
            <name>Matt Ray</name>
            <uri>https://github.com/mattray</uri>
        </author>
        <category label="opencost" term="opencost"/>
        <category label="cncf" term="cncf"/>
        <category label="kubecon" term="kubecon"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[OpenCost Expands Its Horizon: Introducing Multi-Cloud Cost Monitoring!]]></title>
        <id>https://opencost.io/blog/cloud-costs</id>
        <link href="https://opencost.io/blog/cloud-costs"/>
        <updated>2023-10-31T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[We are thrilled to announce that OpenCost is expanding beyond Kubernetes (K8s) cost monitoring to provide a fully open source cloud cost monitoring solution. This marks our first major expansion since becoming a Cloud Native Computing Foundation (CNCF) project in 2021.]]></summary>
        <content type="html"><![CDATA[<p>We are thrilled to announce that OpenCost is expanding beyond Kubernetes (K8s) cost monitoring to provide a fully open source cloud cost monitoring solution. This marks our first major expansion since becoming a Cloud Native Computing Foundation (CNCF) project in 2021.</p>
<p>In an era where cloud computing has become an integral part of most businesses, keeping track of infrastructure costs can be a daunting task. This is becoming even more challenging with the growing use of shared infrastructure, multi-cloud and an ever increasing number of other infrastructure solutions. As the complexity of cloud environments expands, there is a pressing need for unified and open solutions that provide a clear and normalized view of all infrastructure expenditures. That's where we see OpenCost playing an increasingly key role.</p>
<p><img decoding="async" loading="lazy" alt="OpenCost UI now allows you to monitor cloud cost by service, tag, and more. It also provides the ability to drill down all the way to individual item level." src="https://opencost.io/assets/images/screenshot-fd764c96618816212367a8af053099fe.png" width="2784" height="1654" class="img_ev3q">
<em>OpenCost UI now allows you to monitor cloud cost by service, tag, and more. It also provides the ability to drill down all the way to individual item level</em></p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="multi-cloud-cost-monitoring">Multi-Cloud Cost Monitoring<a href="https://opencost.io/blog/cloud-costs#multi-cloud-cost-monitoring" class="hash-link" aria-label="Direct link to Multi-Cloud Cost Monitoring" title="Direct link to Multi-Cloud Cost Monitoring" translate="no">​</a></h2>
<p>OpenCost's new multi-cloud cost monitoring solution offers a seamless experience for managing costs across various cloud platforms. With an easy to use interface and simple APIs, OpenCost lets you monitor your cloud expenses on Google Cloud, Amazon Web Services (AWS), and Microsoft Azure in a unified view. And that's just the beginning – we aim to support an increasing number of platforms (e.g. Datadog, MongoDB, etc) in the near future!</p>
<p>Before we delve into why this expansion is important for the OpenCost project, let's take a look at OpenCost multi-cloud cost monitoring in action. Check out our simple demo video to get a glimpse of how this new solution can give you a unified and customizable cloud cost monitoring experience.</p>
<iframe width="840" height="472" src="https://www.youtube.com/embed/lCP4Ci9Kcdg?si=RuDM3e0cKNFgWvpE" title="OpenCost UI Tour" frameborder="1" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share"></iframe>
<p>This initial launch provides users with the ability to aggregate costs by multi-dimensions, view different cost metrics, filter by various dimensions (e.g. tags, services) and more.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="getting-started-with-opencost">Getting Started with OpenCost<a href="https://opencost.io/blog/cloud-costs#getting-started-with-opencost" class="hash-link" aria-label="Direct link to Getting Started with OpenCost" title="Direct link to Getting Started with OpenCost" translate="no">​</a></h2>
<p>To get started, simply <a href="https://www.opencost.io/docs/installation/install" target="_blank" rel="noopener noreferrer" class="">deploy OpenCost</a> and add any number of <a href="https://www.opencost.io/docs/configuration/#cloud-costs" target="_blank" rel="noopener noreferrer" class="">cloud accounts</a> to see a unified view of all costs. You can view <a href="https://www.opencost.io/docs/" target="_blank" rel="noopener noreferrer" class="">OpenCost documentation</a> to learn about APIs usage and more.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="why-is-this-important">Why Is This Important?<a href="https://opencost.io/blog/cloud-costs#why-is-this-important" class="hash-link" aria-label="Direct link to Why Is This Important?" title="Direct link to Why Is This Important?" translate="no">​</a></h2>
<p>In today's diverse cloud landscape, organizations often find themselves managing multiple cloud accounts and/or providers simultaneously. This can lead to a fragmented view of expenses, making it challenging to optimize resources and control costs effectively. OpenCost's multi-cloud cost monitoring solution addresses this issue by providing a single, consolidated interface to normalize and monitor all your cloud costs. This unified perspective simplifies decision-making, cost allocation, and ultimately resource optimization. We believe that having a single view of costs is a critical capability for teams operating a business at medium or large scale built on cloud infrastructure.</p>
<p>Additionally, as cloud environments continue to evolve, there's an increasing demand for monitoring various cost types beyond basic cloud infrastructure. The OpenCost community recognizes this need and intends to extend its customizable interface for other cost types in the near future. We are excited to see the OpenCost community continue to play a significant role in shaping and expanding these capabilities.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="adopting-focus-standards">Adopting FOCUS Standards<a href="https://opencost.io/blog/cloud-costs#adopting-focus-standards" class="hash-link" aria-label="Direct link to Adopting FOCUS Standards" title="Direct link to Adopting FOCUS Standards" translate="no">​</a></h2>
<p>OpenCost not only offers a unified cost monitoring solution but also embraces emerging industry standards. We are proud to announce that we will be implementing the FinOps Open Cost and Usage Specification (FOCUS) being created with community input and the FinOps Foundation. The work being done on this effort will be directly reflected in the OpenCost implementation. From Udam Dewaraja, Chairperson for the FinOps Foundations’ FOCUS Working Group, “We’re excited to see open source projects like OpenCost integrate and align around this new specification, which will help extend the benefits of FOCUS to a wider group of users. The FOCUS project continues to gain industry-wide momentum and contributors for its ability to bring together practitioners, cloud service providers, vendors, and consultants around a common specification for presenting cloud cost and usage data.”</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="about-opencost">About OpenCost<a href="https://opencost.io/blog/cloud-costs#about-opencost" class="hash-link" aria-label="Direct link to About OpenCost" title="Direct link to About OpenCost" translate="no">​</a></h2>
<p>OpenCost is a Cloud Native Computing Foundation (CNCF) project for monitoring and allocating infrastructure and container costs in real time. Our expansion into multi-cloud cost monitoring was made possible through collaboration and contributions from industry leaders. We extend our gratitude to AWS, Grafana Labs, Microsoft , Kubecost, and many others who played a pivotal role in making this project a reality. Together, we look forward to shaping the future of cloud cost monitoring and governance.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="conclusion">Conclusion<a href="https://opencost.io/blog/cloud-costs#conclusion" class="hash-link" aria-label="Direct link to Conclusion" title="Direct link to Conclusion" translate="no">​</a></h2>
<p>OpenCost's multi-cloud cost monitoring provides a fully open source approach for organizations seeking a comprehensive, user-friendly, and standards-compliant solution for managing cloud expenses. With a unified interface, support for various cloud providers, and a commitment to continuous improvement, OpenCost is poised to empower businesses in their cloud cost optimization journey. Get started today and take control of your cloud costs like never before!</p>
<p>Come find us at the OpenCost kiosk at KubeCon North America next week to learn more and to share your thoughts on the project or <a href="https://www.opencost.io/docs/community" target="_blank" rel="noopener noreferrer" class="">join the OpenCost community</a> to get involved!</p>]]></content>
        <author>
            <name>Matt Ray</name>
            <uri>https://github.com/mattray</uri>
        </author>
        <category label="opencost" term="opencost"/>
        <category label="cloud" term="cloud"/>
    </entry>
</feed>