Log 位置與分析¶
查看 daemon log¶
常規 log 查詢優先使用 tapioctl log <target>,詳見 tapioctl 指令參考 → log。
不在 tapioctl log 涵蓋範圍的路徑:
| 來源 | 路徑 |
|---|---|
| Cron 排程 | journalctl -u crond |
| Kernel | dmesg -T 或 journalctl -k |
看「真正死前最後一行」¶
死亡瞬間 spdlog 可能來不及 flush。先看 stdout:
stdout 是 unbuffered(或 line buffered),通常會看到 segfault / abort / libc panic 的最後訊息。
接著看 spdlog:
Cron 觸發紀錄¶
# 看最近 200 行 cron log
sudo journalctl -u crond -n 200
# 過濾今天
sudo journalctl -u crond --since today
# 看特定 user 的 cron
sudo journalctl -u crond | grep <operator>
每筆排程觸發會記 (<operator>) CMD (...) — 看到這行表示 cron 真的跑了;後續成敗看程式自身的 log。
Kernel / 系統¶
# 最新 kernel ring buffer
sudo dmesg -T | tail -100
# OOM-killer 動過嗎
dmesg -T | grep -i 'killed process'
# NIC link 狀態變動
dmesg -T | grep -i 'link is\|link down\|link up'
# segfault
dmesg -T | grep -i segfault
找一段時間內的所有 ERROR¶
結構化封包查詢¶
packet.HHMMSS.jsonl 是每行一個 JSON 物件的 trace:
# 看 R02 失敗的封包
jq -c 'select(.type == "R02" and .status != 0)' \
"$(tapioctl path log-current)"/packet.*.jsonl
# 看特定 investorAcno 的所有事件
jq -c "select(.investor_acno == \"<acno>\")" \
"$(tapioctl path log-current)"/packet.*.jsonl
# 統計各 status code 出現次數
jq -r '.status' "$(tapioctl path log-current)"/packet.*.jsonl | sort | uniq -c | sort -rn
JSON schema 對應:見 SDK 對應的 status code 定義檔。
委託延遲分析¶
tapio-order-latency-stat 讀取當日 packet.*.jsonl,產生委託延遲報告。
兩種延遲基準(-mode):
| 基準 | 起點 | 終點 | 用途 |
|---|---|---|---|
push(預設) |
收到客戶下單封包 | 送出至交易所(R01) | 觀察 Tapio 內部處理 + 風控耗時 |
reply |
收到客戶下單封包 | 回覆客戶第一筆 order_report | 觀察客戶端可感知的端到端延遲 |
兩種模式(依 -order-no 是否提供):
# 全日統計:count / mean / stddev / P50 / P99 / Max + top-K 最快與最慢清單
tapio-order-latency-stat
# 改看回覆基準
tapio-order-latency-stat -mode reply
# 指定日期(預設 auto,自動讀 storage/system_date)
tapio-order-latency-stat -date 20260506
# 查單一委託:列出該單的延遲與今日排名(1 = 最快)
tapio-order-latency-stat -order-no <ORDER_NO>
# 調整 top-K 筆數(預設 10)
tapio-order-latency-stat -top-k 20
時間取自 packet log 的 rdtsc 錨點(ns 解析度),舊檔(無 rdtsc 欄位)會退回使用 COARSE 時間戳。
跨節點 / 跨組件¶
tapio-quote-receiver、tapio-core 是獨立 process,log 分開。問題鏈可能跨多個:
- 客戶端拿不到報價 →
tapioctl log quote(接收)+tapioctl log core(subscription)+data/quote/info.binmtime(shm 寫入) - 委託送出但回報遲到 →
tapioctl log core(送單)+ packet log 的 R02 回報 + TMP 那端的對應紀錄