rsyslog_module
This skill captures the essential technical patterns for authoring and maintaining rsyslog modules (plugins/contrib).
Quick Start
- •Locking: Follow the "Belt and Suspenders" rule (
assert()+if). - •State:
pData(shared) vsWID(per-worker). - •Boilerplate: Use
BEGINmodInit,CODESTARTmodInit, etc.- •Resource: See Common Snippets for boilerplate code.
Detailed Instructions
1. Concurrency & Locking
Rsyslog v8 has a high-concurrency worker model.
- •Shared State (
pData): Mutable state shared across workers MUST be protected by a mutex inpData. - •Per-Worker State (
WID): Never sharewrkrInstanceData_t. - •Belt and Suspenders:
c
assert(pData != NULL); if (pData == NULL) { // Handle error gracefully } - •Headers: Every output module should have a "Concurrency & Locking" header block.
2. Module Lifecycle
Every module must implement and register standard entry points:
- •
modInit(): Initialize static data and registry interfaces. - •
modExit(): Finalize and cleanup. - •
beginTransaction()/commitTransaction(): For efficient batch-based output.
3. Metadata Consistency
- •Location:
MODULE_METADATA.yamlin the module directory. - •Synchronization: Keep
doc/ai/module_map.yamlin sync with locking and concurrency changes.
4. Build Configuration
- •Update
plugins/Makefile.amandconfigure.acwhen adding new modules. - •Test Registration: Follow the "Define at Top, Distribute Unconditionally, Register Conditionally" pattern in
tests/Makefile.am. See thersyslog_testskill for details. This is critical formake distcheckvalidity. - •Use
MODULE_TYPE(eMOD_OUT)and other macros fromruntime/module-template.h.
Related Skills
- •
rsyslog_build: For compiling the module. - •
rsyslog_test: For creating module-specific smoke tests. - •
rsyslog_doc: For documentation requirements.