日志分析运维观测【免费下载链接】graylog2-serverFree and open log management项目地址https://gitcode.com/gh_mirrors/gr/graylog2-server点击查看免费下载本指南围绕 graylog2-server 仓库中的插件开发脚手架 graylog-plugin-archetype 展开系统讲解如何用它一键生成 Graylog 插件工程、理解脚手架生成的源码骨架以及完成构建、打包、安装与发布的完整流程。读完本文你将掌握mvn archetype:generate的完整用法、插件 JAR 的安装方式、web 界面热重载开发技巧以及基于 Maven release plugin 的版本发布流程。一、插件骨架的定位与组成Graylog 是开源的集中式日志管理系统其可扩展性通过插件机制实现。graylog-plugin-archetype是官方提供的 Maven 原型archetype用于快速生成符合 Graylog 插件规范的标准工程结构。它的打包类型是maven-archetype版本跟随 graylog2-server 主仓库演进本仓库当前为7.2.0-SNAPSHOT见 graylog-plugin-archetype/pom.xml。整个脚手架的模板资源位于graylog-plugin-archetype/src/main/resources/archetype-resources/由 archetype-metadata.xml 描述其文件组成Java 源码模板src/main/java/__pluginClassName__.java等四个核心类文件占位符__pluginClassName__会在生成时被替换为用户输入的主类名插件注册资源src/main/resources/META-INF/services/org.graylog2.plugin.Plugin与graylog-plugin.properties属性文件web 前端骨架src/web/index.jsx、webpack.config.js、build.config.js、package.json打包辅助文件src/deb/control/controlDEB 打包控制文件、.gitignore、.mvn/jvm.config说明文档README.md与GETTING-STARTED.md。该元数据同时定义了五个必填属性requiredProperties是生成插件时必须提供的参数属性默认值含义pluginClassName无插件主类类名如Twitter将替换模板中的__pluginClassName__占位符version1.0.0-SNAPSHOT插件版本号githubRepo无托管插件代码的 GitHub 仓库用于填充 SCM 与下载链接ownerName/ownerEmail无插件作者信息写入 pom 的 developers 与前端 package.jsonserverCheckoutPath../graylog2-server本地 graylog2-server 仓库的相对路径用于构建 web 部分二、用 Archetype 生成新插件工程2.1 基础生成命令最简单的生成方式是从远程 Maven 仓库拉取 archetypemvn archetype:generate -DarchetypeGroupIdorg.graylog -DarchetypeArtifactIdgraylog-plugin-archetype运行后会进入交互模式依次提示输入groupId、artifactId、package、pluginClassName等属性。完整的交互过程示例如下$ mvn archetype:generate -DarchetypeGroupIdorg.graylog -DarchetypeArtifactIdgraylog-plugin-archetype [...] [INFO] Generating project in Interactive mode [INFO] Archetype [org.graylog:graylog-plugin-archetype:1.0.1] found in catalog remote Define value for property groupId: : org.graylog.plugins Define value for property artifactId: : graylog-plugin-twitter [INFO] Using property: version 1.0.0-SNAPSHOT Define value for property package: org.graylog.plugins: : org.graylog.plugins.twitter Define value for property pluginClassName: : : Twitter Confirm properties configuration: groupId: org.graylog.plugins artifactId: graylog-plugin-twitter version: 1.0.0-SNAPSHOT package: org.graylog.plugins.twitter pluginClassName: Twitter Y: : y [INFO] Using following parameters for creating project from Archetype: graylog-plugin-archetype:1.0.1 [...] [INFO] Parameter: packageInPathFormat, Value: org/graylog/plugins/twitter [...] [INFO] project created from Archetype in dir: /home/bernd/foo/graylog-plugin-twitter [INFO] BUILD SUCCESS注意两点version不一定会被交互询问默认取1.0.0-SNAPSHOTpluginClassName只需要填类名的简单名称如Twitter骨架会自动把它拼接成TwitterPlugin、TwitterMetaData、TwitterModule等完整的类。2.2 使用本地安装的 Archetype如果你想修改骨架本身再生成插件可以克隆本仓库并先把 archetype 安装到本地 Maven 仓库mvn install之后生成时加上-DarchetypeCataloglocal强制从本地 catalog 取用避免 Maven 去远程仓库如 Maven Central拉取同名但版本不同的 archetypemvn archetype:generate -DarchetypeGroupIdorg.graylog -DarchetypeArtifactIdgraylog-plugin-archetype -DarchetypeCataloglocal2.3 生成的插件工程结构以示例groupIdorg.graylog.plugins、artifactIdgraylog-plugin-twitter、packageorg.graylog.plugins.twitter、pluginClassNameTwitter为例生成后的目录大致为graylog-plugin-twitter/ ├── pom.xml # 以 graylog-plugin-web-parent 为父工程的 Maven 配置 ├── README.md # 插件介绍与安装说明模板自带 ├── GETTING-STARTED.md # 引导文档 ├── package.json # web 部分 npm 脚本与依赖 ├── webpack.config.js ├── build.config.js └── src/ ├── main/java/org/graylog/plugins/twitter/ │ ├── TwitterPlugin.java │ ├── TwitterMetaData.java │ ├── TwitterModule.java │ └── Twitter.java ├── main/resources/ │ ├── META-INF/services/org.graylog2.plugin.Plugin │ └── org.graylog.plugins.twitter/graylog-plugin.properties ├── deb/control/control └── web/index.jsx模板中的所有__pluginClassName__占位符都会被替换成Twitter${groupId}、${artifactId}等变量则由 Maven 替换为实际值参见 archetype-metadata.xml 中对各 fileSet 的filteredtrue设置。三、生成的源码骨架与插件加载原理3.1 四个核心 Java 类脚手架生成的 Java 部分遵循 Graylog 的PluginSPIService Provider Interface设计四个类各司其职① 插件入口TwitterPlugin.java—— 实现org.graylog2.plugin.Plugin接口将元数据与模块装配给 Graylogpublic class TwitterPlugin implements Plugin { Override public PluginMetaData metadata() { return new TwitterMetaData(); } Override public CollectionPluginModule modules() { return Collections.PluginModulesingletonList(new TwitterModule()); } }该接口定义于 graylog2-server/src/main/java/org/graylog2/plugin/Plugin.java是 Graylog 服务器加载插件时统一识别并调用的唯一入口。② 元数据TwitterMetaData.java—— 提供插件的名称、描述、作者、版本、所需 Graylog 最低版本等展示性信息供服务器在启动日志与系统信息中显示。③ 模块TwitterModule.java—— 继承 Guice 的AbstractModule用于绑定插件自定义的输入、输出、报警条件等组件是插件功能的实际装配点。④ 主类Twitter.java—— 插件自身业务逻辑的容器模板仅保留类骨架实际功能如新的 input/output 类型需要开发者在此填充。3.2 插件的注册与服务发现Graylog 通过 Java 的 SPI 机制发现插件生成工程中会自动创建src/main/resources/META-INF/services/org.graylog2.plugin.Plugin文件其内容指向生成的插件入口类。服务器启动时扫描该文件并实例化插件。同时maven-shade-plugin 使用ServicesResourceTransformer将服务描述符合并进最终 JAR确保插件打包后注册信息完整。3.3 graylog-plugin.properties 与类加载隔离骨架还会生成graylog-plugin.properties属性文件控制插件运行时行为# The plugin version version${project.version} # The required Graylog server version graylog.version${graylog.version} # When set to true (the default) the plugin gets a separate class loader # when loading the plugin. When set to false, the plugin shares a class loader # with other plugins that have isolatedfalse. # # Do not disable this unless this plugin depends on another plugin! isolatedtrue其中isolatedtrue默认表示该插件使用独立的类加载器加载避免与其他插件发生类冲突graylog.version声明所需的最低服务器版本与 README 中Required Graylog version的说明相呼应。四、构建、打包与安装插件4.1 构建 JAR生成后的插件工程基于 Maven 3 构建需要Java 8 或更高版本。执行mvn package构建流程说明对应 生成的 pom.xml父工程为graylog-plugin-web-parent插件默认不部署到 Maven 仓库maven.deploy.skiptrue依赖org.graylog2:graylog2-server及其 test-jarscopeprovided即编译期可用、运行时由服务器提供web-interface-buildprofile 默认激活除非传入-Dskip.web.build会通过frontend-maven-plugin自动安装指定版本的 Node 与 Yarn执行yarn install和yarn run build将前端src/web/index.jsx构建成静态资源打进 JARmaven-shade-plugin在 package 阶段将依赖与插件资源合并产出可直接放入服务器插件目录的最终 JAR。生成的 JAR 位于target/目录文件名形如graylog-plugin-twitter-1.0.0-SNAPSHOT.jar。4.2 构建 DEB / RPM 系统包可选骨架预配置了 jdeb 与 rpm-maven-plugin可一键产出系统安装包mvn jdeb:jdeb # 生成 .deb 包 mvn rpm:rpm # 生成 .rpm 包生成的.deb包会把插件 JAR 安装到/usr/share/graylog-server/plugin目录对应 pom 中graylog.plugin-dir属性见 生成的 pom.xml并设置 644 文件权限、root 属主。4.3 安装到 Graylog 服务器安装步骤即生成模板 README 的核心流程下载/构建插件得到.jar文件将.jar放入 Graylog 插件目录。默认插件目录是相对graylog-server目录下的plugins/文件夹也可以在graylog.conf中配置重启graylog-server即可生效。插件目录配置项的源码依据服务器端通过 PluginPathConfiguration.java 解析plugin_dir配置参数Parameter(value plugin_dir, required true)其默认值为相对路径plugin即相对服务器启动目录的plugin/目录对应源码中DEFAULT_PLUGIN_DIR Paths.get(plugin)。该配置被 PluginLoaderConfig 继承最终由CmdLineTool通过new PluginLoader(pluginLoaderConfig.getPluginDir().toFile(), classLoader)见 CmdLineTool.java加载目录下的所有插件 JAR。因此安装时只需保证plugin_dir指向的目录内存在插件 JAR重启后即可被自动加载。五、Web 界面部分的热重载开发如果插件包含 web 前端组件如自定义输入/输出的前端页面直接mvn package反复构建会拖慢迭代速度。骨架 README 提供了利用 webpack dev server 热重载的开发方案前提是本地已有 graylog2-server 源码树git clone https://github.com/Graylog2/graylog2-server.git cd graylog2-server/graylog2-web-interface ln -s $YOURPLUGIN plugin/ npm install npm start具体说明ln -s $YOURPLUGIN plugin/把插件工程软链接到 web 前端目录下的plugin/位置webpack 配置会将其识别为本地插件源码生成工程根目录的 webpack.config.js 与 build.config.js 中的web_src_path即指向graylog2-web-interface两者配合即可将插件src/web/index.jsx纳入 dev server 的编译范围npm install npm start启动 web 开发服务器前端改动即时生效无需重启 Graylog 服务器可显著提升 UI 部分开发体验。六、插件发布与版本管理骨架工程内置了 Maven release plugin 配置官方推荐的发布流程为mvn release:prepare [...] mvn release:performrelease:prepare会依次完成检查无未提交代码、设置发布版本号、执行clean test验证、在 SCM生成 pom 中配置的 GitHub 仓库地址创建版本 tag 并推进开发版本号release:perform则从该 tag 检出代码执行发布构建goalspackage产出可发布的 JAR 与系统包。相关配置位于 生成的 pom.xmlautoVersionSubmodulestrue、mavenExecutorIdforked-path、tagNameFormat{project.version}。发布前记得在生成时正确填写githubRepo属性它会写入 pom 的 SCM 配置scm:git:gitgithub.com:${githubRepo}.git以及 README 中的下载链接占位符。七、使用插件模板 README 维护插件文档生成工程的README.md同样由模板生成即 archetype-resources/README.md包含几个需要插件作者替换/完善的占位段落# ${pluginClassName} Plugin for Graylog—— 标题中的${pluginClassName}已被替换为实际类名__Use this paragraph to enter a description of your plugin.__—— 替换为插件功能描述Required Graylog version—— 标记所需的最低服务器版本模板默认2.0 and later若用isolatedtrue等较新机制应如实调整Installation章节 —— 说明下载 JAR 并放入插件目录、重启graylog-server的安装流程Usage章节 —— 记录插件使用方法Development章节 —— 保留热重载开发指引Getting started章节 —— 保留 Maven 3 / Java 8 的构建要求与mvn package、mvn jdeb:jdeb、mvn rpm:rpm等命令Plugin Release章节 —— 保留mvn release:prepare/mvn release:perform发布流程。这些段落可直接作为插件项目 README 的基础只需按实际情况替换占位内容即可形成完整的插件文档。八、常见问题与排查建议生成本地 archetype 时拉到远程版本本地修改骨架后必须用-DarchetypeCataloglocal否则 Maven 会优先匹配远程 catalog插件未在服务器加载检查 JAR 是否位于plugin_dir指向的目录默认相对服务器的plugin/并确认META-INF/services/org.graylog2.plugin.Plugin文件内容与插件入口类完全一致含全限定类名查看服务器启动日志中关于插件加载的输出web 构建失败或网络问题web-interface-build profile 会下载固定版本的 Node/Yarn网络受限时可使用mvn package -Dskip.web.build跳过前端构建仅编译 Java 部分版本兼容性graylog-plugin.properties中的graylog.version应与你部署的服务器版本匹配生成的 pom 父工程版本与服务器源码版本需保持一致构建前可通过serverCheckoutPath指向本地服务器源码树来对齐依赖版本。结语Graylog 插件 Maven Archetype 将建工程—写逻辑—打 JAR—装插件—发版本的全流程固化成了标准化的脚手架。配合本仓库中 archetype-metadata.xml、模板 pom.xml 以及服务器端的 PluginPathConfiguration.java 等实现文件开发者可以清楚理解插件从生成到被 Graylog 加载的每一个环节从而专注于插件本身的功能开发。赞分享日志分析运维观测【免费下载链接】graylog2-serverFree and open log management项目地址https://gitcode.com/gh_mirrors/gr/graylog2-server点击查看免费下载相关推荐国家中小学智慧教育平台电子课本下载工具3 步完成课本 PDF 本地保存国家中小学智慧教育平台电子课本下载工具3 步完成课本 PDF 本地保存 国家中小学智慧教育平台上的电子课本只能在线预览平台本身不提供下载入口。tchMate网页爬虫教育Joplin 插件开发完全指南从 Yeoman 脚手架到插件仓库发布Joplin 插件开发完全指南从 Yeoman 脚手架到插件仓库发布 Joplin 是面向隐私的笔记应用其插件体系允许开发者通过一套基于 TypeScrip知识管理跨平台插件系统基于 snapdom-plugin-template 开发 SnapDOM v3 插件从脚手架到发布完整指南基于 snapdom plugin template 开发 SnapDOM v3 插件从脚手架到发布完整指南 本指南以仓库中的 插件模板说明 https://前端创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考