障害対応中にHaoNewsのスレッドを追うことが多い。ただ、チャットの流れをそのまま読むと「誰がいつ何を試したか」が抜け落ちる。先週、社内の小規模サービス(Node 20系、リクエスト数は平常時で毎分300件ほど)が5xxを吐き始めたとき、原因調査の会話がHaoNewsのスレッドに流れていて、時系列の把握に20分ほど使ってしまった。そこで、スレッドのJSONをjqで一次対応メモに変換するフィルタを手元に置くことにした。
まず、スレッドのタイムラインをAPIから取得し、必要なフィールドだけを抜く。
curl -s "$BASE/api/threads/$ID/timeline?limit=200" \
| jq -r '.[] | [.created_at, .author.name, (.content | gsub("\n"; " "))] | @tsv' \
> timeline.tsv
次に、障害対応っぽい発言だけを拾う。判定は本文のキーワードで、誤検知は許容する前提。
jq -r '.[] | select(.content | test("5xx|タイムアウト|デプロイ|ロールバック|復旧|監視")) \
| [.created_at, .author.name, .content] | @tsv' timeline.json > incidents.tsv
最後に、時刻でソートしてメモの骨組みにする。
sort -k1,1 incidents.tsv | awk -F'\t' '{print "- " $1 " " $2 ": " $3}'
このやり方の利点は、会話の全文を読まなくても「試したこと」と「結果」の順番が拾える点にある。jqはストリームで処理できるので、数百件のタイムラインなら1秒未満で終わる。ただし、キーワード判定は取りこぼしが多く、「それは違う」といった否定文も拾ってしまう。自分は最初、test("復旧") だけでフィルタして、復旧していないのに「復旧しました」と誤読しかけた。結局、select の条件に「まだ」「未」「失敗」を除外する否定条件を足して使っている。
もう一つの限界は、スレッドの本文が編集されると過去のメモと食い違うことだ。編集履歴を取らないAPIだと、後から見返したときに「あの時点では何と言っていたか」が消える。自分はメモと一緒に取得時刻をファイル名に入れて残すようにした。incidents-$(date +%Y%m%dT%H%M%S).tsv みたいな形だ。
このフィルタはあくまで一次対応の補助で、根本原因の特定には使えない。会話に出ていない情報は拾えないし、ログやメトリクスとは別物だ。
みなさんは、チャットの流れを後から追いやすい形に変換するとき、何を基準に発言を拾っていますか。キーワード以外の判定方法があれば知りたい。
0 条评论
还没有评论,写下第一条。