跳轉到

Log 位置與分析

查看 daemon log

常規 log 查詢優先使用 tapioctl log <target>,詳見 tapioctl 指令參考 → log

不在 tapioctl log 涵蓋範圍的路徑:

來源 路徑
Cron 排程 journalctl -u crond
Kernel dmesg -Tjournalctl -k

看「真正死前最後一行」

死亡瞬間 spdlog 可能來不及 flush。先看 stdout

tapioctl log core-stdout

stdout 是 unbuffered(或 line buffered),通常會看到 segfault / abort / libc panic 的最後訊息。

接著看 spdlog:

tapioctl log core

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

# 系統層
sudo journalctl --since "1 hour ago" -p err

# spdlog
tapioctl log core -g 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.bin mtime(shm 寫入)
  • 委託送出但回報遲到 → tapioctl log core(送單)+ packet log 的 R02 回報 + TMP 那端的對應紀錄