<?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>Ngxtop on Tarragon</title><link>https://tarrragon.github.io/blog/tags/ngxtop/</link><description>Recent content in Ngxtop on Tarragon</description><generator>Hugo -- gohugo.io</generator><language>zh-TW</language><copyright>Tarragon (CC BY 4.0)</copyright><lastBuildDate>Mon, 15 Jun 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://tarrragon.github.io/blog/tags/ngxtop/index.xml" rel="self" type="application/rss+xml"/><item><title>終端機看 nginx 請求：GoAccess、ngxtop 與何時該用 pipeline 而非 TUI</title><link>https://tarrragon.github.io/blog/linux/tools/cli/web-server-log-monitoring/</link><pubDate>Mon, 15 Jun 2026 00:00:00 +0000</pubDate><guid>https://tarrragon.github.io/blog/linux/tools/cli/web-server-log-monitoring/</guid><description>&lt;p>Web 伺服器日誌監控工具把 nginx／Apache 的 access log 解析成終端機可讀的請求統計，讓遠端 SSH 進去的那台機器上，能即時看到現在誰在打、打哪些路徑、回什麼狀態碼、吃多少頻寬。它跟系統監控（&lt;code>btop&lt;/code> 看 CPU／記憶體）的差別在於觀測對象：系統監控看主機資源，這類看的是 HTTP 請求流。&lt;/p>
&lt;p>本文承接 &lt;a href="https://tarrragon.github.io/blog/linux/tools/cli/cli-graphical-tools-overview/" data-link-title="終端機圖形化工具總覽：遠端操作下的 TUI、文字圖表與多工器" data-link-desc="在純文字終端機裡用 ASCII 與製圖字元做出監控儀表板、資料圖表與多視窗操作的工具總覽，並針對 SSH 伺服器、手機平板、低頻寬三種遠端情境給出選型判讀。">終端機圖形化工具總覽&lt;/a> 的 TUI 工具脈絡，屬監控的 web 請求子題。但比起工具本身，更該先分清的是「什麼時候用終端機看請求、什麼時候不該」，這放在最後一節。&lt;/p>
&lt;h2 id="goaccess即時請求儀表板">GoAccess：即時請求儀表板&lt;/h2>
&lt;p>&lt;code>GoAccess&lt;/code> 把 access log 解析成全螢幕的即時儀表板，責任是把一份 log 變成可讀的請求分析：狀態碼分布、top 請求路徑、不重複訪客、頻寬、回應時間、訪客的 OS 與瀏覽器。它既能開互動 TUI，也能輸出 HTML／CSV／JSON 報表。&lt;/p>
&lt;p>驗證它解析的正確性可以走非互動模式 — 餵一份 nginx access log、指定格式、輸出報表：&lt;/p>





&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="ln">1&lt;/span>&lt;span class="cl">goaccess access.log --log-format&lt;span class="o">=&lt;/span>COMBINED -o report.html&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>&lt;code>--log-format=COMBINED&lt;/code> 是對應 nginx 標準 combined 格式的預設。實測對一份 13 筆請求的 log，GoAccess 正確分出 9 筆 2xx、4 筆 4xx，並列出 top 路徑（&lt;code>/&lt;/code> 佔多數、&lt;code>/missing&lt;/code> 等 404）、訪客 host、user-agent 與頻寬。互動模式（不加 &lt;code>-o&lt;/code>）則是同一份資料的全螢幕即時版，連線中持續更新。&lt;/p>
&lt;h2 id="ngxtoptop-風格的請求即時表">ngxtop：top 風格的請求即時表&lt;/h2>
&lt;p>&lt;code>ngxtop&lt;/code> 把 access log 做成 &lt;code>top&lt;/code> 風格的即時表，責任是用最精簡的版面看「現在最熱的請求路徑與其狀態碼分布」。它比 GoAccess 輕、聚焦在請求路徑與狀態碼，適合快速掃一眼。&lt;/p>





