<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Observability on IT Comparison</title><link>https://comparison.metacog.co.kr/tags/observability/</link><description>Recent content in Observability on IT Comparison</description><generator>Hugo</generator><language>en-us</language><lastBuildDate>Mon, 03 Aug 2026 05:30:34 +0900</lastBuildDate><atom:link href="https://comparison.metacog.co.kr/tags/observability/index.xml" rel="self" type="application/rss+xml"/><item><title>Prometheus vs Grafana: Metrics Collection vs Visualization</title><link>https://comparison.metacog.co.kr/posts/2026-08-03-prometheus-vs-grafana-metrics-collection-vs-visualization/</link><pubDate>Mon, 03 Aug 2026 05:30:34 +0900</pubDate><guid>https://comparison.metacog.co.kr/posts/2026-08-03-prometheus-vs-grafana-metrics-collection-vs-visualization/</guid><description>&lt;h2 id="overview"&gt;Overview&lt;/h2&gt;
&lt;p&gt;Prometheus is a &lt;strong class="kw"&gt;time-series database&lt;/strong&gt; that scrapes and stores metrics with its own query language and alerting engine, while Grafana is a &lt;strong class="kw"&gt;visualization layer&lt;/strong&gt; that queries Prometheus (and many other backends) to render dashboards. They&amp;rsquo;re often deployed together, not as alternatives, because each solves a different half of the observability pipeline.&lt;/p&gt;
&lt;h2 id="comparison-diagram"&gt;Comparison Diagram&lt;/h2&gt;
&lt;div class="compare-diagram"&gt;
&lt;svg viewBox="0 0 640 360" xmlns="http://www.w3.org/2000/svg"&gt;&lt;text x="150" y="30" text-anchor="middle" font-size="18" font-weight="600" style="fill:var(--primary)"&gt;Prometheus&lt;/text&gt;&lt;text x="520" y="30" text-anchor="middle" font-size="18" font-weight="600" style="fill:var(--primary)"&gt;Grafana&lt;/text&gt;&lt;rect x="40" y="55" width="140" height="40" rx="4" style="fill:var(--compare-a-soft);stroke:var(--compare-a)" stroke-width="1.5"/&gt;&lt;text x="110" y="79" text-anchor="middle" font-size="12" style="fill:var(--content)"&gt;Exporters / Targets&lt;/text&gt;&lt;line x1="110" y1="95" x2="110" y2="120" style="stroke:var(--compare-a)" stroke-width="1.5" marker-end="url(#arrowA)"/&gt;&lt;rect x="40" y="120" width="140" height="75" rx="4" style="fill:var(--compare-a-soft);stroke:var(--compare-a)" stroke-width="1.5"/&gt;&lt;text x="110" y="143" text-anchor="middle" font-size="12" style="fill:var(--content)"&gt;Scrape Engine&lt;/text&gt;&lt;line x1="55" y1="153" x2="165" y2="153" style="stroke:var(--compare-a)" stroke-width="1"/&gt;&lt;text x="110" y="172" text-anchor="middle" font-size="12" style="fill:var(--content)"&gt;TSDB (storage)&lt;/text&gt;&lt;text x="110" y="186" text-anchor="middle" font-size="10" style="fill:var(--secondary)"&gt;PromQL&lt;/text&gt;&lt;line x1="110" y1="195" x2="110" y2="220" style="stroke:var(--compare-a)" stroke-width="1.5" marker-end="url(#arrowA)"/&gt;&lt;rect x="40" y="220" width="140" height="40" rx="4" style="fill:var(--compare-a-soft);stroke:var(--compare-a)" stroke-width="1.5"/&gt;&lt;text x="110" y="244" text-anchor="middle" font-size="12" style="fill:var(--content)"&gt;Alertmanager&lt;/text&gt;&lt;rect x="220" y="137" width="110" height="58" rx="4" style="fill:none;stroke:var(--border)" stroke-width="1.5" stroke-dasharray="4 3"/&gt;&lt;text x="275" y="160" text-anchor="middle" font-size="10" style="fill:var(--secondary)"&gt;Other Data&lt;/text&gt;&lt;text x="275" y="174" text-anchor="middle" font-size="10" style="fill:var(--secondary)"&gt;Sources&lt;/text&gt;&lt;text x="275" y="188" text-anchor="middle" font-size="9" style="fill:var(--secondary)"&gt;(MySQL, Loki...)&lt;/text&gt;&lt;rect x="420" y="120" width="180" height="140" rx="4" style="fill:var(--compare-b-soft);stroke:var(--compare-b)" stroke-width="1.5"/&gt;&lt;text x="510" y="142" text-anchor="middle" font-size="13" style="fill:var(--content)"&gt;Dashboards&lt;/text&gt;&lt;rect x="435" y="155" width="70" height="40" rx="3" style="fill:none;stroke:var(--compare-b)" stroke-width="1"/&gt;&lt;polyline points="440,185 452,168 462,178 475,162 500,172" style="fill:none;stroke:var(--compare-b)" stroke-width="1.5"/&gt;&lt;rect x="515" y="155" width="70" height="40" rx="3" style="fill:none;stroke:var(--compare-b)" stroke-width="1"/&gt;&lt;rect x="525" y="180" width="8" height="12" style="fill:var(--compare-b)"/&gt;&lt;rect x="538" y="172" width="8" height="20" style="fill:var(--compare-b)"/&gt;&lt;rect x="551" y="165" width="8" height="27" style="fill:var(--compare-b)"/&gt;&lt;rect x="564" y="176" width="8" height="16" style="fill:var(--compare-b)"/&gt;&lt;rect x="435" y="205" width="150" height="40" rx="3" style="fill:none;stroke:var(--compare-b)" stroke-width="1"/&gt;&lt;text x="510" y="228" text-anchor="middle" font-size="10" style="fill:var(--secondary)"&gt;Alerting + Notifications&lt;/text&gt;&lt;line x1="180" y1="157" x2="415" y2="180" style="stroke:var(--content)" stroke-width="1.2" marker-end="url(#arrowC)"/&gt;&lt;text x="290" y="145" text-anchor="middle" font-size="9" style="fill:var(--secondary)"&gt;PromQL query&lt;/text&gt;&lt;line x1="330" y1="166" x2="415" y2="175" style="stroke:var(--content)" stroke-width="1.2" marker-end="url(#arrowC)"/&gt;&lt;text x="110" y="290" text-anchor="middle" font-size="11" style="fill:var(--secondary)"&gt;Collects &amp;amp; Stores Metrics&lt;/text&gt;&lt;text x="510" y="290" text-anchor="middle" font-size="11" style="fill:var(--secondary)"&gt;Queries &amp;amp; Visualizes&lt;/text&gt;&lt;defs&gt;&lt;marker id="arrowA" markerWidth="8" markerHeight="8" refX="4" refY="4" orient="auto"&gt;&lt;path d="M0,0 L8,4 L0,8 Z" style="fill:var(--compare-a)"/&gt;&lt;/marker&gt;&lt;marker id="arrowC" markerWidth="8" markerHeight="8" refX="4" refY="4" orient="auto"&gt;&lt;path d="M0,0 L8,4 L0,8 Z" style="fill:var(--content)"/&gt;&lt;/marker&gt;&lt;/defs&gt;&lt;/svg&gt;
&lt;/div&gt;
&lt;h2 id="comparison-table"&gt;Comparison Table&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Aspect&lt;/th&gt;
&lt;th&gt;Prometheus&lt;/th&gt;
&lt;th&gt;Grafana&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Primary purpose&lt;/td&gt;
&lt;td&gt;Collect, store, and query time-series metrics&lt;/td&gt;
&lt;td&gt;Visualize and correlate data from one or more sources&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Data collection&lt;/td&gt;
&lt;td&gt;Pull-based scraping of HTTP /metrics endpoints on a schedule&lt;/td&gt;
&lt;td&gt;None — has no collector, relies entirely on configured data sources&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Data storage&lt;/td&gt;
&lt;td&gt;Built-in on-disk time-series database (TSDB)&lt;/td&gt;
&lt;td&gt;Stateless; stores only dashboard/config metadata, not metric data&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Query language&lt;/td&gt;
&lt;td&gt;PromQL, native to its own TSDB&lt;/td&gt;
&lt;td&gt;Delegates to whatever query language the connected data source uses&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Supported data sources&lt;/td&gt;
&lt;td&gt;Only its own TSDB (federation aside)&lt;/td&gt;
&lt;td&gt;150+ backends including Prometheus, Loki, InfluxDB, Elasticsearch, SQL&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Alerting&lt;/td&gt;
&lt;td&gt;Native alerting rules evaluated in-server, routed via Alertmanager&lt;/td&gt;
&lt;td&gt;Unified alerting engine that layers on top of any connected data source&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Visualization&lt;/td&gt;
&lt;td&gt;Minimal built-in expression browser, no dashboarding&lt;/td&gt;
&lt;td&gt;Rich, customizable panels, graphs, and shareable dashboards&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Typical deployment&lt;/td&gt;
&lt;td&gt;Runs per cluster/environment alongside exporters&lt;/td&gt;
&lt;td&gt;Central server pointing at multiple backends across teams&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="key-differences"&gt;Key Differences&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Prometheus owns the &lt;strong class="kw"&gt;TSDB&lt;/strong&gt;; Grafana holds no metric data of its own.&lt;/li&gt;
&lt;li&gt;Prometheus &lt;strong class="kw"&gt;scrapes&lt;/strong&gt; targets directly; Grafana only issues read queries.&lt;/li&gt;
&lt;li&gt;Prometheus alerting runs server-side via &lt;strong class="kw"&gt;Alertmanager&lt;/strong&gt;; Grafana&amp;rsquo;s alerting spans any connected source.&lt;/li&gt;
&lt;li&gt;Grafana supports &lt;strong class="kw"&gt;multi-source&lt;/strong&gt; dashboards, unlike Prometheus&amp;rsquo;s single-source expression browser.&lt;/li&gt;
&lt;li&gt;Neither replaces the other — most stacks run &lt;strong class="kw"&gt;both together&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="when-to-use-each"&gt;When to Use Each&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Prometheus&lt;/strong&gt;&lt;/p&gt;</description></item><item><title>Monitoring vs Observability: Knowing Something's Wrong vs Knowing Why</title><link>https://comparison.metacog.co.kr/posts/2026-08-02-monitoring-vs-observability-knowing-something-s-wrong-vs-kno/</link><pubDate>Sun, 02 Aug 2026 08:34:10 +0900</pubDate><guid>https://comparison.metacog.co.kr/posts/2026-08-02-monitoring-vs-observability-knowing-something-s-wrong-vs-kno/</guid><description>&lt;h2 id="overview"&gt;Overview&lt;/h2&gt;
&lt;p&gt;Monitoring watches a predefined set of metrics, logs, and checks against known failure modes and alerts you when thresholds are breached. Observability is a property of a system built so that its internal state can be inferred from its external outputs, letting you investigate questions you didn&amp;rsquo;t think to ask in advance. The distinction matters because monitoring answers &amp;lsquo;is something wrong?&amp;rsquo; while observability answers &amp;lsquo;why is it wrong?&amp;rsquo; for failures you&amp;rsquo;ve never seen before.&lt;/p&gt;</description></item></channel></rss>