Phase 5: Documenting
Every integration ships with four documents: a README and three reference guides. This consistency is intentional — operators who have used one integration know exactly where to find information in the next.
Document 1: README.md
The README is the landing page. It answers: what is this, what does it do, how do I install it, and where do I find more detail?
Standard README sections
- Title and one-line description — what the integration does
- Dashboard screenshots — visual proof it works (builds confidence before installation)
- Features list — bullet points of key capabilities
- Installation steps — numbered, copy-paste ready
- Repository structure — tree view with one-line descriptions per file
- How it works — ASCII flow diagram showing the data path
- Requirements — Wazuh version, Python version, network access, vendor prerequisites
- Reference docs — links to the three guides
Style conventions
- Installation steps are numbered and assume zero prior knowledge of the integration
- Every command is copy-paste ready (includes
sudo, full paths, etc.) - The “How it works” ASCII diagram follows the actual execution flow from ossec.conf through to OpenSearch
- Requirements list the minimum supported versions, not the versions you happened to test on
Document 2: Configuration reference (artifacts/guides/configuration.md)
Comprehensive reference for every knob the operator can turn. This is not a tutorial — it is a reference card.
Standard sections
- Credential variables — table of credential-related env vars
- Credential priority chain — explanation of the three-tier chain with descriptions of each tier
- API/feature settings — table of env vars that control behavior (endpoints, modes, lookback, intervals)
- State file — path, format (JSON example), atomic write explanation, reset instructions
- CLI flags — table of all flags with descriptions
- Test commands — copy-paste examples for common testing scenarios
- Multi-tenant setup — instructions for MSP/MSSP deployments (if applicable)
- Rate limit budget — table showing API limits, default usage, and headroom percentage
Table format
Use consistent table format for all variables:
| Variable | Default | Description |
|---|---|---|
VN_API_KEY |
(required) | Vendor API key. Set via .secrets (recommended) or env var. |
VN_DEBUG |
0 |
Debug verbosity: 0=off, 1=info, 2=verbose, 3=trace. |
Document 3: Rules reference (artifacts/guides/rules-reference.md)
Maps every rule ID to its purpose. This is the document operators consult when they see a rule fire and need to understand what it means.
Standard sections
- Rule ID ranges — which IDs belong to which event family
- Rule catalog — table with ID, level, description, and triggering condition for every rule
- Field reference — table mapping namespace fields to their OpenSearch paths and example values
- Severity rationale — why each event type has its assigned severity level
- Groups — what Wazuh groups are assigned and what they mean
- MITRE ATT&CK mapping (if applicable) — which tactics/techniques are tagged
Rule catalog format
| Rule ID | Level | Description | Matches when |
|---|---|---|---|
| 100800 | 0 | Base rule (no alert) | Any vendorname event |
| 100801 | 3 | Sign-in attempt | vn.event_type = signin |
| 100802 | 7 | Failed sign-in | vn.event_type = signin AND vn.outcome = failure |
| 100890 | 8 | Integration error | vn.event_type = error |
Document 4: Troubleshooting (artifacts/guides/troubleshooting.md)
Problem-solution pairs for every issue an operator is likely to encounter. Written as a reference, not a narrative.
Standard sections
- Quick diagnostics — commands to check if the integration is running and producing events
- Common problems — table of symptom → cause → fix
- Test commands — standalone execution examples for debugging
- State management — how to reset state, force backfill, inspect cursor positions
- Log locations — where to find wodle output, Wazuh manager logs, OpenSearch errors
- Getting help — how to file an issue, what information to include
Problem table format
| Symptom | Cause | Fix |
|---|---|---|
| No events in dashboard | Decoder not matching | Verify program_name in decoder matches the <tag> value in ossec.conf |
Permission denied in logs |
Wrong file ownership | chown root:wazuh, chmod 640/750 |
| Events appear but wrong rule | Field name mismatch | Check namespace prefix in rules vs emitted JSON |
Documentation checklist
- README has dashboard screenshots
- README installation steps are copy-paste ready
- README includes ASCII flow diagram
- Configuration reference covers every env var and CLI flag
- Configuration reference includes credential chain explanation
- Configuration reference has test command examples
- Rules reference has a row for every rule ID
- Rules reference includes field reference table
- Troubleshooting covers the 10 most common issues
- Troubleshooting includes state reset instructions
- All four documents follow the standard section ordering