{"id":2248,"date":"2026-04-24T09:38:51","date_gmt":"2026-04-24T09:38:51","guid":{"rendered":"https:\/\/sreschool.com\/blog\/?p=2248"},"modified":"2026-04-24T09:53:25","modified_gmt":"2026-04-24T09:53:25","slug":"what-is-graphite-monitoring-tool","status":"publish","type":"post","link":"https:\/\/sreschool.com\/blog\/what-is-graphite-monitoring-tool\/","title":{"rendered":"What is Graphite monitoring tool?"},"content":{"rendered":"\n<p><strong>Graphite<\/strong> is an <strong>open-source time-series monitoring system<\/strong> used to collect, store, query, and visualize metrics from servers, applications, databases, and infrastructure.<\/p>\n\n\n\n<p>In simple words:<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p><strong>Graphite stores numerical metrics over time so you can see trends, performance, and problems.<\/strong><\/p>\n<\/blockquote>\n\n\n\n<p>Example metrics Graphite can store:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>CPU usage\nMemory usage\nDisk usage\nNetwork traffic\nApplication request count\nAPI response time\nError count\nDatabase query time\n<\/code><\/pre>\n\n\n\n<p>A sample Graphite metric looks like this:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>linux.server1.cpu.usage 72.5 1710000000\n<\/code><\/pre>\n\n\n\n<p>Meaning:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Part<\/th><th>Meaning<\/th><\/tr><\/thead><tbody><tr><td><code>linux.server1.cpu.usage<\/code><\/td><td>Metric name\/path<\/td><\/tr><tr><td><code>72.5<\/code><\/td><td>Metric value<\/td><\/tr><tr><td><code>1710000000<\/code><\/td><td>Timestamp<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">How Graphite works<\/h2>\n\n\n\n<div class=\"wp-block-merpress-mermaidjs diagram-source-mermaid\"><pre class=\"mermaid\">flowchart TD\n    A[Server \/ Application] --> B[Metric Collector]\n    B --> C[Carbon]\n    C --> D[Whisper Storage]\n    D --> E[Graphite Web \/ API]\n    E --> F[Grafana Dashboard]<\/pre><\/div>\n\n\n\n<pre class=\"wp-block-code\"><code>flowchart TD\n    A&#91;Server \/ Application] --&gt; B&#91;Metric Collector]\n    B --&gt; C&#91;Carbon]\n    C --&gt; D&#91;Whisper Storage]\n    D --&gt; E&#91;Graphite Web \/ API]\n    E --&gt; F&#91;Grafana Dashboard]\n<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Main components<\/h2>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Component<\/th><th>Role<\/th><\/tr><\/thead><tbody><tr><td><strong>Carbon<\/strong><\/td><td>Receives metrics and writes them to storage<\/td><\/tr><tr><td><strong>Whisper<\/strong><\/td><td>Stores time-series metrics on disk<\/td><\/tr><tr><td><strong>Graphite Web<\/strong><\/td><td>Provides UI and API to query metrics<\/td><\/tr><tr><td><strong>Grafana<\/strong><\/td><td>Often used to create dashboards and alerts from Graphite data<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Where Graphite is used<\/h2>\n\n\n\n<p>Graphite is commonly used for:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Infrastructure monitoring\nLinux server monitoring\nApplication performance metrics\nCapacity planning\nHistorical trend analysis\nGrafana dashboard backend\n<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Graphite vs Grafana<\/h2>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Tool<\/th><th>Purpose<\/th><\/tr><\/thead><tbody><tr><td><strong>Graphite<\/strong><\/td><td>Stores and serves metrics<\/td><\/tr><tr><td><strong>Grafana<\/strong><\/td><td>Visualizes metrics and creates dashboards\/alerts<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>So the simplest explanation is:<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p><strong>Graphite is the metrics backend. Grafana is the visualization frontend.<\/strong><\/p>\n<\/blockquote>\n\n\n\n<p>Below are the <strong>main components used in Graphite monitoring stack<\/strong>, with a clear <strong>data flow diagram<\/strong> and <strong>Mermaid architecture diagram<\/strong>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">1. Graphite Components Overview<\/h2>\n\n\n\n<p>Graphite is mainly made of these core components:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Component<\/th><th>Purpose<\/th><\/tr><\/thead><tbody><tr><td><strong>Application \/ Server \/ Script<\/strong><\/td><td>Generates metrics like CPU usage, memory, disk, request count, latency, etc.<\/td><\/tr><tr><td><strong>StatsD \/ CollectD \/ Telegraf \/ Carbon Agent<\/strong><\/td><td>Collects metrics from servers or applications and forwards them to Graphite.<\/td><\/tr><tr><td><strong>Carbon<\/strong><\/td><td>Receives metrics, processes them, and writes them into Whisper storage.<\/td><\/tr><tr><td><strong>Carbon Receiver<\/strong><\/td><td>Listens for incoming metrics over TCP\/UDP, usually on port <code>2003<\/code>, <code>2004<\/code>, or <code>2023<\/code>.<\/td><\/tr><tr><td><strong>Carbon Cache<\/strong><\/td><td>Temporarily stores incoming metrics in memory before writing them to disk.<\/td><\/tr><tr><td><strong>Carbon Relay<\/strong><\/td><td>Optional component used to forward, split, or replicate metrics to multiple Carbon nodes.<\/td><\/tr><tr><td><strong>Carbon Aggregator<\/strong><\/td><td>Optional component used to aggregate metrics before storing them.<\/td><\/tr><tr><td><strong>Whisper<\/strong><\/td><td>Graphite\u2019s time-series database file format. Stores metrics on disk.<\/td><\/tr><tr><td><strong>Graphite Web<\/strong><\/td><td>Web application used to query, render, and visualize metrics.<\/td><\/tr><tr><td><strong>Graphite API \/ Render API<\/strong><\/td><td>Allows tools like Grafana to query Graphite metrics.<\/td><\/tr><tr><td><strong>Grafana<\/strong><\/td><td>Visualization and dashboarding tool that connects to Graphite as a data source.<\/td><\/tr><tr><td><strong>Alerts<\/strong><\/td><td>Usually handled in Grafana, not directly by classic Graphite.<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">2. Simple Graphite Flow<\/h1>\n\n\n\n<pre class=\"wp-block-code\"><code>Application \/ Server\n        |\n        v\nMetric Collector\n(StatsD \/ CollectD \/ Telegraf \/ Custom Script)\n        |\n        v\nCarbon\n        |\n        v\nWhisper Storage\n        |\n        v\nGraphite Web \/ Graphite API\n        |\n        v\nGrafana Dashboard \/ Alerts\n<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">3. Detailed Graphite Architecture Flow<\/h1>\n\n\n\n<div class=\"wp-block-merpress-mermaidjs diagram-source-mermaid\"><pre class=\"mermaid\">flowchart TD\n    A[Application \/ Linux Server \/ Service] --> B[Metric Collector]\n\n    B --> B1[StatsD]\n    B --> B2[CollectD]\n    B --> B3[Telegraf]\n    B --> B4[Custom Script]\n\n    B1 --> C[Carbon Receiver]\n    B2 --> C\n    B3 --> C\n    B4 --> C\n\n    C --> D[Carbon Cache]\n\n    D --> E[Whisper Storage]\n\n    E --> F[Graphite Web]\n\n    F --> G[Graphite Render API]\n\n    G --> H[Grafana]\n\n    H --> I[Dashboards]\n    H --> J[Alerts]<\/pre><\/div>\n\n\n\n<pre class=\"wp-block-code\"><code>\n<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">4. Graphite Components with Ports<\/h1>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Component<\/th><th>Common Port<\/th><th>Description<\/th><\/tr><\/thead><tbody><tr><td><strong>Carbon plaintext receiver<\/strong><\/td><td><code>2003<\/code><\/td><td>Receives metrics in plain text format.<\/td><\/tr><tr><td><strong>Carbon pickle receiver<\/strong><\/td><td><code>2004<\/code><\/td><td>Receives metrics in Python pickle format.<\/td><\/tr><tr><td><strong>Carbon cache query port<\/strong><\/td><td><code>7002<\/code><\/td><td>Used internally for cache queries.<\/td><\/tr><tr><td><strong>Graphite Web<\/strong><\/td><td><code>80<\/code>, <code>8080<\/code>, or custom<\/td><td>Web UI and API access.<\/td><\/tr><tr><td><strong>Grafana<\/strong><\/td><td><code>3000<\/code><\/td><td>Grafana web interface.<\/td><\/tr><tr><td><strong>StatsD<\/strong><\/td><td><code>8125\/UDP<\/code><\/td><td>Receives application metrics and forwards to Graphite.<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">5. Metric Flow Example<\/h1>\n\n\n\n<p>Example metric:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>linux.server1.cpu.usage 72.5 1710000000\n<\/code><\/pre>\n\n\n\n<p>This means:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Part<\/th><th>Meaning<\/th><\/tr><\/thead><tbody><tr><td><code>linux.server1.cpu.usage<\/code><\/td><td>Metric path\/name<\/td><\/tr><tr><td><code>72.5<\/code><\/td><td>Metric value<\/td><\/tr><tr><td><code>1710000000<\/code><\/td><td>Unix timestamp<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>Flow:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Linux Server\n  sends metric:\n  linux.server1.cpu.usage 72.5 1710000000\n\nCarbon receives it on port 2003\n\nCarbon Cache stores it temporarily\n\nWhisper writes it into .wsp file\n\nGraphite Web reads it\n\nGrafana displays it in dashboard\n<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">6. Full Graphite + Grafana Monitoring Flow<\/h1>\n\n\n\n<div class=\"wp-block-merpress-mermaidjs diagram-source-mermaid\"><pre class=\"mermaid\">flowchart LR\n    subgraph Sources[\"Metric Sources\"]\n        A1[Linux Servers]\n        A2[Applications]\n        A3[Databases]\n        A4[Network Devices]\n        A5[Custom Scripts]\n    end\n\n    subgraph Collectors[\"Metric Collectors\"]\n        B1[StatsD]\n        B2[CollectD]\n        B3[Telegraf]\n        B4[Diamond]\n    end\n\n    subgraph Graphite[\"Graphite Stack\"]\n        C1[Carbon Receiver]\n        C2[Carbon Cache]\n        C3[Carbon Relay Optional]\n        C4[Carbon Aggregator Optional]\n        D1[Whisper Storage]\n        E1[Graphite Web]\n        E2[Graphite Render API]\n    end\n\n    subgraph Visualization[\"Visualization and Alerting\"]\n        F1[Grafana]\n        F2[Dashboards]\n        F3[Alerts]\n    end\n\n    A1 --> B2\n    A2 --> B1\n    A3 --> B3\n    A4 --> B3\n    A5 --> C1\n\n    B1 --> C1\n    B2 --> C1\n    B3 --> C1\n    B4 --> C1\n\n    C1 --> C2\n    C2 --> D1\n\n    C1 --> C3\n    C3 --> C2\n\n    C1 --> C4\n    C4 --> C2\n\n    D1 --> E1\n    E1 --> E2\n    E2 --> F1\n    F1 --> F2\n    F1 --> F3\n<\/pre><\/div>\n\n\n\n<pre class=\"wp-block-code\"><code>\n<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">7. How Each Component Works<\/h1>\n\n\n\n<h2 class=\"wp-block-heading\">Application \/ Server<\/h2>\n\n\n\n<p>This is the original source of metrics.<\/p>\n\n\n\n<p>Examples:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>CPU usage\nMemory usage\nDisk usage\nNetwork traffic\nHTTP request count\nAPI latency\nError count\nDatabase query time\n<\/code><\/pre>\n\n\n\n<p>The server itself does not usually write directly to Whisper. It sends metrics to Graphite through a collector or script.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Metric Collector<\/h2>\n\n\n\n<p>Collectors gather metrics and send them to Carbon.<\/p>\n\n\n\n<p>Common collectors:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Collector<\/th><th>Use Case<\/th><\/tr><\/thead><tbody><tr><td><strong>StatsD<\/strong><\/td><td>Application-level metrics such as counters, timers, gauges.<\/td><\/tr><tr><td><strong>CollectD<\/strong><\/td><td>Linux system metrics such as CPU, memory, disk, network.<\/td><\/tr><tr><td><strong>Telegraf<\/strong><\/td><td>Modern metrics agent with many plugins.<\/td><\/tr><tr><td><strong>Diamond<\/strong><\/td><td>Older Python-based Graphite collector.<\/td><\/tr><tr><td><strong>Custom Scripts<\/strong><\/td><td>Simple scripts that push metrics directly to Carbon.<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>Example using shell:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>echo \"linux.server1.cpu.usage 75 $(date +%s)\" | nc 127.0.0.1 2003\n<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Carbon<\/h2>\n\n\n\n<p>Carbon is the ingestion engine of Graphite.<\/p>\n\n\n\n<p>It receives metrics and writes them to Whisper.<\/p>\n\n\n\n<p>Carbon has multiple sub-components:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>carbon-cache\ncarbon-relay\ncarbon-aggregator\n<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Carbon Cache<\/h2>\n\n\n\n<p>Carbon Cache receives metrics and keeps them briefly in memory before writing them to disk.<\/p>\n\n\n\n<p>Main responsibilities:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Receive metric data\nBuffer data in memory\nApply storage schema\nWrite data to Whisper files\nServe recent cached data to Graphite Web\n<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Carbon Relay<\/h2>\n\n\n\n<p>Carbon Relay is optional.<\/p>\n\n\n\n<p>It is used when Graphite is scaled across multiple servers.<\/p>\n\n\n\n<p>Main uses:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Forward metrics to multiple Carbon caches\nShard metrics across multiple storage nodes\nReplicate metrics for high availability\nRoute metrics based on rules\n<\/code><\/pre>\n\n\n\n<p>Example:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>server1 metrics -&gt; carbon-cache-1\nserver2 metrics -&gt; carbon-cache-2\napp metrics    -&gt; carbon-cache-3\n<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Carbon Aggregator<\/h2>\n\n\n\n<p>Carbon Aggregator is optional.<\/p>\n\n\n\n<p>It aggregates many metrics before storage.<\/p>\n\n\n\n<p>Example:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>app.server1.requests.count\napp.server2.requests.count\napp.server3.requests.count\n<\/code><\/pre>\n\n\n\n<p>Can be aggregated into:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>app.all.requests.count\n<\/code><\/pre>\n\n\n\n<p>Useful for reducing query complexity and storage volume.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Whisper<\/h2>\n\n\n\n<p>Whisper is Graphite\u2019s storage engine.<\/p>\n\n\n\n<p>It stores each metric as a <code>.wsp<\/code> file.<\/p>\n\n\n\n<p>Example metric:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>linux.server1.cpu.usage\n<\/code><\/pre>\n\n\n\n<p>May be stored as:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\/opt\/graphite\/storage\/whisper\/linux\/server1\/cpu\/usage.wsp\n<\/code><\/pre>\n\n\n\n<p>Whisper is similar to RRD storage. It stores fixed-size time-series data based on retention rules.<\/p>\n\n\n\n<p>Example retention:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>10s:6h,1m:7d,10m:5y\n<\/code><\/pre>\n\n\n\n<p>Meaning:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Retention<\/th><th>Meaning<\/th><\/tr><\/thead><tbody><tr><td><code>10s:6h<\/code><\/td><td>Keep 10-second data for 6 hours<\/td><\/tr><tr><td><code>1m:7d<\/code><\/td><td>Keep 1-minute data for 7 days<\/td><\/tr><tr><td><code>10m:5y<\/code><\/td><td>Keep 10-minute data for 5 years<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Graphite Web<\/h2>\n\n\n\n<p>Graphite Web is the web application and API layer.<\/p>\n\n\n\n<p>It allows users and tools to:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Search metrics\nQuery metrics\nRender graphs\nApply functions\nExpose Render API\n<\/code><\/pre>\n\n\n\n<p>Example Graphite Render API:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\/render?target=linux.server1.cpu.usage&amp;from=-1h&amp;format=json\n<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Grafana<\/h2>\n\n\n\n<p>Grafana is commonly used as the visualization layer for Graphite.<\/p>\n\n\n\n<p>Grafana connects to:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>http:&#47;&#47;&lt;graphite-server&gt;\n<\/code><\/pre>\n\n\n\n<p>or<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>http:&#47;&#47;&lt;graphite-server&gt;:8080\n<\/code><\/pre>\n\n\n\n<p>Grafana uses Graphite\u2019s API to search metrics and build dashboards.<\/p>\n\n\n\n<p>Typical Grafana panels:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>CPU Usage\nMemory Usage\nDisk Usage\nNetwork In\/Out\nLoad Average\nProcess Count\nApplication Request Rate\nError Rate\nLatency\n<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">8. Graphite Data Flow with Example<\/h1>\n\n\n\n<pre class=\"wp-block-code\"><code>sequenceDiagram\n    participant App as Application \/ Linux Server\n    participant Agent as StatsD \/ CollectD \/ Telegraf\n    participant Carbon as Carbon Receiver\n    participant Cache as Carbon Cache\n    participant Whisper as Whisper Storage\n    participant Web as Graphite Web API\n    participant Grafana as Grafana\n\n    App-&gt;&gt;Agent: Generate metrics\n    Agent-&gt;&gt;Carbon: Send metric over TCP\/UDP\n    Carbon-&gt;&gt;Cache: Accept and buffer metric\n    Cache-&gt;&gt;Whisper: Write metric to .wsp file\n    Grafana-&gt;&gt;Web: Query metric target\n    Web-&gt;&gt;Whisper: Read historical data\n    Web-&gt;&gt;Cache: Read recent cached data\n    Web--&gt;&gt;Grafana: Return time-series data\n    Grafana-&gt;&gt;Grafana: Render dashboard \/ alert\n<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">9. End-to-End Example<\/h1>\n\n\n\n<p>Suppose a Linux server reports CPU usage.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Step 1: Metric is generated<\/h2>\n\n\n\n<pre class=\"wp-block-code\"><code>linux.web01.cpu.usage 65 1710000000\n<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Step 2: Metric is sent to Carbon<\/h2>\n\n\n\n<pre class=\"wp-block-code\"><code>echo \"linux.web01.cpu.usage 65 $(date +%s)\" | nc graphite-server 2003\n<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Step 3: Carbon receives it<\/h2>\n\n\n\n<pre class=\"wp-block-code\"><code>Carbon plaintext receiver listens on port 2003\n<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Step 4: Carbon writes to Whisper<\/h2>\n\n\n\n<pre class=\"wp-block-code\"><code>\/opt\/graphite\/storage\/whisper\/linux\/web01\/cpu\/usage.wsp\n<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Step 5: Graphite Web exposes it<\/h2>\n\n\n\n<pre class=\"wp-block-code\"><code>http:&#47;&#47;graphite-server\/render?target=linux.web01.cpu.usage&amp;from=-1h\n<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Step 6: Grafana visualizes it<\/h2>\n\n\n\n<p>Grafana panel query:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>linux.web01.cpu.usage\n<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">10. Graphite Stack in One Diagram<\/h1>\n\n\n\n<pre class=\"wp-block-code\"><code>flowchart TB\n    A&#91;Metric Sources] --&gt; B&#91;Metric Collection Layer]\n    B --&gt; C&#91;Carbon Ingestion Layer]\n    C --&gt; D&#91;Whisper Storage Layer]\n    D --&gt; E&#91;Graphite Query Layer]\n    E --&gt; F&#91;Grafana Visualization Layer]\n\n    A1&#91;Linux CPU, Memory, Disk, Network] --&gt; A\n    A2&#91;Application Counters, Timers, Gauges] --&gt; A\n    A3&#91;Database Metrics] --&gt; A\n    A4&#91;Custom Business Metrics] --&gt; A\n\n    B1&#91;StatsD] --&gt; B\n    B2&#91;CollectD] --&gt; B\n    B3&#91;Telegraf] --&gt; B\n    B4&#91;Custom Scripts] --&gt; B\n\n    C1&#91;carbon-cache] --&gt; C\n    C2&#91;carbon-relay] --&gt; C\n    C3&#91;carbon-aggregator] --&gt; C\n\n    D1&#91;Whisper .wsp Files] --&gt; D\n\n    E1&#91;Graphite Web UI] --&gt; E\n    E2&#91;Graphite Render API] --&gt; E\n    E3&#91;Graphite Functions] --&gt; E\n\n    F1&#91;Grafana Dashboards] --&gt; F\n    F2&#91;Grafana Explore] --&gt; F\n    F3&#91;Grafana Alerts] --&gt; F\n<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">11. Important Point for Students<\/h1>\n\n\n\n<p>Graphite itself is mainly responsible for:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Receiving metrics\nStoring metrics\nQuerying metrics\nRendering metric data\n<\/code><\/pre>\n\n\n\n<p>Grafana is mainly responsible for:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Beautiful dashboards\nExplore UI\nAlert rules\nNotification channels\nDashboard sharing\n<\/code><\/pre>\n\n\n\n<p>So in modern monitoring labs:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Graphite = Metrics backend\nGrafana = Visualization and alerting frontend\n<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">12. Final Summary<\/h1>\n\n\n\n<pre class=\"wp-block-code\"><code>Metric Source\n    \u2193\nCollector or Agent\n    \u2193\nCarbon Receiver\n    \u2193\nCarbon Cache\n    \u2193\nWhisper Storage\n    \u2193\nGraphite Web \/ Render API\n    \u2193\nGrafana\n    \u2193\nDashboard \/ Alert\n<\/code><\/pre>\n\n\n\n<p>In simple terms:<\/p>\n\n\n\n<p><strong>Graphite collects and stores time-series metrics. Grafana reads those metrics from Graphite and converts them into dashboards and alerts.<\/strong><\/p>\n\n\n\n<p>StatsD collects <strong>application and system metrics<\/strong> sent by apps, scripts, services, or servers over UDP\/TCP. It does <strong>not collect logs or traces by default<\/strong>. It mainly collects numeric time-series data.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Types of data collected using StatsD<\/h2>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Metric type<\/th><th>What it means<\/th><th>Example use case<\/th><\/tr><\/thead><tbody><tr><td><strong>Counter<\/strong><\/td><td>Counts how many times something happened<\/td><td>Number of API requests, login attempts, errors<\/td><\/tr><tr><td><strong>Gauge<\/strong><\/td><td>Current value at a point in time<\/td><td>Memory usage, queue size, active users<\/td><\/tr><tr><td><strong>Timer<\/strong><\/td><td>Measures how long something takes<\/td><td>API response time, DB query duration<\/td><\/tr><tr><td><strong>Histogram \/ Distribution<\/strong><\/td><td>Measures value distribution<\/td><td>Request latency percentiles like p95, p99<\/td><\/tr><tr><td><strong>Set<\/strong><\/td><td>Counts unique values<\/td><td>Unique users, unique IPs, unique sessions<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Examples<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">1. Counter data<\/h3>\n\n\n\n<p>Used to count events.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>api.requests:1|c\nlogin.success:1|c\nlogin.failed:1|c\npayment.errors:1|c\n<\/code><\/pre>\n\n\n\n<p>Meaning:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>api.requests increased by 1\nlogin.success increased by 1\npayment.errors increased by 1\n<\/code><\/pre>\n\n\n\n<p>Common use cases:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Total HTTP requests\nTotal errors\nTotal signups\nTotal orders\nTotal failed payments\n<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">2. Gauge data<\/h3>\n\n\n\n<p>Used to send the current value.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>queue.size:45|g\nmemory.used:712|g\nactive.users:128|g\ndisk.used.percent:67|g\n<\/code><\/pre>\n\n\n\n<p>Common use cases:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>CPU usage\nMemory usage\nDisk usage\nQueue depth\nActive connections\nNumber of running jobs\n<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">3. Timer data<\/h3>\n\n\n\n<p>Used to measure duration.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>api.response_time:245|ms\ndb.query_time:38|ms\ncache.lookup_time:4|ms\n<\/code><\/pre>\n\n\n\n<p>Meaning:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>API response took 245 ms\nDatabase query took 38 ms\nCache lookup took 4 ms\n<\/code><\/pre>\n\n\n\n<p>Common use cases:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>API latency\nDatabase query latency\nExternal API call duration\nFile upload time\nJob execution time\n<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">4. Histogram \/ distribution data<\/h3>\n\n\n\n<p>Used to understand spread of values.<\/p>\n\n\n\n<p>Example:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>request.size:2048|h\nresponse.size:5120|h\norder.amount:499|h\n<\/code><\/pre>\n\n\n\n<p>Common use cases:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Request payload size\nResponse size\nOrder amount\nLatency distribution\nFile size distribution\n<\/code><\/pre>\n\n\n\n<p>Depending on backend support, this can help calculate:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>avg\nmin\nmax\np50\np90\np95\np99\n<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">5. Set data<\/h3>\n\n\n\n<p>Used to count unique values.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>unique.users:raj@example.com|s\nunique.ips:192.168.1.10|s\nunique.sessions:abc123|s\n<\/code><\/pre>\n\n\n\n<p>Common use cases:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Unique users\nUnique sessions\nUnique visitors\nUnique IP addresses\n<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Real-world examples of StatsD metrics<\/h2>\n\n\n\n<p>For a web application:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>web.requests:1|c\nweb.errors:1|c\nweb.response_time:180|ms\nweb.active_users:35|g\nweb.unique_visitors:visitor123|s\n<\/code><\/pre>\n\n\n\n<p>For Linux\/server monitoring:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>system.cpu.usage:72|g\nsystem.memory.used:8045|g\nsystem.disk.used_percent:61|g\nsystem.loadavg.1min:2.4|g\n<\/code><\/pre>\n\n\n\n<p>For business monitoring:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>orders.created:1|c\norders.failed:1|c\ncart.checkout_time:3200|ms\npayment.amount:1299|h\nactive.subscriptions:840|g\n<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">In simple words<\/h2>\n\n\n\n<p>StatsD collects data like:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>How many times something happened?\nWhat is the current value?\nHow long did something take?\nWhat is the distribution of values?\nHow many unique things happened?\n<\/code><\/pre>\n\n\n\n<p>So, StatsD is mainly used for:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Application performance monitoring\nInfrastructure metrics\nBusiness metrics\nCustom service metrics\nDashboarding in Graphite\/Grafana\nAlerting on abnormal behavior\n<\/code><\/pre>\n","protected":false},"excerpt":{"rendered":"<p>Graphite is an open-source time-series monitoring system used to collect, store, query, and visualize metrics from servers, applications, databases, and [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-2248","post","type-post","status-publish","format-standard","hentry","category-uncategorized"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v26.5 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>What is Graphite monitoring tool? - SRE School<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/sreschool.com\/blog\/what-is-graphite-monitoring-tool\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"What is Graphite monitoring tool? - SRE School\" \/>\n<meta property=\"og:description\" content=\"Graphite is an open-source time-series monitoring system used to collect, store, query, and visualize metrics from servers, applications, databases, and [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/sreschool.com\/blog\/what-is-graphite-monitoring-tool\/\" \/>\n<meta property=\"og:site_name\" content=\"SRE School\" \/>\n<meta property=\"article:published_time\" content=\"2026-04-24T09:38:51+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2026-04-24T09:53:25+00:00\" \/>\n<meta name=\"author\" content=\"Rajesh Kumar\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Rajesh Kumar\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"5 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/sreschool.com\/blog\/what-is-graphite-monitoring-tool\/\",\"url\":\"https:\/\/sreschool.com\/blog\/what-is-graphite-monitoring-tool\/\",\"name\":\"What is Graphite monitoring tool? - SRE School\",\"isPartOf\":{\"@id\":\"https:\/\/sreschool.com\/blog\/#website\"},\"datePublished\":\"2026-04-24T09:38:51+00:00\",\"dateModified\":\"2026-04-24T09:53:25+00:00\",\"author\":{\"@id\":\"https:\/\/sreschool.com\/blog\/#\/schema\/person\/0ffe446f77bb2589992dbe3a7f417201\"},\"breadcrumb\":{\"@id\":\"https:\/\/sreschool.com\/blog\/what-is-graphite-monitoring-tool\/#breadcrumb\"},\"inLanguage\":\"en\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/sreschool.com\/blog\/what-is-graphite-monitoring-tool\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/sreschool.com\/blog\/what-is-graphite-monitoring-tool\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/sreschool.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"What is Graphite monitoring tool?\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/sreschool.com\/blog\/#website\",\"url\":\"https:\/\/sreschool.com\/blog\/\",\"name\":\"SRESchool\",\"description\":\"Master SRE. Build Resilient Systems. Lead the Future of Reliability\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/sreschool.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/sreschool.com\/blog\/#\/schema\/person\/0ffe446f77bb2589992dbe3a7f417201\",\"name\":\"Rajesh Kumar\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en\",\"@id\":\"https:\/\/sreschool.com\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/f901a4f2929fa034a291a8363d589791d5a3c1f6a051c22e744acb8bfc8e022a?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/f901a4f2929fa034a291a8363d589791d5a3c1f6a051c22e744acb8bfc8e022a?s=96&d=mm&r=g\",\"caption\":\"Rajesh Kumar\"},\"sameAs\":[\"http:\/\/sreschool.com\/blog\"],\"url\":\"https:\/\/sreschool.com\/blog\/author\/admin\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"What is Graphite monitoring tool? - SRE School","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/sreschool.com\/blog\/what-is-graphite-monitoring-tool\/","og_locale":"en_US","og_type":"article","og_title":"What is Graphite monitoring tool? - SRE School","og_description":"Graphite is an open-source time-series monitoring system used to collect, store, query, and visualize metrics from servers, applications, databases, and [&hellip;]","og_url":"https:\/\/sreschool.com\/blog\/what-is-graphite-monitoring-tool\/","og_site_name":"SRE School","article_published_time":"2026-04-24T09:38:51+00:00","article_modified_time":"2026-04-24T09:53:25+00:00","author":"Rajesh Kumar","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Rajesh Kumar","Est. reading time":"5 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/sreschool.com\/blog\/what-is-graphite-monitoring-tool\/","url":"https:\/\/sreschool.com\/blog\/what-is-graphite-monitoring-tool\/","name":"What is Graphite monitoring tool? - SRE School","isPartOf":{"@id":"https:\/\/sreschool.com\/blog\/#website"},"datePublished":"2026-04-24T09:38:51+00:00","dateModified":"2026-04-24T09:53:25+00:00","author":{"@id":"https:\/\/sreschool.com\/blog\/#\/schema\/person\/0ffe446f77bb2589992dbe3a7f417201"},"breadcrumb":{"@id":"https:\/\/sreschool.com\/blog\/what-is-graphite-monitoring-tool\/#breadcrumb"},"inLanguage":"en","potentialAction":[{"@type":"ReadAction","target":["https:\/\/sreschool.com\/blog\/what-is-graphite-monitoring-tool\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/sreschool.com\/blog\/what-is-graphite-monitoring-tool\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/sreschool.com\/blog\/"},{"@type":"ListItem","position":2,"name":"What is Graphite monitoring tool?"}]},{"@type":"WebSite","@id":"https:\/\/sreschool.com\/blog\/#website","url":"https:\/\/sreschool.com\/blog\/","name":"SRESchool","description":"Master SRE. Build Resilient Systems. Lead the Future of Reliability","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/sreschool.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en"},{"@type":"Person","@id":"https:\/\/sreschool.com\/blog\/#\/schema\/person\/0ffe446f77bb2589992dbe3a7f417201","name":"Rajesh Kumar","image":{"@type":"ImageObject","inLanguage":"en","@id":"https:\/\/sreschool.com\/blog\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/f901a4f2929fa034a291a8363d589791d5a3c1f6a051c22e744acb8bfc8e022a?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/f901a4f2929fa034a291a8363d589791d5a3c1f6a051c22e744acb8bfc8e022a?s=96&d=mm&r=g","caption":"Rajesh Kumar"},"sameAs":["http:\/\/sreschool.com\/blog"],"url":"https:\/\/sreschool.com\/blog\/author\/admin\/"}]}},"_links":{"self":[{"href":"https:\/\/sreschool.com\/blog\/wp-json\/wp\/v2\/posts\/2248","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/sreschool.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/sreschool.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/sreschool.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/sreschool.com\/blog\/wp-json\/wp\/v2\/comments?post=2248"}],"version-history":[{"count":5,"href":"https:\/\/sreschool.com\/blog\/wp-json\/wp\/v2\/posts\/2248\/revisions"}],"predecessor-version":[{"id":2255,"href":"https:\/\/sreschool.com\/blog\/wp-json\/wp\/v2\/posts\/2248\/revisions\/2255"}],"wp:attachment":[{"href":"https:\/\/sreschool.com\/blog\/wp-json\/wp\/v2\/media?parent=2248"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/sreschool.com\/blog\/wp-json\/wp\/v2\/categories?post=2248"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/sreschool.com\/blog\/wp-json\/wp\/v2\/tags?post=2248"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}