&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="ln">1&lt;/span>&lt;span class="cl">ngxtop -l access.log --no-follow&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>&lt;code>--no-follow&lt;/code> 處理現有 log 後就退出（預設會持續跟隨新進的 log）。&lt;/p>
&lt;p>這裡有一個實測會撞到的 gotcha：&lt;strong>ngxtop 的 log 格式要跟實際的 nginx log_format 完全對上，否則它靜默回 0 records&lt;/strong>。nginx 官方 image 的預設 log_format 在標準 combined 之後多了一個 &lt;code>&amp;quot;$http_x_forwarded_for&amp;quot;&lt;/code> 欄位，ngxtop 的預設格式不含它，結果就是「跑得起來、但一筆都沒解析到」。對策是用 &lt;code>-f&lt;/code> 餵實際的格式：&lt;/p>





&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="ln">1&lt;/span>&lt;span class="cl">ngxtop -l access.log --no-follow &lt;span class="se">\
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">2&lt;/span>&lt;span class="cl">&lt;span class="se">&lt;/span> -f &lt;span class="s1">&amp;#39;$remote_addr - $remote_user [$time_local] &amp;#34;$request&amp;#34; $status $body_bytes_sent &amp;#34;$http_referer&amp;#34; &amp;#34;$http_user_agent&amp;#34; &amp;#34;$http_x_forwarded_for&amp;#34;&amp;#39;&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>格式對上後，ngxtop 正確處理 13 筆、分出 9 筆 2xx 與 4 筆 4xx，跟 GoAccess 的結果一致。相較之下 GoAccess 的 &lt;code>--log-format=COMBINED&lt;/code> 對尾端多出的欄位較寬容。判讀訊號很明確：ngxtop 顯示 0 records 時，先懷疑的是格式沒對上，而非沒有流量。&lt;/p>
&lt;h2 id="何時用終端機看請求何時不該">何時用終端機看請求、何時不該&lt;/h2>
&lt;p>工具會用之後，真正該分清的是使用時機。監控 nginx 請求依目的走兩條完全不同的路。&lt;/p>
&lt;p>當下排查與 ad-hoc 觀測，用終端機。情境是「伺服器現在很忙，進去看誰在打」「某個 endpoint 的 5xx 突然變多，即時看是哪一條」。這時 GoAccess／ngxtop／&lt;code>tail -f access.log&lt;/code> 直接在那台機器上看當下狀況，是遠端 SSH 除錯的日常，也是這類 TUI 工具的主場。&lt;/p>
&lt;p>持續的生產監控，不用終端機。沒有人 24 小時盯著 GoAccess。生產環境的請求監控走 pipeline：指標面用 nginx 的 &lt;code>stub_status&lt;/code>（基礎）或 VTS 模組／&lt;code>nginx-prometheus-exporter&lt;/code>（細到 per-status、per-upstream 的請求率），由 Prometheus 抓、Grafana 畫儀表板並設告警；日誌面把 access log 送到 Loki／ELK／Datadog 之類做查詢與長期保存。&lt;/p>
&lt;p>分界濃縮成一句：終端機 TUI 答「這台機器現在怎樣」，pipeline 答「趨勢如何、超標叫我」。所以請求一直都有被監控，只是持續監控的那份在 Prometheus 與日誌平台、不在終端機。生產 pipeline 的設計（metrics、dashboard、SLO、告警與 vendor 選型）屬後端觀測性的範圍，見 &lt;a href="https://tarrragon.github.io/blog/backend/04-observability/" data-link-title="模組四：可觀測性平台" data-link-desc="整理 log、metric、trace、dashboard 與 alert 的後端操作實務">可觀測性平台&lt;/a>；當排查升級成事故、需要止血與復盤的協作流程時，見 &lt;a href="https://tarrragon.github.io/blog/backend/08-incident-response/" data-link-title="模組八：事故處理與復盤" data-link-desc="用 IR 領域詞彙建問題節點、以服務級案例庫累積事故脈絡，先建概念與案例庫再進實作交接">事故處理與復盤&lt;/a>。&lt;/p></description><content:encoded><![CDATA[<p>Web 伺服器日誌監控工具把 nginx／Apache 的 access log 解析成終端機可讀的請求統計，讓遠端 SSH 進去的那台機器上，能即時看到現在誰在打、打哪些路徑、回什麼狀態碼、吃多少頻寬。它跟系統監控（<code>btop</code> 看 CPU／記憶體）的差別在於觀測對象：系統監控看主機資源，這類看的是 HTTP 請求流。</p>
<p>本文承接 <a href="/blog/linux/tools/cli/cli-graphical-tools-overview/" data-link-title="終端機圖形化工具總覽：遠端操作下的 TUI、文字圖表與多工器" data-link-desc="在純文字終端機裡用 ASCII 與製圖字元做出監控儀表板、資料圖表與多視窗操作的工具總覽，並針對 SSH 伺服器、手機平板、低頻寬三種遠端情境給出選型判讀。">終端機圖形化工具總覽</a> 的 TUI 工具脈絡，屬監控的 web 請求子題。但比起工具本身，更該先分清的是「什麼時候用終端機看請求、什麼時候不該」，這放在最後一節。</p>
<h2 id="goaccess即時請求儀表板">GoAccess：即時請求儀表板</h2>
<p><code>GoAccess</code> 把 access log 解析成全螢幕的即時儀表板，責任是把一份 log 變成可讀的請求分析：狀態碼分布、top 請求路徑、不重複訪客、頻寬、回應時間、訪客的 OS 與瀏覽器。它既能開互動 TUI，也能輸出 HTML／CSV／JSON 報表。</p>
<p>驗證它解析的正確性可以走非互動模式 — 餵一份 nginx access log、指定格式、輸出報表：</p>





<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="ln">1</span><span class="cl">goaccess access.log --log-format<span class="o">=</span>COMBINED -o report.html</span></span></code></pre></div><p><code>--log-format=COMBINED</code> 是對應 nginx 標準 combined 格式的預設。實測對一份 13 筆請求的 log，GoAccess 正確分出 9 筆 2xx、4 筆 4xx，並列出 top 路徑（<code>/</code> 佔多數、<code>/missing</code> 等 404）、訪客 host、user-agent 與頻寬。互動模式（不加 <code>-o</code>）則是同一份資料的全螢幕即時版，連線中持續更新。</p>
<h2 id="ngxtoptop-風格的請求即時表">ngxtop：top 風格的請求即時表</h2>
<p><code>ngxtop</code> 把 access log 做成 <code>top</code> 風格的即時表，責任是用最精簡的版面看「現在最熱的請求路徑與其狀態碼分布」。它比 GoAccess 輕、聚焦在請求路徑與狀態碼，適合快速掃一眼。</p>





<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="ln">1</span><span class="cl">ngxtop -l access.log --no-follow</span></span></code></pre></div><p><code>--no-follow</code> 處理現有 log 後就退出（預設會持續跟隨新進的 log）。</p>
<p>這裡有一個實測會撞到的 gotcha：<strong>ngxtop 的 log 格式要跟實際的 nginx log_format 完全對上，否則它靜默回 0 records</strong>。nginx 官方 image 的預設 log_format 在標準 combined 之後多了一個 <code>&quot;$http_x_forwarded_for&quot;</code> 欄位，ngxtop 的預設格式不含它，結果就是「跑得起來、但一筆都沒解析到」。對策是用 <code>-f</code> 餵實際的格式：</p>





<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="ln">1</span><span class="cl">ngxtop -l access.log --no-follow <span class="se">\
</span></span></span><span class="line"><span class="ln">2</span><span class="cl"><span class="se"></span>  -f <span class="s1">&#39;$remote_addr - $remote_user [$time_local] &#34;$request&#34; $status $body_bytes_sent &#34;$http_referer&#34; &#34;$http_user_agent&#34; &#34;$http_x_forwarded_for&#34;&#39;</span></span></span></code></pre></div><p>格式對上後，ngxtop 正確處理 13 筆、分出 9 筆 2xx 與 4 筆 4xx，跟 GoAccess 的結果一致。相較之下 GoAccess 的 <code>--log-format=COMBINED</code> 對尾端多出的欄位較寬容。判讀訊號很明確：ngxtop 顯示 0 records 時，先懷疑的是格式沒對上，而非沒有流量。</p>
<h2 id="何時用終端機看請求何時不該">何時用終端機看請求、何時不該</h2>
<p>工具會用之後，真正該分清的是使用時機。監控 nginx 請求依目的走兩條完全不同的路。</p>
<p>當下排查與 ad-hoc 觀測，用終端機。情境是「伺服器現在很忙，進去看誰在打」「某個 endpoint 的 5xx 突然變多，即時看是哪一條」。這時 GoAccess／ngxtop／<code>tail -f access.log</code> 直接在那台機器上看當下狀況，是遠端 SSH 除錯的日常，也是這類 TUI 工具的主場。</p>
<p>持續的生產監控，不用終端機。沒有人 24 小時盯著 GoAccess。生產環境的請求監控走 pipeline：指標面用 nginx 的 <code>stub_status</code>（基礎）或 VTS 模組／<code>nginx-prometheus-exporter</code>（細到 per-status、per-upstream 的請求率），由 Prometheus 抓、Grafana 畫儀表板並設告警；日誌面把 access log 送到 Loki／ELK／Datadog 之類做查詢與長期保存。</p>
<p>分界濃縮成一句：終端機 TUI 答「這台機器現在怎樣」，pipeline 答「趨勢如何、超標叫我」。所以請求一直都有被監控，只是持續監控的那份在 Prometheus 與日誌平台、不在終端機。生產 pipeline 的設計（metrics、dashboard、SLO、告警與 vendor 選型）屬後端觀測性的範圍，見 <a href="/blog/backend/04-observability/" data-link-title="模組四：可觀測性平台" data-link-desc="整理 log、metric、trace、dashboard 與 alert 的後端操作實務">可觀測性平台</a>；當排查升級成事故、需要止血與復盤的協作流程時，見 <a href="/blog/backend/08-incident-response/" data-link-title="模組八：事故處理與復盤" data-link-desc="用 IR 領域詞彙建問題節點、以服務級案例庫累積事故脈絡，先建概念與案例庫再進實作交接">事故處理與復盤</a>。</p>
<h2 id="下一步路由">下一步路由</h2>
<ul>
<li>系統資源（CPU／記憶體／磁碟）的即時監控：<a href="/blog/linux/tools/cli/tui-monitoring-tools/" data-link-title="TUI 監控工具：btop、htop、k9s 的遠端使用與刷新率調校" data-link-desc="全螢幕 TUI 監控工具在遠端 SSH 情境的使用：htop 進程操作、btop 多資源儀表板、k9s 管 Kubernetes，以及慢速連線下刷新率與頻寬的取捨。">TUI 監控工具</a>。</li>
<li>把即時觀測擺進可持久化的多工器 pane：<a href="/blog/linux/tools/cli/tmux-persistence-and-basics/" data-link-title="tmux 基礎：遠端 session 持久化與基本操作" data-link-desc="tmux 終端機多工器的遠端使用核心：detach/reattach 讓 session 脫離連線生命週期、prefix key 與 window/pane 操作、手機友善的快捷鍵調校，以及 tmux 與 zellij 的選型對照。">tmux 基礎</a>。</li>
<li>這類工具在遠端工具分類中的定位：<a href="/blog/linux/tools/cli/cli-graphical-tools-overview/" data-link-title="終端機圖形化工具總覽：遠端操作下的 TUI、文字圖表與多工器" data-link-desc="在純文字終端機裡用 ASCII 與製圖字元做出監控儀表板、資料圖表與多視窗操作的工具總覽，並針對 SSH 伺服器、手機平板、低頻寬三種遠端情境給出選型判讀。">終端機圖形化工具總覽</a>。</li>
</ul>
]]></content:encoded></item></channel></rss>