Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
25 commits
Select commit Hold shift + click to select a range
c237306
Blog: Kubernetes observability in 2026, with OpenObserve 1.0 as the b…
saiyam1814 Sep 3, 2026
26acdc4
Pick sample files dynamically, explain the binary files
saiyam1814 Sep 3, 2026
697b8b6
ttv-inspect step: derive node and index path from kubectl
saiyam1814 Sep 3, 2026
6dafa3d
ttv-inspect: delete a previous Job before re-applying
saiyam1814 Sep 3, 2026
a0c1bf8
Add how OpenObserve is different, and what it is not, before the inte…
saiyam1814 Sep 3, 2026
7e49f52
MCP step: remind that O2 and AUTH come from step 1
saiyam1814 Sep 4, 2026
e441197
Step 7: include the template, destination and alert POSTs with their …
saiyam1814 Sep 4, 2026
71403b6
Step 7: say the scheduled alert fires on its second evaluation
saiyam1814 Sep 4, 2026
f26867e
Step 8: show compaction on disk, the storage bill per signal, and que…
saiyam1814 Sep 4, 2026
3b59bd2
Review fixes: ttv diagram blobs, funnel and write-path labels, screen…
saiyam1814 Sep 4, 2026
fd821e7
Preflight and fact-check pass: headings, contrasts, precise internals…
saiyam1814 Sep 4, 2026
ff31a29
Sharp edges: Vortex wording
saiyam1814 Sep 4, 2026
2ab8a6e
Sharp edges: drop two paragraphs, make the PromQL point explicit
saiyam1814 Sep 4, 2026
26601e6
SEO pass from the OpenObserve review: inline links, lead sentences, F…
saiyam1814 Sep 10, 2026
084b62f
Vortex section: link the Parquet vs Vortex metrics benchmark
saiyam1814 Sep 11, 2026
e5e74bd
Drop the DuckDB demonstration, lead step 6 with Claude Code
saiyam1814 Sep 15, 2026
5ade6f1
Step 6: a real Claude Code exchange over MCP, and today's publish date
saiyam1814 Sep 15, 2026
b1d93a5
Flag the 401 in the setup page's Claude Code tab
saiyam1814 Sep 15, 2026
a8532f4
Pre-frame the agent's answer, and link the filed MCP issue
saiyam1814 Sep 15, 2026
aa8c434
Correct the MCP header note: an rc1-only bug, fixed in rc2
saiyam1814 Sep 15, 2026
da0008f
Re-check the version-sensitive steps against 1.0.0 GA
saiyam1814 Sep 15, 2026
5030cef
Re-capture the MCP exchange on 1.0.0 GA
saiyam1814 Sep 15, 2026
be1dd30
Fix the version provenance, which was over-claiming
saiyam1814 Sep 15, 2026
229b2c6
The SLO bug in GA is a missed backport, not an open bug
saiyam1814 Sep 15, 2026
3f34357
SLO backport: the fix reached the release branch a day after the tag
saiyam1814 Sep 15, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
31 changes: 29 additions & 2 deletions app/blog/[slug]/page.js
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,7 @@ export async function generateMetadata({ params }) {
siteName: SITE.name,
images: [{ url: ogImage, width: 1200, height: 630, alt: post.title }],
publishedTime: post.datePublished,
...(post.dateModified ? { modifiedTime: post.dateModified } : {}),
authors: post.authors.map((a) => a.name),
tags: post.tags,
},
Expand All @@ -61,6 +62,18 @@ function formatDate(iso) {
return new Date(iso).toLocaleDateString('en-US', { month: 'long', day: 'numeric', year: 'numeric' });
}

// Frontmatter `about:` / `mentions:` entry -> schema.org node. `type` defaults
// to Thing; any extra keys (applicationCategory, description, ...) pass through.
function entityLd({ type, name, url, sameAs, ...rest }) {
return {
'@type': type || 'Thing',
name,
...(url ? { url } : {}),
...(Array.isArray(sameAs) && sameAs.length ? { sameAs } : {}),
...rest,
};
}

export default async function BlogPost({ params }) {
const post = getPostBySlug(params.slug);
if (!post) notFound();
Expand All @@ -83,7 +96,7 @@ export default async function BlogPost({ params }) {
description: post.seoDescription || undefined,
image: [ogImage],
datePublished: post.datePublished,
dateModified: post.datePublished,
dateModified: post.dateModified || post.datePublished,
inLanguage: 'en-US',
isAccessibleForFree: true,
author: post.authors.map((a) => ({
Expand Down Expand Up @@ -113,7 +126,13 @@ export default async function BlogPost({ params }) {
wordCount: post.words,
timeRequired: `PT${post.readMinutes}M`,
articleSection: post.tags[0] || 'Cloud Native',
about: post.tags.map((t) => ({ '@type': 'Thing', name: t })),
about: [
...post.about.map(entityLd),
...post.tags
.filter((t) => !post.about.some((e) => e.name.toLowerCase() === t.toLowerCase()))
.map((t) => ({ '@type': 'Thing', name: t })),
],
...(post.mentions.length ? { mentions: post.mentions.map(entityLd) } : {}),
...(seriesInfo
? {
isPartOf: {
Expand Down Expand Up @@ -233,6 +252,14 @@ export default async function BlogPost({ params }) {
))}
<span className="mx-2">·</span>
<time dateTime={post.datePublished}>{formatDate(post.datePublished)}</time>
{post.dateModified && (
<>
<span className="mx-2">·</span>
<span>
Updated <time dateTime={post.dateModified}>{formatDate(post.dateModified)}</time>
</span>
</>
)}
<span className="mx-2">·</span>
<span>{post.readMinutes} min read</span>
</div>
Expand Down
614 changes: 614 additions & 0 deletions content/blog/kubernetes-observability-in-2026-with-openobserve.md

Large diffs are not rendered by default.

9 changes: 9 additions & 0 deletions lib/blog.js
Original file line number Diff line number Diff line change
Expand Up @@ -101,6 +101,15 @@ function loadAll() {
faq: Array.isArray(data.faq)
? data.faq.filter((x) => x && x.q && x.a)
: [],
// Optional schema.org entities for the BlogPosting JSON-LD. `about:`
// entries replace the generic tag-derived Thing of the same name (e.g. a
// SoftwareApplication with sameAs links for the product a post covers);
// `mentions:` lists other named things the post discusses. Each entry is
// {type, name, url, sameAs, ...extra schema.org properties}.
about: Array.isArray(data.about) ? data.about.filter((x) => x && x.name) : [],
mentions: Array.isArray(data.mentions) ? data.mentions.filter((x) => x && x.name) : [],
// Optional `dateModified:`; the JSON-LD falls back to datePublished.
dateModified: data.dateModified || null,
readMinutes: Math.max(1, Math.round(stats.minutes)),
words: stats.words,
content,
Expand Down
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading