specweave 0.18.1 → 0.20.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (389) hide show
  1. package/CLAUDE.md +229 -1817
  2. package/README.md +68 -0
  3. package/bin/specweave.js +62 -6
  4. package/dist/plugins/specweave/lib/hooks/sync-living-docs.d.ts.map +1 -1
  5. package/dist/plugins/specweave/lib/hooks/sync-living-docs.js +3 -0
  6. package/dist/plugins/specweave/lib/hooks/sync-living-docs.js.map +1 -1
  7. package/dist/plugins/specweave/lib/hooks/update-ac-status.d.ts +21 -0
  8. package/dist/plugins/specweave/lib/hooks/update-ac-status.d.ts.map +1 -0
  9. package/dist/plugins/specweave/lib/hooks/update-ac-status.js +162 -0
  10. package/dist/plugins/specweave/lib/hooks/update-ac-status.js.map +1 -0
  11. package/dist/plugins/specweave-ado/lib/ado-spec-content-sync.d.ts.map +1 -1
  12. package/dist/plugins/specweave-ado/lib/ado-spec-content-sync.js +65 -6
  13. package/dist/plugins/specweave-ado/lib/ado-spec-content-sync.js.map +1 -1
  14. package/dist/plugins/specweave-github/lib/completion-calculator.d.ts +112 -0
  15. package/dist/plugins/specweave-github/lib/completion-calculator.d.ts.map +1 -0
  16. package/dist/plugins/specweave-github/lib/completion-calculator.js +301 -0
  17. package/dist/plugins/specweave-github/lib/completion-calculator.js.map +1 -0
  18. package/dist/plugins/specweave-github/lib/duplicate-detector.d.ts +3 -3
  19. package/dist/plugins/specweave-github/lib/duplicate-detector.js +3 -3
  20. package/dist/plugins/specweave-github/lib/epic-content-builder.d.ts +7 -0
  21. package/dist/plugins/specweave-github/lib/epic-content-builder.d.ts.map +1 -1
  22. package/dist/plugins/specweave-github/lib/epic-content-builder.js +42 -0
  23. package/dist/plugins/specweave-github/lib/epic-content-builder.js.map +1 -1
  24. package/dist/plugins/specweave-github/lib/github-client-v2.d.ts +14 -0
  25. package/dist/plugins/specweave-github/lib/github-client-v2.d.ts.map +1 -1
  26. package/dist/plugins/specweave-github/lib/github-client-v2.js +51 -0
  27. package/dist/plugins/specweave-github/lib/github-client-v2.js.map +1 -1
  28. package/dist/plugins/specweave-github/lib/github-epic-sync.js +1 -1
  29. package/dist/plugins/specweave-github/lib/github-epic-sync.js.map +1 -1
  30. package/dist/plugins/specweave-github/lib/github-feature-sync.d.ts +87 -0
  31. package/dist/plugins/specweave-github/lib/github-feature-sync.d.ts.map +1 -0
  32. package/dist/plugins/specweave-github/lib/github-feature-sync.js +412 -0
  33. package/dist/plugins/specweave-github/lib/github-feature-sync.js.map +1 -0
  34. package/dist/plugins/specweave-github/lib/github-spec-content-sync.d.ts.map +1 -1
  35. package/dist/plugins/specweave-github/lib/github-spec-content-sync.js +64 -13
  36. package/dist/plugins/specweave-github/lib/github-spec-content-sync.js.map +1 -1
  37. package/dist/plugins/specweave-github/lib/progress-comment-builder.d.ts +78 -0
  38. package/dist/plugins/specweave-github/lib/progress-comment-builder.d.ts.map +1 -0
  39. package/dist/plugins/specweave-github/lib/progress-comment-builder.js +237 -0
  40. package/dist/plugins/specweave-github/lib/progress-comment-builder.js.map +1 -0
  41. package/dist/plugins/specweave-github/lib/user-story-content-builder.d.ts +97 -0
  42. package/dist/plugins/specweave-github/lib/user-story-content-builder.d.ts.map +1 -0
  43. package/dist/plugins/specweave-github/lib/user-story-content-builder.js +301 -0
  44. package/dist/plugins/specweave-github/lib/user-story-content-builder.js.map +1 -0
  45. package/dist/plugins/specweave-github/lib/user-story-issue-builder.d.ts +83 -0
  46. package/dist/plugins/specweave-github/lib/user-story-issue-builder.d.ts.map +1 -0
  47. package/dist/plugins/specweave-github/lib/user-story-issue-builder.js +386 -0
  48. package/dist/plugins/specweave-github/lib/user-story-issue-builder.js.map +1 -0
  49. package/dist/plugins/specweave-jira/lib/enhanced-jira-sync.d.ts +8 -6
  50. package/dist/plugins/specweave-jira/lib/enhanced-jira-sync.d.ts.map +1 -1
  51. package/dist/plugins/specweave-jira/lib/enhanced-jira-sync.js +78 -117
  52. package/dist/plugins/specweave-jira/lib/enhanced-jira-sync.js.map +1 -1
  53. package/dist/src/cli/commands/import-docs.js +4 -4
  54. package/dist/src/cli/commands/import-docs.js.map +1 -1
  55. package/dist/src/cli/commands/init-multiproject.d.ts.map +1 -1
  56. package/dist/src/cli/commands/init-multiproject.js +17 -18
  57. package/dist/src/cli/commands/init-multiproject.js.map +1 -1
  58. package/dist/src/cli/commands/migrate-to-multiproject.d.ts.map +1 -1
  59. package/dist/src/cli/commands/migrate-to-multiproject.js +8 -4
  60. package/dist/src/cli/commands/migrate-to-multiproject.js.map +1 -1
  61. package/dist/src/cli/commands/switch-project.d.ts.map +1 -1
  62. package/dist/src/cli/commands/switch-project.js +9 -26
  63. package/dist/src/cli/commands/switch-project.js.map +1 -1
  64. package/dist/src/cli/commands/sync-spec-content.js +3 -0
  65. package/dist/src/cli/commands/sync-spec-content.js.map +1 -1
  66. package/dist/src/core/deduplication/command-deduplicator.d.ts +166 -0
  67. package/dist/src/core/deduplication/command-deduplicator.d.ts.map +1 -0
  68. package/dist/src/core/deduplication/command-deduplicator.js +254 -0
  69. package/dist/src/core/deduplication/command-deduplicator.js.map +1 -0
  70. package/dist/src/core/increment/active-increment-manager.d.ts +42 -15
  71. package/dist/src/core/increment/active-increment-manager.d.ts.map +1 -1
  72. package/dist/src/core/increment/active-increment-manager.js +113 -46
  73. package/dist/src/core/increment/active-increment-manager.js.map +1 -1
  74. package/dist/src/core/increment/conflict-resolver.d.ts +40 -0
  75. package/dist/src/core/increment/conflict-resolver.d.ts.map +1 -0
  76. package/dist/src/core/increment/conflict-resolver.js +219 -0
  77. package/dist/src/core/increment/conflict-resolver.js.map +1 -0
  78. package/dist/src/core/increment/discipline-checker.d.ts.map +1 -1
  79. package/dist/src/core/increment/discipline-checker.js +7 -1
  80. package/dist/src/core/increment/discipline-checker.js.map +1 -1
  81. package/dist/src/core/increment/duplicate-detector.d.ts +52 -0
  82. package/dist/src/core/increment/duplicate-detector.d.ts.map +1 -0
  83. package/dist/src/core/increment/duplicate-detector.js +276 -0
  84. package/dist/src/core/increment/duplicate-detector.js.map +1 -0
  85. package/dist/src/core/increment/increment-archiver.d.ts +90 -0
  86. package/dist/src/core/increment/increment-archiver.d.ts.map +1 -0
  87. package/dist/src/core/increment/increment-archiver.js +368 -0
  88. package/dist/src/core/increment/increment-archiver.js.map +1 -0
  89. package/dist/src/core/increment/increment-reopener.d.ts +165 -0
  90. package/dist/src/core/increment/increment-reopener.d.ts.map +1 -0
  91. package/dist/src/core/increment/increment-reopener.js +390 -0
  92. package/dist/src/core/increment/increment-reopener.js.map +1 -0
  93. package/dist/src/core/increment/metadata-manager.d.ts +26 -1
  94. package/dist/src/core/increment/metadata-manager.d.ts.map +1 -1
  95. package/dist/src/core/increment/metadata-manager.js +143 -5
  96. package/dist/src/core/increment/metadata-manager.js.map +1 -1
  97. package/dist/src/core/increment/recent-work-scanner.d.ts +121 -0
  98. package/dist/src/core/increment/recent-work-scanner.d.ts.map +1 -0
  99. package/dist/src/core/increment/recent-work-scanner.js +303 -0
  100. package/dist/src/core/increment/recent-work-scanner.js.map +1 -0
  101. package/dist/src/core/increment/types.d.ts +1 -0
  102. package/dist/src/core/increment/types.d.ts.map +1 -1
  103. package/dist/src/core/increment-utils.d.ts +112 -0
  104. package/dist/src/core/increment-utils.d.ts.map +1 -0
  105. package/dist/src/core/increment-utils.js +210 -0
  106. package/dist/src/core/increment-utils.js.map +1 -0
  107. package/dist/src/core/living-docs/ac-project-specific-generator.d.ts +65 -0
  108. package/dist/src/core/living-docs/ac-project-specific-generator.d.ts.map +1 -0
  109. package/dist/src/core/living-docs/ac-project-specific-generator.js +175 -0
  110. package/dist/src/core/living-docs/ac-project-specific-generator.js.map +1 -0
  111. package/dist/src/core/living-docs/feature-archiver.d.ts +130 -0
  112. package/dist/src/core/living-docs/feature-archiver.d.ts.map +1 -0
  113. package/dist/src/core/living-docs/feature-archiver.js +549 -0
  114. package/dist/src/core/living-docs/feature-archiver.js.map +1 -0
  115. package/dist/src/core/living-docs/feature-id-manager.d.ts +81 -0
  116. package/dist/src/core/living-docs/feature-id-manager.d.ts.map +1 -0
  117. package/dist/src/core/living-docs/feature-id-manager.js +339 -0
  118. package/dist/src/core/living-docs/feature-id-manager.js.map +1 -0
  119. package/dist/src/core/living-docs/hierarchy-mapper.d.ts +144 -83
  120. package/dist/src/core/living-docs/hierarchy-mapper.d.ts.map +1 -1
  121. package/dist/src/core/living-docs/hierarchy-mapper.js +488 -270
  122. package/dist/src/core/living-docs/hierarchy-mapper.js.map +1 -1
  123. package/dist/src/core/living-docs/index.d.ts +6 -0
  124. package/dist/src/core/living-docs/index.d.ts.map +1 -1
  125. package/dist/src/core/living-docs/index.js +6 -0
  126. package/dist/src/core/living-docs/index.js.map +1 -1
  127. package/dist/src/core/living-docs/project-detector.d.ts +6 -0
  128. package/dist/src/core/living-docs/project-detector.d.ts.map +1 -1
  129. package/dist/src/core/living-docs/project-detector.js +35 -1
  130. package/dist/src/core/living-docs/project-detector.js.map +1 -1
  131. package/dist/src/core/living-docs/spec-distributor.d.ts +100 -26
  132. package/dist/src/core/living-docs/spec-distributor.d.ts.map +1 -1
  133. package/dist/src/core/living-docs/spec-distributor.js +1275 -258
  134. package/dist/src/core/living-docs/spec-distributor.js.map +1 -1
  135. package/dist/src/core/living-docs/task-project-specific-generator.d.ts +109 -0
  136. package/dist/src/core/living-docs/task-project-specific-generator.d.ts.map +1 -0
  137. package/dist/src/core/living-docs/task-project-specific-generator.js +221 -0
  138. package/dist/src/core/living-docs/task-project-specific-generator.js.map +1 -0
  139. package/dist/src/core/living-docs/types.d.ts +143 -0
  140. package/dist/src/core/living-docs/types.d.ts.map +1 -1
  141. package/dist/src/core/project-manager.d.ts +2 -17
  142. package/dist/src/core/project-manager.d.ts.map +1 -1
  143. package/dist/src/core/project-manager.js +68 -48
  144. package/dist/src/core/project-manager.js.map +1 -1
  145. package/dist/src/core/spec-content-sync.d.ts +1 -1
  146. package/dist/src/core/spec-content-sync.d.ts.map +1 -1
  147. package/dist/src/core/sync/enhanced-content-builder.d.ts.map +1 -1
  148. package/dist/src/core/sync/enhanced-content-builder.js +2 -1
  149. package/dist/src/core/sync/enhanced-content-builder.js.map +1 -1
  150. package/dist/src/core/sync/performance-optimizer.d.ts +153 -0
  151. package/dist/src/core/sync/performance-optimizer.d.ts.map +1 -0
  152. package/dist/src/core/sync/performance-optimizer.js +220 -0
  153. package/dist/src/core/sync/performance-optimizer.js.map +1 -0
  154. package/dist/src/core/sync/retry-handler.d.ts +98 -0
  155. package/dist/src/core/sync/retry-handler.d.ts.map +1 -0
  156. package/dist/src/core/sync/retry-handler.js +196 -0
  157. package/dist/src/core/sync/retry-handler.js.map +1 -0
  158. package/dist/src/core/types/config.d.ts +94 -0
  159. package/dist/src/core/types/config.d.ts.map +1 -1
  160. package/dist/src/core/types/config.js +16 -0
  161. package/dist/src/core/types/config.js.map +1 -1
  162. package/dist/src/core/types/increment-metadata.d.ts +6 -0
  163. package/dist/src/core/types/increment-metadata.d.ts.map +1 -1
  164. package/dist/src/core/types/increment-metadata.js +10 -1
  165. package/dist/src/core/types/increment-metadata.js.map +1 -1
  166. package/dist/src/integrations/jira/jira-incremental-mapper.d.ts.map +1 -1
  167. package/dist/src/integrations/jira/jira-incremental-mapper.js +4 -8
  168. package/dist/src/integrations/jira/jira-incremental-mapper.js.map +1 -1
  169. package/dist/src/integrations/jira/jira-mapper.d.ts.map +1 -1
  170. package/dist/src/integrations/jira/jira-mapper.js +4 -8
  171. package/dist/src/integrations/jira/jira-mapper.js.map +1 -1
  172. package/package.json +1 -1
  173. package/plugins/specweave/COMMANDS.md +13 -4
  174. package/plugins/specweave/commands/specweave-abandon.md +22 -20
  175. package/plugins/specweave/commands/specweave-archive-features.md +121 -0
  176. package/plugins/specweave/commands/specweave-archive-increments.md +82 -0
  177. package/plugins/specweave/commands/specweave-archive.md +363 -0
  178. package/plugins/specweave/commands/specweave-backlog.md +211 -0
  179. package/plugins/specweave/commands/specweave-fix-duplicates.md +517 -0
  180. package/plugins/specweave/commands/specweave-increment.md +4 -3
  181. package/plugins/specweave/commands/specweave-progress.md +176 -27
  182. package/plugins/specweave/commands/specweave-reopen.md +391 -0
  183. package/plugins/specweave/commands/specweave-restore-feature.md +90 -0
  184. package/plugins/specweave/commands/specweave-restore.md +309 -0
  185. package/plugins/specweave/commands/specweave-resume.md +51 -23
  186. package/plugins/specweave/commands/specweave-status.md +41 -7
  187. package/plugins/specweave/commands/specweave-sync-specs.md +425 -0
  188. package/plugins/specweave/hooks/hooks.json +4 -0
  189. package/plugins/specweave/hooks/lib/sync-spec-content.sh +2 -2
  190. package/plugins/specweave/hooks/post-task-completion.sh +39 -0
  191. package/plugins/specweave/hooks/pre-command-deduplication.sh +83 -0
  192. package/plugins/specweave/hooks/user-prompt-submit.sh +1 -1
  193. package/plugins/specweave/lib/hooks/sync-living-docs.js +2 -0
  194. package/plugins/specweave/lib/hooks/sync-living-docs.ts +4 -0
  195. package/plugins/specweave/lib/hooks/update-ac-status.js +102 -0
  196. package/plugins/specweave/lib/hooks/update-ac-status.ts +192 -0
  197. package/plugins/specweave/skills/archive-increments/SKILL.md +198 -0
  198. package/plugins/specweave/skills/increment-planner/scripts/feature-utils.js +14 -0
  199. package/plugins/specweave/skills/smart-reopen-detector/SKILL.md +244 -0
  200. package/plugins/specweave-ado/lib/ado-spec-content-sync.js +49 -5
  201. package/plugins/specweave-ado/lib/ado-spec-content-sync.ts +72 -6
  202. package/plugins/specweave-confluent/.claude-plugin/plugin.json +23 -0
  203. package/plugins/specweave-confluent/README.md +375 -0
  204. package/plugins/specweave-confluent/agents/confluent-architect/AGENT.md +306 -0
  205. package/plugins/specweave-confluent/skills/confluent-kafka-connect/SKILL.md +453 -0
  206. package/plugins/specweave-confluent/skills/confluent-ksqldb/SKILL.md +470 -0
  207. package/plugins/specweave-confluent/skills/confluent-schema-registry/SKILL.md +316 -0
  208. package/plugins/specweave-github/agents/github-task-splitter/AGENT.md +2 -2
  209. package/plugins/specweave-github/agents/user-story-updater/AGENT.md +148 -0
  210. package/plugins/specweave-github/commands/specweave-github-cleanup-duplicates.md +1 -1
  211. package/plugins/specweave-github/commands/specweave-github-update-user-story.md +156 -0
  212. package/plugins/specweave-github/hooks/post-task-completion.sh +10 -9
  213. package/plugins/specweave-github/lib/completion-calculator.js +262 -0
  214. package/plugins/specweave-github/lib/completion-calculator.ts +434 -0
  215. package/plugins/specweave-github/lib/duplicate-detector.js +3 -3
  216. package/plugins/specweave-github/lib/duplicate-detector.ts +4 -4
  217. package/plugins/specweave-github/lib/epic-content-builder.js +38 -0
  218. package/plugins/specweave-github/lib/epic-content-builder.ts +59 -0
  219. package/plugins/specweave-github/lib/github-client-v2.js +49 -0
  220. package/plugins/specweave-github/lib/github-client-v2.ts +59 -0
  221. package/plugins/specweave-github/lib/github-epic-sync.ts +1 -1
  222. package/plugins/specweave-github/lib/github-feature-sync.js +381 -0
  223. package/plugins/specweave-github/lib/github-feature-sync.ts +568 -0
  224. package/plugins/specweave-github/lib/github-spec-content-sync.js +40 -10
  225. package/plugins/specweave-github/lib/github-spec-content-sync.ts +82 -14
  226. package/plugins/specweave-github/lib/progress-comment-builder.js +229 -0
  227. package/plugins/specweave-github/lib/progress-comment-builder.ts +324 -0
  228. package/plugins/specweave-github/lib/user-story-content-builder.js +299 -0
  229. package/plugins/specweave-github/lib/user-story-content-builder.ts +413 -0
  230. package/plugins/specweave-github/lib/user-story-issue-builder.js +344 -0
  231. package/plugins/specweave-github/lib/user-story-issue-builder.ts +543 -0
  232. package/plugins/specweave-github/skills/github-issue-standard/SKILL.md +189 -0
  233. package/plugins/{specweave-ado/lib/enhanced-ado-sync.js → specweave-jira/lib/enhanced-jira-sync.js} +25 -61
  234. package/plugins/specweave-jira/lib/{enhanced-jira-sync.ts.disabled → enhanced-jira-sync.ts} +26 -52
  235. package/plugins/specweave-kafka/.claude-plugin/plugin.json +26 -0
  236. package/plugins/specweave-kafka/IMPLEMENTATION-COMPLETE.md +483 -0
  237. package/plugins/specweave-kafka/README.md +242 -0
  238. package/plugins/specweave-kafka/agents/kafka-architect/AGENT.md +235 -0
  239. package/plugins/specweave-kafka/agents/kafka-devops/AGENT.md +209 -0
  240. package/plugins/specweave-kafka/agents/kafka-observability/AGENT.md +266 -0
  241. package/plugins/specweave-kafka/commands/deploy.md +99 -0
  242. package/plugins/specweave-kafka/commands/dev-env.md +176 -0
  243. package/plugins/specweave-kafka/commands/mcp-configure.md +101 -0
  244. package/plugins/specweave-kafka/commands/monitor-setup.md +96 -0
  245. package/plugins/specweave-kafka/docker/kafka-local/docker-compose.yml +187 -0
  246. package/plugins/specweave-kafka/docker/redpanda/docker-compose.yml +199 -0
  247. package/plugins/specweave-kafka/docker/templates/consumer-nodejs.js +225 -0
  248. package/plugins/specweave-kafka/docker/templates/consumer-python.py +220 -0
  249. package/plugins/specweave-kafka/docker/templates/producer-nodejs.js +168 -0
  250. package/plugins/specweave-kafka/docker/templates/producer-python.py +167 -0
  251. package/plugins/specweave-kafka/lib/adapters/apache-kafka-adapter.js +438 -0
  252. package/plugins/specweave-kafka/lib/adapters/apache-kafka-adapter.ts +541 -0
  253. package/plugins/specweave-kafka/lib/adapters/platform-adapter.js +47 -0
  254. package/plugins/specweave-kafka/lib/adapters/platform-adapter.ts +343 -0
  255. package/plugins/specweave-kafka/lib/cli/kcat-wrapper.js +258 -0
  256. package/plugins/specweave-kafka/lib/cli/kcat-wrapper.ts +298 -0
  257. package/plugins/specweave-kafka/lib/cli/types.js +10 -0
  258. package/plugins/specweave-kafka/lib/cli/types.ts +92 -0
  259. package/plugins/specweave-kafka/lib/connectors/connector-catalog.js +305 -0
  260. package/plugins/specweave-kafka/lib/connectors/connector-catalog.ts +528 -0
  261. package/plugins/specweave-kafka/lib/documentation/diagram-generator.js +114 -0
  262. package/plugins/specweave-kafka/lib/documentation/diagram-generator.ts +195 -0
  263. package/plugins/specweave-kafka/lib/documentation/exporter.js +210 -0
  264. package/plugins/specweave-kafka/lib/documentation/exporter.ts +338 -0
  265. package/plugins/specweave-kafka/lib/documentation/schema-catalog-generator.js +60 -0
  266. package/plugins/specweave-kafka/lib/documentation/schema-catalog-generator.ts +130 -0
  267. package/plugins/specweave-kafka/lib/documentation/topology-generator.js +143 -0
  268. package/plugins/specweave-kafka/lib/documentation/topology-generator.ts +290 -0
  269. package/plugins/specweave-kafka/lib/mcp/detector.js +298 -0
  270. package/plugins/specweave-kafka/lib/mcp/detector.ts +352 -0
  271. package/plugins/specweave-kafka/lib/mcp/types.js +21 -0
  272. package/plugins/specweave-kafka/lib/mcp/types.ts +77 -0
  273. package/plugins/specweave-kafka/lib/multi-cluster/cluster-config-manager.js +193 -0
  274. package/plugins/specweave-kafka/lib/multi-cluster/cluster-config-manager.ts +362 -0
  275. package/plugins/specweave-kafka/lib/multi-cluster/cluster-switcher.js +188 -0
  276. package/plugins/specweave-kafka/lib/multi-cluster/cluster-switcher.ts +359 -0
  277. package/plugins/specweave-kafka/lib/multi-cluster/health-aggregator.js +195 -0
  278. package/plugins/specweave-kafka/lib/multi-cluster/health-aggregator.ts +380 -0
  279. package/plugins/specweave-kafka/lib/observability/opentelemetry-kafka.js +209 -0
  280. package/plugins/specweave-kafka/lib/observability/opentelemetry-kafka.ts +358 -0
  281. package/plugins/specweave-kafka/lib/patterns/advanced-ksqldb-patterns.js +354 -0
  282. package/plugins/specweave-kafka/lib/patterns/advanced-ksqldb-patterns.ts +563 -0
  283. package/plugins/specweave-kafka/lib/patterns/circuit-breaker-resilience.js +259 -0
  284. package/plugins/specweave-kafka/lib/patterns/circuit-breaker-resilience.ts +516 -0
  285. package/plugins/specweave-kafka/lib/patterns/dead-letter-queue.js +233 -0
  286. package/plugins/specweave-kafka/lib/patterns/dead-letter-queue.ts +423 -0
  287. package/plugins/specweave-kafka/lib/patterns/exactly-once-semantics.js +266 -0
  288. package/plugins/specweave-kafka/lib/patterns/exactly-once-semantics.ts +445 -0
  289. package/plugins/specweave-kafka/lib/patterns/flink-kafka-integration.js +312 -0
  290. package/plugins/specweave-kafka/lib/patterns/flink-kafka-integration.ts +561 -0
  291. package/plugins/specweave-kafka/lib/patterns/multi-dc-replication.js +289 -0
  292. package/plugins/specweave-kafka/lib/patterns/multi-dc-replication.ts +607 -0
  293. package/plugins/specweave-kafka/lib/patterns/rate-limiting-backpressure.js +264 -0
  294. package/plugins/specweave-kafka/lib/patterns/rate-limiting-backpressure.ts +498 -0
  295. package/plugins/specweave-kafka/lib/patterns/stream-processing-optimization.js +263 -0
  296. package/plugins/specweave-kafka/lib/patterns/stream-processing-optimization.ts +549 -0
  297. package/plugins/specweave-kafka/lib/patterns/tiered-storage-compaction.js +205 -0
  298. package/plugins/specweave-kafka/lib/patterns/tiered-storage-compaction.ts +399 -0
  299. package/plugins/specweave-kafka/lib/performance/performance-optimizer.js +249 -0
  300. package/plugins/specweave-kafka/lib/performance/performance-optimizer.ts +427 -0
  301. package/plugins/specweave-kafka/lib/security/kafka-security.js +252 -0
  302. package/plugins/specweave-kafka/lib/security/kafka-security.ts +494 -0
  303. package/plugins/specweave-kafka/lib/utils/capacity-planner.js +203 -0
  304. package/plugins/specweave-kafka/lib/utils/capacity-planner.ts +469 -0
  305. package/plugins/specweave-kafka/lib/utils/config-validator.js +419 -0
  306. package/plugins/specweave-kafka/lib/utils/config-validator.ts +564 -0
  307. package/plugins/specweave-kafka/lib/utils/partitioning.js +329 -0
  308. package/plugins/specweave-kafka/lib/utils/partitioning.ts +473 -0
  309. package/plugins/specweave-kafka/lib/utils/sizing.js +221 -0
  310. package/plugins/specweave-kafka/lib/utils/sizing.ts +374 -0
  311. package/plugins/specweave-kafka/monitoring/grafana/dashboards/kafka-broker-metrics.json +628 -0
  312. package/plugins/specweave-kafka/monitoring/grafana/dashboards/kafka-cluster-overview.json +564 -0
  313. package/plugins/specweave-kafka/monitoring/grafana/dashboards/kafka-consumer-lag.json +509 -0
  314. package/plugins/specweave-kafka/monitoring/grafana/dashboards/kafka-jvm-metrics.json +674 -0
  315. package/plugins/specweave-kafka/monitoring/grafana/dashboards/kafka-topic-metrics.json +578 -0
  316. package/plugins/specweave-kafka/monitoring/grafana/provisioning/dashboards/kafka.yml +17 -0
  317. package/plugins/specweave-kafka/monitoring/grafana/provisioning/datasources/prometheus.yml +17 -0
  318. package/plugins/specweave-kafka/monitoring/prometheus/kafka-alerts.yml +415 -0
  319. package/plugins/specweave-kafka/monitoring/prometheus/kafka-jmx-exporter.yml +256 -0
  320. package/plugins/specweave-kafka/package.json +41 -0
  321. package/plugins/specweave-kafka/skills/kafka-architecture/SKILL.md +647 -0
  322. package/plugins/specweave-kafka/skills/kafka-cli-tools/SKILL.md +433 -0
  323. package/plugins/specweave-kafka/skills/kafka-iac-deployment/SKILL.md +449 -0
  324. package/plugins/specweave-kafka/skills/kafka-kubernetes/SKILL.md +667 -0
  325. package/plugins/specweave-kafka/skills/kafka-mcp-integration/SKILL.md +273 -0
  326. package/plugins/specweave-kafka/skills/kafka-observability/SKILL.md +576 -0
  327. package/plugins/specweave-kafka/templates/config/broker-production.properties +254 -0
  328. package/plugins/specweave-kafka/templates/config/consumer-low-latency.properties +112 -0
  329. package/plugins/specweave-kafka/templates/config/producer-high-throughput.properties +120 -0
  330. package/plugins/specweave-kafka/templates/migration/mirrormaker2-config.properties +234 -0
  331. package/plugins/specweave-kafka/templates/monitoring/grafana/multi-cluster-dashboard.json +686 -0
  332. package/plugins/specweave-kafka/terraform/apache-kafka/main.tf +347 -0
  333. package/plugins/specweave-kafka/terraform/apache-kafka/outputs.tf +107 -0
  334. package/plugins/specweave-kafka/terraform/apache-kafka/templates/kafka-broker-init.sh.tpl +216 -0
  335. package/plugins/specweave-kafka/terraform/apache-kafka/variables.tf +156 -0
  336. package/plugins/specweave-kafka/terraform/aws-msk/main.tf +362 -0
  337. package/plugins/specweave-kafka/terraform/aws-msk/outputs.tf +93 -0
  338. package/plugins/specweave-kafka/terraform/aws-msk/templates/server.properties.tpl +32 -0
  339. package/plugins/specweave-kafka/terraform/aws-msk/variables.tf +235 -0
  340. package/plugins/specweave-kafka/terraform/azure-event-hubs/main.tf +281 -0
  341. package/plugins/specweave-kafka/terraform/azure-event-hubs/outputs.tf +118 -0
  342. package/plugins/specweave-kafka/terraform/azure-event-hubs/variables.tf +148 -0
  343. package/plugins/specweave-kafka/tsconfig.json +21 -0
  344. package/plugins/specweave-kafka-streams/.claude-plugin/plugin.json +23 -0
  345. package/plugins/specweave-kafka-streams/README.md +310 -0
  346. package/plugins/specweave-kafka-streams/skills/kafka-streams-topology/SKILL.md +539 -0
  347. package/plugins/specweave-n8n/.claude-plugin/plugin.json +22 -0
  348. package/plugins/specweave-n8n/README.md +354 -0
  349. package/plugins/specweave-n8n/skills/n8n-kafka-workflows/SKILL.md +504 -0
  350. package/plugins/specweave-release/commands/specweave-release-platform.md +1 -1
  351. package/plugins/specweave-release/hooks/post-task-completion.sh +2 -2
  352. package/src/templates/AGENTS.md.template +601 -7
  353. package/src/templates/CLAUDE.md.template +188 -88
  354. package/dist/locales/de/.gitkeep +0 -0
  355. package/dist/locales/de/cli.json +0 -108
  356. package/dist/locales/en/cli.json +0 -287
  357. package/dist/locales/en/errors.json +0 -7
  358. package/dist/locales/en/templates.json +0 -6
  359. package/dist/locales/es/.gitkeep +0 -0
  360. package/dist/locales/es/cli.json +0 -41
  361. package/dist/locales/fr/.gitkeep +0 -0
  362. package/dist/locales/fr/cli.json +0 -108
  363. package/dist/locales/ja/.gitkeep +0 -0
  364. package/dist/locales/ja/cli.json +0 -108
  365. package/dist/locales/ko/.gitkeep +0 -0
  366. package/dist/locales/ko/cli.json +0 -108
  367. package/dist/locales/pt/.gitkeep +0 -0
  368. package/dist/locales/pt/cli.json +0 -108
  369. package/dist/locales/ru/.gitkeep +0 -0
  370. package/dist/locales/ru/cli.json +0 -269
  371. package/dist/locales/zh/.gitkeep +0 -0
  372. package/dist/locales/zh/cli.json +0 -108
  373. package/dist/plugins/specweave-ado/lib/enhanced-ado-sync.d.ts +0 -25
  374. package/dist/plugins/specweave-ado/lib/enhanced-ado-sync.d.ts.map +0 -1
  375. package/dist/plugins/specweave-ado/lib/enhanced-ado-sync.js +0 -191
  376. package/dist/plugins/specweave-ado/lib/enhanced-ado-sync.js.map +0 -1
  377. package/dist/spec-parser.js +0 -629
  378. package/dist/src/core/sync/spec-content-sync.d.ts +0 -88
  379. package/dist/src/core/sync/spec-content-sync.d.ts.map +0 -1
  380. package/dist/src/core/sync/spec-content-sync.js +0 -5
  381. package/dist/src/core/sync/spec-content-sync.js.map +0 -1
  382. package/dist/tsconfig.tsbuildinfo +0 -1
  383. package/plugins/specweave-ado/commands/specweave-ado-sync-spec.md +0 -255
  384. package/plugins/specweave-github/commands/specweave-github-sync-epic.md +0 -248
  385. package/plugins/specweave-github/commands/specweave-github-sync-from.md +0 -147
  386. package/plugins/specweave-github/commands/specweave-github-sync-spec.md +0 -208
  387. package/plugins/specweave-github/commands/specweave-github-sync-tasks.md +0 -530
  388. package/plugins/specweave-jira/commands/specweave-jira-sync-epic.md +0 -267
  389. package/plugins/specweave-jira/commands/specweave-jira-sync-spec.md +0 -240
@@ -0,0 +1,415 @@
1
+ # ==================================================
2
+ # Prometheus Alerting Rules for Apache Kafka
3
+ # ==================================================
4
+ #
5
+ # Usage (Kubernetes):
6
+ # kubectl apply -f kafka-alerts.yml
7
+ #
8
+ # Usage (Prometheus standalone):
9
+ # Copy to /etc/prometheus/rules/kafka-alerts.yml
10
+ # Add to prometheus.yml:
11
+ # rule_files:
12
+ # - "rules/kafka-alerts.yml"
13
+ # Reload: kill -HUP $(pidof prometheus)
14
+
15
+ apiVersion: monitoring.coreos.com/v1
16
+ kind: PrometheusRule
17
+ metadata:
18
+ name: kafka-alerts
19
+ namespace: monitoring
20
+ labels:
21
+ app: kafka
22
+ prometheus: kube-prometheus
23
+ spec:
24
+ groups:
25
+ # ==================================================
26
+ # Group 1: CRITICAL Alerts (Immediate Action Required)
27
+ # ==================================================
28
+ - name: kafka.critical
29
+ interval: 30s
30
+ rules:
31
+ # ALERT 1: Under-Replicated Partitions
32
+ - alert: KafkaUnderReplicatedPartitions
33
+ expr: sum(kafka_server_replica_manager_under_replicated_partitions) > 0
34
+ for: 5m
35
+ labels:
36
+ severity: critical
37
+ component: kafka
38
+ alert_type: data_loss_risk
39
+ annotations:
40
+ summary: "Kafka has under-replicated partitions ({{ $value }} partitions)"
41
+ description: |
42
+ **CRITICAL**: {{ $value }} partitions are under-replicated.
43
+
44
+ **Impact**: Data loss risk if broker fails.
45
+ **Possible Causes**:
46
+ - Broker down or unreachable
47
+ - Network issues between brokers
48
+ - High replication lag
49
+ - Disk I/O saturation
50
+
51
+ **Action**:
52
+ 1. Check broker status: `kubectl get pods -n kafka` (K8s) or `systemctl status kafka` (VM)
53
+ 2. Check network connectivity between brokers
54
+ 3. Check disk I/O: `iostat -x 1`
55
+ 4. Check broker logs for errors
56
+ runbook_url: "https://kafka.apache.org/documentation/#replication"
57
+
58
+ # ALERT 2: Offline Partitions
59
+ - alert: KafkaOfflinePartitions
60
+ expr: kafka_controller_offline_partitions_count > 0
61
+ for: 1m
62
+ labels:
63
+ severity: critical
64
+ component: kafka
65
+ alert_type: service_degradation
66
+ annotations:
67
+ summary: "Kafka has offline partitions ({{ $value }} partitions)"
68
+ description: |
69
+ **CRITICAL**: {{ $value }} partitions are OFFLINE (no in-sync replicas).
70
+
71
+ **Impact**: Complete data loss for these partitions! Producers/consumers cannot access them.
72
+ **Possible Causes**:
73
+ - All replicas for partition are down
74
+ - Unclean leader election disabled (good) but no ISR available
75
+ - Disk corruption
76
+
77
+ **Action**:
78
+ 1. Identify offline partitions: `kafka-topics.sh --describe --under-min-isr-partitions`
79
+ 2. Check broker logs for failures
80
+ 3. Restart failed brokers if safe
81
+ 4. As last resort: Enable unclean.leader.election.enable=true (DATA LOSS!)
82
+ runbook_url: "https://kafka.apache.org/documentation/#design_ha"
83
+
84
+ # ALERT 3: No Active Controller
85
+ - alert: KafkaNoActiveController
86
+ expr: kafka_controller_active_controller_count == 0
87
+ for: 1m
88
+ labels:
89
+ severity: critical
90
+ component: kafka
91
+ alert_type: cluster_unavailable
92
+ annotations:
93
+ summary: "No active Kafka controller in cluster"
94
+ description: |
95
+ **CRITICAL**: Cluster has NO active controller.
96
+
97
+ **Impact**: Cannot perform:
98
+ - Topic creation/deletion
99
+ - Partition reassignment
100
+ - Preferred leader election
101
+ - Metadata updates
102
+
103
+ **Possible Causes**:
104
+ - Controller broker crashed
105
+ - ZooKeeper connection lost (if using ZooKeeper mode)
106
+ - Split-brain scenario
107
+
108
+ **Action**:
109
+ 1. Check all broker status
110
+ 2. Check ZooKeeper status (if not KRaft mode)
111
+ 3. Check broker logs for controller election messages
112
+ 4. Restart brokers in sequence if needed
113
+ runbook_url: "https://kafka.apache.org/documentation/#controller"
114
+
115
+ # ALERT 4: Multiple Active Controllers
116
+ - alert: KafkaMultipleActiveControllers
117
+ expr: kafka_controller_active_controller_count > 1
118
+ for: 1m
119
+ labels:
120
+ severity: critical
121
+ component: kafka
122
+ alert_type: split_brain
123
+ annotations:
124
+ summary: "Multiple active controllers detected ({{ $value }} controllers)"
125
+ description: |
126
+ **CRITICAL**: {{ $value }} controllers are active (should be exactly 1).
127
+
128
+ **Impact**: Split-brain! Conflicting metadata updates, undefined behavior.
129
+ **Possible Causes**:
130
+ - Network partition
131
+ - ZooKeeper issues (if not KRaft mode)
132
+ - KRaft quorum issues
133
+
134
+ **Action**:
135
+ 1. STOP all operations immediately
136
+ 2. Check network partitioning
137
+ 3. Identify which controller is legitimate
138
+ 4. Restart non-legitimate controllers
139
+ 5. Verify only 1 active controller: `kafka-broker-api-versions.sh --bootstrap-server :9092`
140
+ runbook_url: "https://kafka.apache.org/documentation/#controller"
141
+
142
+ # ALERT 5: Unclean Leader Elections
143
+ - alert: KafkaUncleanLeaderElections
144
+ expr: sum(rate(kafka_controller_unclean_leader_elections_total[5m])) > 0
145
+ for: 1m
146
+ labels:
147
+ severity: critical
148
+ component: kafka
149
+ alert_type: data_loss
150
+ annotations:
151
+ summary: "Unclean leader elections detected ({{ $value }}/sec)"
152
+ description: |
153
+ **CRITICAL**: Unclean leader elections are happening.
154
+
155
+ **Impact**: DATA LOSS! Partition leader elected from out-of-sync replica.
156
+ **Possible Causes**:
157
+ - unclean.leader.election.enable=true (should be false in production!)
158
+ - All ISRs went down, cluster elected non-ISR as leader
159
+
160
+ **Action**:
161
+ 1. **DO NOT** set unclean.leader.election.enable=true in production
162
+ 2. Investigate why all ISRs went down
163
+ 3. Check broker logs for failures
164
+ 4. Review replication.factor and min.insync.replicas settings
165
+ runbook_url: "https://kafka.apache.org/documentation/#design_ha"
166
+
167
+ # ==================================================
168
+ # Group 2: HIGH Priority Alerts (Action Within Hours)
169
+ # ==================================================
170
+ - name: kafka.high
171
+ interval: 30s
172
+ rules:
173
+ # ALERT 6: High Consumer Lag
174
+ - alert: KafkaConsumerLagHigh
175
+ expr: sum by (consumergroup) (kafka_consumergroup_lag) > 10000
176
+ for: 10m
177
+ labels:
178
+ severity: high
179
+ component: kafka
180
+ alert_type: performance_degradation
181
+ annotations:
182
+ summary: "Consumer group '{{ $labels.consumergroup }}' has high lag ({{ $value }} messages)"
183
+ description: |
184
+ **HIGH**: Consumer group is falling behind.
185
+
186
+ **Impact**: Delayed processing, stale data, potential timeout issues.
187
+ **Possible Causes**:
188
+ - Consumer processing too slow
189
+ - Insufficient consumer instances
190
+ - Network issues
191
+ - Partition imbalance
192
+
193
+ **Action**:
194
+ 1. Check consumer logs for errors
195
+ 2. Scale up consumer instances
196
+ 3. Optimize consumer processing logic
197
+ 4. Check partition distribution: `kafka-consumer-groups.sh --describe --group {{ $labels.consumergroup }}`
198
+ threshold: 10000 messages
199
+ runbook_url: "https://kafka.apache.org/documentation/#consumerconfigs"
200
+
201
+ # ALERT 7: ISR Shrinks (High Rate)
202
+ - alert: KafkaISRShrinksHigh
203
+ expr: sum(rate(kafka_server_replica_manager_isr_shrinks_total[5m])) > 5
204
+ for: 5m
205
+ labels:
206
+ severity: high
207
+ component: kafka
208
+ alert_type: replication_issue
209
+ annotations:
210
+ summary: "High rate of ISR shrinks ({{ $value }}/sec)"
211
+ description: |
212
+ **HIGH**: Replicas are frequently falling out of sync.
213
+
214
+ **Impact**: Reduced fault tolerance, potential under-replication.
215
+ **Possible Causes**:
216
+ - Network instability
217
+ - Slow disk I/O
218
+ - Overloaded brokers
219
+ - High producer throughput
220
+
221
+ **Action**:
222
+ 1. Check network latency between brokers
223
+ 2. Check disk I/O: `iostat -x 1`
224
+ 3. Review broker CPU/memory usage
225
+ 4. Consider increasing replica.fetch.max.bytes
226
+ runbook_url: "https://kafka.apache.org/documentation/#replication"
227
+
228
+ # ALERT 8: Leader Election Rate High
229
+ - alert: KafkaLeaderElectionRateHigh
230
+ expr: sum(rate(kafka_controller_leader_election_total[5m])) > 0.5
231
+ for: 5m
232
+ labels:
233
+ severity: high
234
+ component: kafka
235
+ alert_type: cluster_instability
236
+ annotations:
237
+ summary: "High leader election rate ({{ $value }}/sec)"
238
+ description: |
239
+ **HIGH**: Frequent leader elections indicate cluster instability.
240
+
241
+ **Impact**: Increased latency, potential client errors during elections.
242
+ **Possible Causes**:
243
+ - Broker failures/restarts
244
+ - Network issues
245
+ - ZooKeeper issues (if not KRaft)
246
+ - Auto leader rebalancing enabled
247
+
248
+ **Action**:
249
+ 1. Check broker uptime and logs
250
+ 2. Disable auto.leader.rebalance.enable if enabled
251
+ 3. Check network stability
252
+ 4. Review recent broker restarts
253
+ runbook_url: "https://kafka.apache.org/documentation/#controller"
254
+
255
+ # ==================================================
256
+ # Group 3: WARNING Alerts (Action Within Days)
257
+ # ==================================================
258
+ - name: kafka.warning
259
+ interval: 30s
260
+ rules:
261
+ # ALERT 9: Broker High CPU
262
+ - alert: KafkaBrokerHighCPU
263
+ expr: os_process_cpu_load{job="kafka"} > 0.8
264
+ for: 5m
265
+ labels:
266
+ severity: warning
267
+ component: kafka
268
+ alert_type: resource_saturation
269
+ annotations:
270
+ summary: "Broker {{ $labels.instance }} has high CPU usage ({{ $value | humanizePercentage }})"
271
+ description: |
272
+ **WARNING**: Broker CPU usage is high.
273
+
274
+ **Impact**: Slower request processing, potential client timeouts.
275
+ **Possible Causes**:
276
+ - High message throughput
277
+ - Complex consumer queries
278
+ - Insufficient brokers for load
279
+
280
+ **Action**:
281
+ 1. Review broker metrics for throughput spikes
282
+ 2. Consider scaling horizontally (add brokers)
283
+ 3. Optimize producer/consumer configurations
284
+ 4. Review compaction settings (if using log compaction)
285
+ threshold: 80%
286
+
287
+ # ALERT 10: Broker Low Heap Memory
288
+ - alert: KafkaBrokerLowHeapMemory
289
+ expr: jvm_memory_heap_used_bytes{job="kafka"} / jvm_memory_heap_max_bytes{job="kafka"} > 0.85
290
+ for: 5m
291
+ labels:
292
+ severity: warning
293
+ component: kafka
294
+ alert_type: memory_pressure
295
+ annotations:
296
+ summary: "Broker {{ $labels.instance }} has low heap memory ({{ $value | humanizePercentage }})"
297
+ description: |
298
+ **WARNING**: JVM heap usage is high.
299
+
300
+ **Impact**: Risk of OutOfMemoryError, frequent GC pauses.
301
+ **Possible Causes**:
302
+ - Too many partitions per broker
303
+ - High message cache usage
304
+ - Memory leak (rare)
305
+
306
+ **Action**:
307
+ 1. Increase JVM heap: -Xmx (up to 50% of system RAM, leave room for page cache)
308
+ 2. Reduce partitions per broker
309
+ 3. Monitor GC metrics
310
+ 4. Review log.segment.bytes and segment.ms settings
311
+ threshold: 85%
312
+
313
+ # ALERT 11: High GC Time
314
+ - alert: KafkaBrokerHighGCTime
315
+ expr: rate(jvm_gc_collection_time_ms_total{job="kafka"}[5m]) > 500
316
+ for: 5m
317
+ labels:
318
+ severity: warning
319
+ component: kafka
320
+ alert_type: gc_pressure
321
+ annotations:
322
+ summary: "Broker {{ $labels.instance }} spending too much time in GC ({{ $value }}ms/sec)"
323
+ description: |
324
+ **WARNING**: Application spending significant time in garbage collection.
325
+
326
+ **Impact**: Stop-the-world pauses, increased latency.
327
+ **Possible Causes**:
328
+ - High heap usage
329
+ - Wrong GC algorithm
330
+ - Too small heap size
331
+
332
+ **Action**:
333
+ 1. Increase JVM heap size
334
+ 2. Use G1GC (recommended for Kafka): -XX:+UseG1GC
335
+ 3. Tune GC parameters: -XX:MaxGCPauseMillis=20
336
+ 4. Monitor heap usage and adjust
337
+ threshold: 500ms/sec
338
+
339
+ # ALERT 12: Open File Descriptors High
340
+ - alert: KafkaBrokerHighOpenFiles
341
+ expr: os_open_file_descriptors{job="kafka"} / os_max_file_descriptors{job="kafka"} > 0.8
342
+ for: 5m
343
+ labels:
344
+ severity: warning
345
+ component: kafka
346
+ alert_type: resource_exhaustion
347
+ annotations:
348
+ summary: "Broker {{ $labels.instance }} has high file descriptor usage ({{ $value | humanizePercentage }})"
349
+ description: |
350
+ **WARNING**: Running out of file descriptors.
351
+
352
+ **Impact**: Broker may crash when limit reached.
353
+ **Possible Causes**:
354
+ - Too many partitions
355
+ - Too many concurrent connections
356
+ - File descriptor limit too low
357
+
358
+ **Action**:
359
+ 1. Increase system file descriptor limit: `ulimit -n 100000`
360
+ 2. Add to /etc/security/limits.conf: `kafka soft nofile 100000; kafka hard nofile 100000`
361
+ 3. Reduce partitions per broker
362
+ 4. Close idle connections
363
+ threshold: 80%
364
+
365
+ # ALERT 13: Request Handler Idle Percentage Low
366
+ - alert: KafkaRequestHandlerBusy
367
+ expr: kafka_server_request_handler_avg_idle_percent{job="kafka"} < 0.3
368
+ for: 5m
369
+ labels:
370
+ severity: warning
371
+ component: kafka
372
+ alert_type: thread_saturation
373
+ annotations:
374
+ summary: "Broker {{ $labels.instance }} request handlers are busy ({{ $value | humanizePercentage }} idle)"
375
+ description: |
376
+ **WARNING**: Request handlers are saturated.
377
+
378
+ **Impact**: Slow request processing, client timeouts.
379
+ **Possible Causes**:
380
+ - High request rate
381
+ - Slow disk I/O
382
+ - Insufficient num.network.threads or num.io.threads
383
+
384
+ **Action**:
385
+ 1. Increase num.network.threads (default: 3, try 8)
386
+ 2. Increase num.io.threads (default: 8, try 16)
387
+ 3. Check disk I/O performance
388
+ 4. Scale horizontally (add brokers)
389
+ threshold: 30% idle (70% busy)
390
+
391
+ # ALERT 14: Disk Usage High
392
+ - alert: KafkaBrokerHighDiskUsage
393
+ expr: (node_filesystem_size_bytes{mountpoint="/data/kafka"} - node_filesystem_free_bytes{mountpoint="/data/kafka"}) / node_filesystem_size_bytes{mountpoint="/data/kafka"} > 0.85
394
+ for: 5m
395
+ labels:
396
+ severity: warning
397
+ component: kafka
398
+ alert_type: disk_pressure
399
+ annotations:
400
+ summary: "Broker {{ $labels.instance }} has high disk usage ({{ $value | humanizePercentage }})"
401
+ description: |
402
+ **WARNING**: Kafka data disk is filling up.
403
+
404
+ **Impact**: Broker will fail when disk full.
405
+ **Possible Causes**:
406
+ - High message retention
407
+ - Insufficient disk space
408
+ - Log compaction not running
409
+
410
+ **Action**:
411
+ 1. Reduce log.retention.hours (default: 168 hours = 7 days)
412
+ 2. Reduce log.retention.bytes per partition
413
+ 3. Expand disk volume
414
+ 4. Enable log compaction for topics where appropriate
415
+ threshold: 85%
@@ -0,0 +1,256 @@
1
+ # ==================================================
2
+ # Prometheus JMX Exporter Configuration for Kafka
3
+ # ==================================================
4
+ #
5
+ # Usage: Download JMX Prometheus agent JAR and add to Kafka startup:
6
+ # KAFKA_OPTS="-javaagent:/opt/jmx_prometheus_javaagent.jar=7071:/opt/kafka-jmx-exporter.yml"
7
+
8
+ # Lowercase metric names
9
+ lowercaseOutputName: true
10
+ lowercaseOutputLabelNames: true
11
+
12
+ # ==================================================
13
+ # Whitelist patterns (what to export)
14
+ # ==================================================
15
+ whitelistObjectNames:
16
+ # Broker metrics
17
+ - "kafka.server:type=BrokerTopicMetrics,name=*"
18
+ - "kafka.server:type=ReplicaManager,name=*"
19
+ - "kafka.server:type=ReplicaFetcherManager,name=*"
20
+ - "kafka.server:type=KafkaRequestHandlerPool,name=*"
21
+ - "kafka.server:type=DelayedOperationPurgatory,name=*"
22
+ - "kafka.server:type=SessionExpireListener,name=*"
23
+
24
+ # Network metrics
25
+ - "kafka.network:type=RequestMetrics,name=*,request=*"
26
+ - "kafka.network:type=SocketServer,name=*"
27
+ - "kafka.network:type=Processor,name=*,networkProcessor=*"
28
+
29
+ # Controller metrics
30
+ - "kafka.controller:type=KafkaController,name=*"
31
+ - "kafka.controller:type=ControllerStats,name=*"
32
+
33
+ # Log metrics
34
+ - "kafka.log:type=LogFlushStats,name=*"
35
+ - "kafka.log:type=Log,name=*,topic=*,partition=*"
36
+ - "kafka.log:type=LogCleaner,name=*"
37
+ - "kafka.log:type=LogCleanerManager,name=*"
38
+
39
+ # Partition metrics
40
+ - "kafka.cluster:type=Partition,name=*,topic=*,partition=*"
41
+
42
+ # Group coordinator
43
+ - "kafka.coordinator.group:type=GroupMetadataManager,name=*"
44
+
45
+ # JVM metrics
46
+ - "java.lang:type=Memory,*"
47
+ - "java.lang:type=GarbageCollector,name=*"
48
+ - "java.lang:type=Threading,*"
49
+ - "java.lang:type=OperatingSystem,*"
50
+
51
+ # ==================================================
52
+ # Custom metric rules
53
+ # ==================================================
54
+ rules:
55
+ # ========================================
56
+ # Broker Topic Metrics
57
+ # ========================================
58
+
59
+ - pattern: kafka.server<type=BrokerTopicMetrics, name=(.+)><>Count
60
+ name: kafka_server_broker_topic_metrics_$1_total
61
+ type: COUNTER
62
+ help: "Broker topic metrics: $1"
63
+
64
+ - pattern: kafka.server<type=BrokerTopicMetrics, name=(.+)><>OneMinuteRate
65
+ name: kafka_server_broker_topic_metrics_$1_rate
66
+ type: GAUGE
67
+ help: "Broker topic metrics rate: $1"
68
+
69
+ # ========================================
70
+ # Replica Manager
71
+ # ========================================
72
+
73
+ - pattern: kafka.server<type=ReplicaManager, name=(.+)><>Value
74
+ name: kafka_server_replica_manager_$1
75
+ type: GAUGE
76
+ help: "Replica manager: $1"
77
+
78
+ - pattern: kafka.server<type=ReplicaManager, name=(.+)><>Count
79
+ name: kafka_server_replica_manager_$1_total
80
+ type: COUNTER
81
+ help: "Replica manager counter: $1"
82
+
83
+ # ========================================
84
+ # Under-replicated partitions (CRITICAL)
85
+ # ========================================
86
+
87
+ - pattern: kafka.server<type=ReplicaManager, name=UnderReplicatedPartitions><>Value
88
+ name: kafka_server_replica_manager_under_replicated_partitions
89
+ type: GAUGE
90
+ help: "Number of under-replicated partitions (CRITICAL METRIC)"
91
+
92
+ # ========================================
93
+ # Offline partitions (CRITICAL)
94
+ # ========================================
95
+
96
+ - pattern: kafka.controller<type=KafkaController, name=OfflinePartitionsCount><>Value
97
+ name: kafka_controller_offline_partitions_count
98
+ type: GAUGE
99
+ help: "Number of offline partitions (CRITICAL METRIC)"
100
+
101
+ # ========================================
102
+ # Active controller count (should be 1)
103
+ # ========================================
104
+
105
+ - pattern: kafka.controller<type=KafkaController, name=ActiveControllerCount><>Value
106
+ name: kafka_controller_active_controller_count
107
+ type: GAUGE
108
+ help: "Active controller count (should be exactly 1)"
109
+
110
+ # ========================================
111
+ # Request metrics
112
+ # ========================================
113
+
114
+ - pattern: kafka.network<type=RequestMetrics, name=(.+), request=(.+)><>Count
115
+ name: kafka_network_request_metrics_$1_total
116
+ labels:
117
+ request: $2
118
+ type: COUNTER
119
+ help: "Request metrics: $1 for request type $2"
120
+
121
+ - pattern: kafka.network<type=RequestMetrics, name=(.+), request=(.+)><>OneMinuteRate
122
+ name: kafka_network_request_metrics_$1_rate
123
+ labels:
124
+ request: $2
125
+ type: GAUGE
126
+ help: "Request metrics rate: $1 for request type $2"
127
+
128
+ # ========================================
129
+ # Request handler pool
130
+ # ========================================
131
+
132
+ - pattern: kafka.server<type=KafkaRequestHandlerPool, name=RequestHandlerAvgIdlePercent><>OneMinuteRate
133
+ name: kafka_server_request_handler_avg_idle_percent
134
+ type: GAUGE
135
+ help: "Request handler average idle percentage (low = CPU saturation)"
136
+
137
+ # ========================================
138
+ # Log flush metrics
139
+ # ========================================
140
+
141
+ - pattern: kafka.log<type=LogFlushStats, name=LogFlushRateAndTimeMs><>Count
142
+ name: kafka_log_flush_total
143
+ type: COUNTER
144
+ help: "Number of log flushes"
145
+
146
+ - pattern: kafka.log<type=LogFlushStats, name=LogFlushRateAndTimeMs><>50thPercentile
147
+ name: kafka_log_flush_time_ms_p50
148
+ type: GAUGE
149
+ help: "Log flush time p50 (ms)"
150
+
151
+ - pattern: kafka.log<type=LogFlushStats, name=LogFlushRateAndTimeMs><>99thPercentile
152
+ name: kafka_log_flush_time_ms_p99
153
+ type: GAUGE
154
+ help: "Log flush time p99 (ms)"
155
+
156
+ # ========================================
157
+ # Leader election rate
158
+ # ========================================
159
+
160
+ - pattern: kafka.controller<type=ControllerStats, name=LeaderElectionRateAndTimeMs><>Count
161
+ name: kafka_controller_leader_election_total
162
+ type: COUNTER
163
+ help: "Number of leader elections (high = instability)"
164
+
165
+ # ========================================
166
+ # Unclean leader elections (BAD!)
167
+ # ========================================
168
+
169
+ - pattern: kafka.controller<type=ControllerStats, name=UncleanLeaderElectionsPerSec><>Count
170
+ name: kafka_controller_unclean_leader_elections_total
171
+ type: COUNTER
172
+ help: "Number of unclean leader elections (SHOULD BE ZERO!)"
173
+
174
+ # ========================================
175
+ # ISR shrinks/expands
176
+ # ========================================
177
+
178
+ - pattern: kafka.server<type=ReplicaManager, name=IsrShrinksPerSec><>Count
179
+ name: kafka_server_replica_manager_isr_shrinks_total
180
+ type: COUNTER
181
+ help: "Number of ISR shrinks (replica falling out of sync)"
182
+
183
+ - pattern: kafka.server<type=ReplicaManager, name=IsrExpandsPerSec><>Count
184
+ name: kafka_server_replica_manager_isr_expands_total
185
+ type: COUNTER
186
+ help: "Number of ISR expands (replica catching up)"
187
+
188
+ # ========================================
189
+ # JVM Memory
190
+ # ========================================
191
+
192
+ - pattern: java.lang<type=Memory><HeapMemoryUsage>used
193
+ name: jvm_memory_heap_used_bytes
194
+ type: GAUGE
195
+ help: "JVM heap memory used"
196
+
197
+ - pattern: java.lang<type=Memory><HeapMemoryUsage>max
198
+ name: jvm_memory_heap_max_bytes
199
+ type: GAUGE
200
+ help: "JVM heap memory max"
201
+
202
+ # ========================================
203
+ # JVM GC
204
+ # ========================================
205
+
206
+ - pattern: java.lang<type=GarbageCollector, name=(.+)><>CollectionCount
207
+ name: jvm_gc_collection_count_total
208
+ labels:
209
+ gc: $1
210
+ type: COUNTER
211
+ help: "JVM garbage collection count"
212
+
213
+ - pattern: java.lang<type=GarbageCollector, name=(.+)><>CollectionTime
214
+ name: jvm_gc_collection_time_ms_total
215
+ labels:
216
+ gc: $1
217
+ type: COUNTER
218
+ help: "JVM garbage collection time (ms)"
219
+
220
+ # ========================================
221
+ # JVM Threads
222
+ # ========================================
223
+
224
+ - pattern: java.lang<type=Threading><>ThreadCount
225
+ name: jvm_threads_count
226
+ type: GAUGE
227
+ help: "JVM thread count"
228
+
229
+ - pattern: java.lang<type=Threading><>DaemonThreadCount
230
+ name: jvm_threads_daemon_count
231
+ type: GAUGE
232
+ help: "JVM daemon thread count"
233
+
234
+ # ========================================
235
+ # OS metrics
236
+ # ========================================
237
+
238
+ - pattern: java.lang<type=OperatingSystem><>OpenFileDescriptorCount
239
+ name: os_open_file_descriptors
240
+ type: GAUGE
241
+ help: "Open file descriptors"
242
+
243
+ - pattern: java.lang<type=OperatingSystem><>MaxFileDescriptorCount
244
+ name: os_max_file_descriptors
245
+ type: GAUGE
246
+ help: "Max file descriptors"
247
+
248
+ - pattern: java.lang<type=OperatingSystem><>ProcessCpuLoad
249
+ name: os_process_cpu_load
250
+ type: GAUGE
251
+ help: "Process CPU load"
252
+
253
+ - pattern: java.lang<type=OperatingSystem><>SystemCpuLoad
254
+ name: os_system_cpu_load
255
+ type: GAUGE
256
+ help: "System CPU load"