- name
- prod-log-audit
- description
- Investigate OpenMMO production warnings, errors, suspicious behavior, and unresolved incidents within a deployment interval; correlate journald, nginx, and targeted evidence, then write a dated note to ~/work/notes. Use for "๋ก๊ทธ ์กฐ์ฌ", "๋ก๊ทธ ์ ๊ฒ", "์์ํ ์ ์๋์ง", or "prod ์ ๊ฒ". Routine statistics are covered by the dashboard.
# prod ์ด์ ์งํ ์กฐ์ฌ
๊ฒฝ๊ณ ยท์ค๋ฅ, ํ๋ ์ด์ด๊ฐ ๊ฒช์ ๋ฐ๋ณต ์คํจ, ๋น์ ์ ๋์์ ์กฐ์ฌํ๋ค. ๋์๋ณด๋์์ ํ์ธํ ์ ์๋ ์ผ๋ฐ ํต๊ณ๋ฅผ ๋งค๋ฒ ๋ค์ ์์ฑํ์ง ์๋๋ค.
์กฐ์ฌ๋ ์ฝ๊ธฐ ์ ์ฉ์ด๋ค. ์๋ฒ ์ฌ์์ยท์ค์ ๋ณ๊ฒฝยท์ ์ฌยท์ปค๋ฐ์ ๋ณ๋ ์์ฒญ์ด ์์ ๋๋ง ํ๋ค.
๊ฒฐ๊ณผ๋ `~/work/notes/openmmo-YYYY-MM-DD-log-audit.md`, ์๋ฌธยท๋ถ์ ์๋ฃ๋ ๊ฐ์ ๋ ์ง์ `*-audit/`์ ๋๋ค. ํ๋ ์ด์ด๋ช
ยทIPยท๊ณ์ ์ ๋ณด๊ฐ ์์ผ๋ฏ๋ก ๊ณต๊ฐ ๋ฆฌํฌ ๋ฐ์ ๋ณด๊ดํ๋ค.
## ๋ฒ์์ ์๋ฃ
- `ssh prod`๋ก ์ ์ํ๋ค(VPN ํ์). ์ ์ ์คํจ๋ง์ผ๋ก ๊ฒ์ ์ฅ์ ๋ฅผ ๋จ์ ํ์ง ์๋๋ค.
- ์ฌ์ฉ์๊ฐ ์ง์ ํ ๊ธฐ๊ฐ์ ์ฐ์ ํ๋ค. โ์ด์ ๋ฐฐํฌ๋ถํฐ ์ค๋ ๋ฐฐํฌ๊น์งโ๋ ์ด์ ์๋ฒ ์์๋ถํฐ ์ค๋ ๋ฐฐํฌ์ ์ฒซ ์๋น์ค ์ ์ง ์ง์ ๊น์ง `[์์, ์ข
๋ฃ)`๋ค. ๋ณ๋ ์ง์ ์ด ์์ผ๋ฉด ์ง์ ๋ฐฐํฌ๋ถํฐ ์กฐํ ์์ ๊น์ง๋ค.
- `openmmo-server`, `openmmo-agent-client`์ systemd ์์ยท์ ์ง ๊ธฐ๋ก, ๋ฐฐํฌ ๊ธฐ๋ก๊ณผ Git reflog๋ก ๊ฒฝ๊ณ์ ์คํ ์ปค๋ฐ์ ํ์ธํ๋ค. ๊ตฌ๊ฐ ๋ด ์ถ๊ฐ ์ฌ์์์ ์์ธ๊ณผ ํจ๊ป ๋ณด๊ณ ํ๋ค. ์ค๋ ๋ฐฐํฌ ์งํ ๊ฒ์ฆ์ ๋ณธ ์กฐ์ฌ ๊ตฌ๊ฐ๊ณผ ๊ตฌ๋ถํ๋ค.
- ์๊ฐ์ ์ถ์ธกํ์ง ์๋๋ค. `journalctl`์๋ `+0900` ๋ฑ ์๊ฐ๋๋ฅผ ๋ช
์ํ๊ณ JSON์ `__REALTIME_TIMESTAMP`๋ก ์ ํํ ์๋ฅธ๋ค. ๋ณธ๋ฌธ์ KST, ๋ก๊ทธ ๋ฉ์์ง ์ ์๊ฐ์ UTC์ผ ์ ์๋ค. SQLite epoch ๋น๊ต์๋ UTC๋ฅผ ์ด๋ค.
- ๊ฒฝ๊ณ ์ ํ๋ฅผ ํฌํจํ ์ ๋์ ํ ๋ฒ ์์งํด ๋ก์ปฌ์์ ์ฌ์ฌ์ฉํ๋ค. ANSI๋ฅผ ์ ๊ฑฐํ๊ณ JSON `MESSAGE`๊ฐ ๋ฐ์ดํธ ๋ฐฐ์ด์ด๋ฉด UTF-8๋ก ๋ณต์ํ๋ค. ์ฒซยท๋ง์ง๋ง ์๊ฐ, ๋๋ฝยทsuppressionยทํ์ฑ ์คํจ ์ฌ๋ถ๋ฅผ ํ์ธํ๋ค.
- Nginx์ ํ์ ๋ access/error ๋ก๊ทธ์ ์ปค๋ยทjournald์ ํด๋น ๊ตฌ๊ฐ๋ ํ์ธํ๋ค. ์๋ฌธ๊ณผ ๋ถ์ ์คํฌ๋ฆฝํธ, ์ฒดํฌ์ฌ์ ๋จ๊ธด๋ค. ๋ํ ์ ๋ฌธยท์ ์ฒด DB๋ ๊ธฐ๋ณธ ์์ง ๋์์ด ์๋๋ฉฐ ๊ตฌ์ฒด์ ์ธ ์ด์ ์งํ ํ์ธ์ ํ์ํ ์๋ฃ๋ง ์ถ๊ฐํ๋ค.
- ๊ณผ๊ฑฐ ๋ก๊ทธ์ ๋์ยท์ค์ ์ ๋น์ ๋ฐฐํฌ ์ปค๋ฐ๊ณผ ๋์กฐํ๋ค. ํ์ฌ ์ฝ๋๋ ํ์ฌ HTTP ์๋ต์ ๊ณผ๊ฑฐ ์ํ์ ์ฆ๊ฑฐ๋ก ์ฐ์ง ์๋๋ค.
## ๊ฒฝ๊ณ ยท์ค๋ฅ ์กฐ์ฌ
๋จผ์ ์๋ฒยทNPC์ WARN/ERROR๋ฅผ ์ ํ๋ณ๋ก ๋ฌถ๋๋ค. ์ฌ๊ฐํ ์ ๋น๋ ์ค๋ฅ๋ฅผ ๋์น์ง ์๋๋ก ์์ ๋น๋ ๋ฐ์ ์ ํ๋ ์ฝ๋๋ค. INFO์ ์คํจ ๊ฒฐ๊ณผ์ ์ ํฌ ๊ฐ์ฌ ๊ธฐ๋ก๋ ํ์์ ๋ฐ๋ผ ๋์กฐํ๋ค.
๊ฐ ์ ์๋ฏธํ ํญ๋ชฉ์ **์ฆ์ยท์ํฅ, ๋์, ์ฒซ/๋ง์ง๋ง ์๊ฐ, ๋ฐ๋ณต ํ์ยท๋น๋, ๋ํ ๊ทผ๊ฑฐ, ์์ธ ํ์ค์ฑ, ํ์ ํ๋ณด**๋ฅผ ์ ๋๋ค. ๊ฑด์๋ ์ด์ ํ๋จ์ ํ์ํ ๋ฒ์์์๋ง ์ด๋ค.
- ์์ ์ฑ: panic, OOM, ๋น์ ์ ์ข
๋ฃ, DB ์ ๊ธยท์ ์ฅ ์คํจ, ๋์คํฌ ๋ถ์กฑ, ๋ก๊ทธ ์ ์ค, ์ง์ฐยทํ ํฌํ. ํ๋ ์ด์ด๋ช
์ด๋ ๋ํ์ ํฌํจ๋ ๋จ์ด๋ฅผ ์ค์ ์ฅ์ ์ ํผ๋ํ์ง ์๋๋ค.
- ์ด๋: `Blocked move`, ์ธํ๋ฆฌยท์ง ์ถฉ๋, ๊ณ๋จ ๋ฐ ์ธต ๋ณ๊ฒฝ, `Waypoint queue full`, ๊ฐ์ ์ด๋ ์ข
๋ฃ. ๊ฐ์ ํ๋ ์ด์ดยท์์น์ ์ฐ์์ฑ, ์ฌ๋ฌ ํ๋ ์ด์ด์ ๋์ผ ์ง์ ์คํจ, ๋ถ๋น ํผํฌ์ ์งํ ์ด๋ฒคํธ๋ฅผ ๋ณธ๋ค. ํ ์ด๊ณผ ๋ค ์ฌ๋ง๋ง์ผ๋ก ์คํธ ํด๋ฆญ์ ๋จ์ ํ์ง ์๋๋ค. `Waypoint queue full`์ด ๋ฐ๋ณต๋๋ฉด ๊ฐ์ ํ๋ ์ด์ด์ `movement_audit` ํ๊น WARN `Waypoint overflow trace`(30์ด๋น 1ํ)์์ ์์ฒญ ์์ ๊ฐ๊ฒฉยท`raw.sprinting`ยท`received_pose.mounted`์ ํฑ์ `speed`ยท`hunger_mult`ยท`sprint_allowed`๋ฅผ ๋์กฐํด ํด๋ผ์ด์ธํธ์ ์๋ฒ์ ์๋ ๋ถ์ผ์น ์์ธ์ ํ์ธํ๋ค.
- ๊ณต๊ฒฉ: `Rejected player attack`์ reason๊ณผ ์์ธ(๋์ ์๋ฉธยท์์ฒดยท์ธตยท๊ฑฐ๋ฆฌ), ๋์ผ ๊ณต๊ฒฉ์/๋์์ ๋ฐ๋ณต ๊ธฐ๊ฐ๊ณผ ํ์ฉ ๊ณต๊ฒฉ์ ๋์กฐํ๋ค. ๊ณ ์ ๋น๋๋ ๋ฎ์ ์ด๋น ์์ฒญ ์๋ง์ผ๋ก ์ ์ยท์ด๋ทฐ์ฆ๋ฅผ ํ์ ํ์ง ์๋๋ค. ํ์ํ ๊ฒฝ์ฐ `data/combat-audit/*.jsonl`์ HP ์์งยท์์ฒญ ๊ฐ๊ฒฉยทํ์ฉ/๊ฑฐ์ ยท`history_overflow`ยท`dropped_events`๋ฅผ ํ์ธํ๋ค. ๊ฐ์ฌ ๋์ ๋ฐ๊น์ง ๊ฒฐ๊ณผ๋ฅผ ์ผ๋ฐํํ์ง ์๋๋ค.
- ์ ์: ํ๋กํ ์ฝ ๊ฑฐ๋ถ, ์ธ์
๊ต์ฒด, heartbeat, reset, ์ธ์ฆ ์คํจ. ๋ฐฐํฌ ์ ํ ์ค ์ผ์ ์คํจ์ ์ ์ํ ํ ์ง์ ์คํจ๋ฅผ ๋๋๋ค. `[+N more in the last 60s]`๋ ์ต์ ๋ถ์ด๋ฉฐ ๋ก๊ทธ ์ค ์์ ์์ฒญ ์๋ฅผ ๊ตฌ๋ถํ๋ค. ๊ฐ์ IP๋ /24๋ง์ผ๋ก ๋ค์ค ๊ณ์ ยทํ๋ก์ยท๋ถ์ ํ์๋ฅผ ํ์ ํ์ง ์๋๋ค.
- NPC: LLM ์ธ์ฆยท์ฉ๋ยทํ์์์, ์๋ต ํ์ฑ ์คํจ, ๊ธด ๋๊ธฐ, ํ๋ ์คํจ ๋ฃจํ, ์์ /์ฌ๊ด ๊ณ ์ฐฉ, ์์ฅ ํ์ ์ค๋ฅ. `llm turn ... error`์ `LLM prompt failed`์ฒ๋ผ ํ ์ฌ๊ฑด์ ์ค๋ณต ๋ก๊ทธ๋ฅผ ๊ตฌ๋ถํ๋ค. ์๋น์ค active๋ NPC ์
์ฅ๋ง์ผ๋ก LLM ์ ์์ด๋ผ๊ณ ํ๋จํ์ง ์๋๋ค.
- Nginx: ๋ชจ๋ 5xx, ๋ฐ๋ณต๋๋ ์ค์ ๋ฆฌ์์ค 404, ์์ ๋ฐ API ์ธ์ฆ ์๋ต๊ณผ ๊ณต๊ฒฉ์ฑ ์์ฒญ์ ํ์ธํ๋ค. ์๋ ํ์ผ์ `/api/terrain/water-field`ยท`height-original` 404์ ์ค์บ๋ ์์ฒญ์ ์ค์ ํ๋ ์ด ์ฅ์ ์ ๊ตฌ๋ถํ๋ค. ์บ์ยท์ฌ๋ค์ด๋ก๋ยท์ ์ก ํญ์ฆ์ ์ด์ ์งํ๊ฐ ์์ ๋๋ง ์์ธ ๋ถ์ํ๋ค. ๋ฐ์ด๋๋ฆฌยท๋น์ ์ ์์ฒญ์ค ๋๋ฌธ์ ์กฐ์ฉํ ์ง๊ณ์์ ๋๋ฝ๋์ง ์๊ฒ ํ๋ค.
๊ด์ธก ์ฌ์ค๊ณผ ๊ฐ์ค์ ๊ตฌ๋ถํ๋ค. ์ฅ์๊ฐ ํ๋ยท๋ฐ๋ณต ์ ์ยท๊ณต์ IP๋ง์ผ๋ก ์ ์ฌ ํ๋ณด๋ฅผ ๋ง๋ค์ง ์๋๋ค. ์์ ํจ๊ณผ๋ ์์ ์ด ์ค์ ์ ์ฉ๋ ๊ตฌ๊ฐ๊ณผ ์ถฉ๋ถํ ํ๋์ด ์์ ๋ ํ๊ฐํ๋ค.
## ์ผ๋ฐ ํต๊ณ์ ์ ํ ์กฐ์ฌ
๊ธฐ๋ณธ ๋ณด๊ณ ์์์ ์ ์์ยท๊ณ์ ยท๋ ๋ฒจยทXP ์์, ์ ์ฒด ๊ฒฝ์ ์์งยท์ฌ๊ณ ยท์ธ์ฑํธ/๋๋กญ ํต๊ณ, ์น ์ํ์ฝ๋ยท์ ์ก๋ ๋ถํฌ, ์์
๋ด ํ๋ณด๋ฅผ ์๋ตํ๋ค. ์์ ๋ณด๊ณ ์์ ํด๋น ํ๋ฅผ ๊ด์ฑ์ ์ผ๋ก ์ฌ์์ฑํ์ง ์๋๋ค.
์ด์ ์งํ๋ฅผ ์ค๋ช
ํ๋ ๋ถ๋ชจยท๋น๊ต ์์น๋ ์ฌ์ฉ์๊ฐ ๋ณ๋๋ก ์์ฒญํ ํต๊ณ๋ ํ์ํ ๋งํผ๋ง ํฌํจํ๋ค.
- ์์ดํ
๋ณต์ ยท๋น์ ์ ์์ฐ ์ฆ๊ฐ๊ฐ ์์ฌ๋๋ฉด ํด๋น ๊ฑฐ๋ยท์บ๋ฆญํฐยท๊ธฐ๊ฐ์ผ๋ก ์ขํ ๋ก๊ทธ์ ์ฝ๊ธฐ ์ ์ฉ DB ์ฌ๋ณธ์ ๋์กฐํ๋ค. DB๋ `/home/ubuntu/work/OnlineRPG/data/game_data.db`๋ก ๊ณ ์ ํ๊ณ , ์คํ ์ค ํ์ผ์ ๋จ์ ๋ณต์ฌ ๋์ ์ผ๊ด๋ SQLite ๋ฐฑ์
์ ์ฌ์ฉํ๋ค. ์ค๋
์ท ์๊ฐ๊ณผ ๋ก๊ทธ ์ฐฝ์ ์ฐจ์ด, ์์ง ์ฐฝ๊ณ ยท์ขํยท๊ธ๊ณ ยท์ธ๊ธยท์ญ์ ๋ฅผ ๊ณ ๋ คํ๋ค.
- [gold_flow.py](gold_flow.py)๋ ์ ํ์ ๋ณด์กฐ ๋๊ตฌ๋ค. ๋น์ ๋ฐฐํฌ๋ณธ์ ์์ธ ์ข
๋ฅ์ ๋ก๊ทธ๋ฅผ ๋์กฐํ๊ณ ์ขํ ์๊ธยท์ธ๊ธ ๋ฑ ๋ฏธ์ง์ ํ๋ฆ์ ๋ณด์ ํ๊ธฐ ์ ์๋ ์์์ง๋ฅผ ํ์ ํ์ง ์๋๋ค. RicaยทWick ๊ฑฐ๋๋ ์์ฑ/์๋ฉธ, KarlยทSigne๋ ์ด์ ์ด๋ฉฐ ๋์ฌ๊ธฐ๋ ๋ณ๋ ํ์ธํ๋ค. 1g = 10,000c.
- ๊ฐํ ์ด์์ ๋น์ `data-src/items.csv`ยท`world_drop.csv`์ ์๋/์ฑ๊ณต/ํ๊ดด ๋ก๊ทธ๋ก ํ์ธํ๋ค. `destroyed ... enchanting at +N`์ ์๋ ์ ๋จ๊ณ์ด๋ฉฐ ๋ณด๋์ค ๋๋กญ ํ ์ค์ ์ฌ๋ฌ ์ฅ์ด ์์ ์ ์๋ค.
- ์์
๋ด์ ๋ณ๋ ์์ฒญ ์์๋ง [tales.py](tales.py)์ `doc/HEROIC_TALES.md`๋ฅผ ์ฌ์ฉํ๋ค. ํ๋ณด๋ ์ฌ์ค ํ์ธ ์ ์์ฅ์ ๋ฃ์ง ์๋๋ค. ์ด์ `agent-client/data/tales/ledger.txt` ์ฐ๊ธฐ๋ ํด๋น ์ฐ๊ธฐ ์์ฒญ/์น์ธ์ด ์์ ๋๋ง ํ๋ฉฐ, ์์ฐ์ด `DATE | HERO | ๊ธฐ๋ก` ํ์๊ณผ ๊ธฐ์กด ๋ด์ฉ์ ๋ณด์กดํ๋ค.
## ์ง์ ์กฐ์ฌ์ ๋ณด๊ณ
์ง์ ๋ณด๊ณ ์์ ๋ฏธํด๊ฒฐ ๊ฒฝ๊ณ ยท์ค๋ฅยท์์ํ ๋์์ ์ด๋ฒ ์ฐฝ์์ ๋์กฐํ๋ค. ์ผ๋ฐ ํต๊ณ ์ถ์ ํญ๋ชฉ์ ๋์๋ณด๋๋ก ๋๊ธฐ๊ณ ๋งค๋ฒ ์ฌ์ธก์ ํ์ง ์๋๋ค.
ํ์ ์ ํด์ยท๊ฐ์ ยท๋ฏธํด๊ฒฐยท์
ํยท๋ฏธ์ฌํยท์ฌ๊ฒ์ฆ ๋ถ๊ฐ๋ฅผ ๊ตฌ๋ถํ๋ค. ํด๋น ํ๋ ์ด์ด๊ฐ ํ๋ํ์ง ์์๊ฑฐ๋ ํ๋ณธ์ด ๋ถ์กฑํ๋ฉด ํด์๋ผ๊ณ ์ฐ์ง ์๋๋ค. ์ด์ ๋ฐฐํฌ์๋ง ์๋ ํ์๊ณผ ์ด๋ฒ์ ์๋ก ์๊ธด ํ์์ ๊ตฌ๋ถํ๋ค.
๋ณด๊ณ ์๋ ๋ค์ ๋ด์ฉ๋ง ํ์ํ ๋ถ๋์ผ๋ก ๊ตฌ์ฑํ๋ค.
1. ์ ํํ ์กฐ์ฌ ์ฐฝยท์คํ ์ปค๋ฐยท๊ตฌ๊ฐ ๋ด ๋น์ ์ ์ฌ์์ ์ฌ๋ถ.
2. ์ํฅ๊ณผ ์๊ธ์ฑ ์์ ์ฃผ์ ์ด์ ์งํ ๋ฐ ๊ทผ๊ฑฐ.
3. ๋ฐฐํฌ ์ ํยท์ผ๋ฐ ์ค์บ ๋ฑ ์ค๋ช
๊ฐ๋ฅํ ์ก์์ ์งง์ ์์ฝ.
4. ์ง์ ๋ฏธํด๊ฒฐ ํญ๋ชฉ์ ๊ด๋ จ ๊ฒฐ๊ณผ์ ์ฐ์ ํ์ ํ๋ณด.
5. ์๋ฌธ ๊ฒฝ๋กยท์ฌํ ๋ฐฉ๋ฒยท๋๋ฝ ๋ฐ ํ์ ํ๊ณ.
์ฌ์ฉ์์๊ฒ๋ ํต์ฌ ๋ฐ๊ฒฌ๊ณผ ๋ค์ ์กฐ์น ํ๋ณด๋ฅผ ์งง๊ฒ ๋ณด๊ณ ํ๊ณ ์ ์ฒด ๋
ธํธ๋ฅผ ์ฐ๊ฒฐํ๋ค. ๋ฐ๊ฒฌ์ด ์์ผ๋ฉด ํ์ธ ๋ฒ์์ ํจ๊ป ๊ทธ๋ ๊ฒ ๋งํ๋ฉฐ ํต๊ณ๋ก ๋ถ๋์ ์ฑ์ฐ์ง ์๋๋ค.
View on GitHub