Kibana 自定义插件开发详解(Kibana Plugin Development Guide)

Kibana 自定义插件开发详解(Kibana Plugin Development Guide)

Kibana 支持通过 插件机制(Plugin System) 扩展其功能,允许开发者添加新的页面、可视化组件、API 接口、侧边栏菜单等。这对于企业定制化需求(如内部系统集成、专用分析工具、权限增强等)非常有价值。

本文将从 插件结构、开发环境、实战示例、构建发布、调试技巧 等方面,全面详解 Kibana 插件开发流程。


一、Kibana 插件概述

1.1 什么是 Kibana 插件?

Kibana 插件是一个可安装的模块,可以:

  • 添加新页面(如 /app/my-plugin
  • 注册新功能(如自定义可视化)
  • 扩展 UI(添加按钮、菜单项)
  • 提供后端 API(REST 接口)
  • 集成第三方服务(如钉钉、企业微信)

✅ 插件运行在 Kibana 进程中,与核心系统深度集成。


1.2 插件类型(Kibana 8.x)

类型说明
UI Plugin前端插件,提供页面和 UI 组件(最常见)
Server Plugin后端插件,提供 API 或监听事件
Both同时包含前端和后端逻辑(推荐方式)

自 Kibana 7.0 起,采用 新插件架构(Plugin Platform),基于 TypeScript 和 React。


二、开发准备

2.1 环境要求

工具版本要求
Node.jsv18.x(与 Kibana 版本匹配)
npm / yarn最新版
Kibana 源码建议下载对应版本源码用于开发
Elasticsearch运行中的实例(用于数据交互)

⚠️ Kibana 插件必须与 Kibana 主版本严格匹配(如 8.11.3 插件不能用于 8.12.0)


2.2 获取 Kibana 源码(可选)

# 克隆 Kibana 仓库(以 8.11 分支为例)
git clone https://github.com/elastic/kibana.git
cd kibana
git checkout v8.11.3

# 安装依赖
yarn kbn bootstrap

若仅开发简单插件,也可不下载源码。


三、创建自定义插件

3.1 插件目录结构

my_kibana_plugin/
├── kibana.json          # 插件元信息(必填)
├── server/              # 后端逻辑(可选)
│   └── index.ts
├── public/              # 前端逻辑(可选)
│   └── index.ts
├── common/              # 共享代码(可选)
│   └── types.ts
└── package.json         # npm 包信息(可选)

3.2 kibana.json(核心配置文件)

{
  "id": "my_plugin",
  "version": "1.0.0",
  "kibanaVersion": "8.11.3",
  "name": "My Custom Plugin",
  "description": "A demo plugin for Kibana",
  "main": "server/index.ts",
  "type": "plugin",
  "server": true,
  "ui": true,
  "requiredPlugins": ["kibana", "elasticsearch"],
  "optionalPlugins": [],
  "owner": {
    "name": "Your Name",
    "email": "you@example.com"
  }
}
字段说明
id插件唯一标识(URL 路径为 /app/id
kibanaVersion必须与 Kibana 主版本一致
server / ui是否启用后端/前端
requiredPlugins依赖的插件

四、实战:开发一个“Hello World”插件

4.1 创建插件目录

cd /path/to/kibana/plugins
mkdir my_plugin
cd my_plugin

创建上述文件结构。


4.2 编写前端(public/index.ts

// public/index.ts
import { AppMountParameters, CoreStart } from '@kbn/core/public';
import React from 'react';
import ReactDOM from 'react-dom/client';

export interface MyPluginSetupPlugins {
  // 依赖插件类型定义
}

export const renderApp = (
  { appBasePath, element }: AppMountParameters,
  core: CoreStart
) => {
  const root = ReactDOM.createRoot(element);

  root.render(
    <div style={{ padding: 20 }}>
      <h1>📘 欢迎使用 My Plugin</h1>
      <p>这是我的第一个 Kibana 插件!</p>
      <p>当前用户: <strong>{core.security?.authc?.getCurrentUser()?.username}</strong></p>
      <button onClick={() => core.notifications.toasts.addSuccess('Hello!')}>
        点我显示通知
      </button>
    </div>
  );

  return () => root.unmount();
};

4.3 编写后端(server/index.ts

// server/index.ts
import { Plugin } from '@kbn/core/server';

export class MyPlugin implements Plugin {
  public setup(core) {
    // 注册插件页面
    core.application.register({
      id: 'my_plugin',
      title: '我的插件',
      order: 5000,
      mount: async (params) => {
        const { renderApp } = await import('./public');
        return renderApp(params, core);
      },
    });

    // 注册自定义 API
    core.http.createRouter('/my_plugin').get(
      { path: '/api/hello', validate: false },
      async (context, request, response) => {
        return response.ok({
          body: {
            message: 'Hello from My Plugin!',
            timestamp: new Date().toISOString(),
          },
        });
      }
    );

    return {};
  }

  public start() {}
  public stop() {}
}

4.4 添加 package.json(可选)

{
  "name": "my_plugin",
  "version": "1.0.0",
  "private": true
}

五、安装与启动

5.1 将插件放入 Kibana 插件目录

cp -r my_plugin /usr/share/kibana/plugins/

或开发时软链接:

ln -s /path/to/my_plugin /usr/share/kibana/plugins/my_plugin

5.2 启动 Kibana

# 方式1:直接启动
/usr/share/kibana/bin/kibana

# 方式2:开发模式(推荐)
yarn start --plugin-path /path/to/my_plugin

开发模式支持热重载,修改代码自动刷新。


5.3 访问插件

打开浏览器:

http://localhost:5601/app/my_plugin

你应该看到 “欢迎使用 My Plugin” 页面。


六、调用自定义 API

在插件中调用后端接口:

// public/index.ts 中添加
const resp = await core.http.get('/my_plugin/api/hello');
console.log(resp.message); // "Hello from My Plugin!"

七、插件功能扩展示例

7.1 添加侧边栏图标

setup 中注册应用时添加:

core.application.register({
  id: 'my_plugin',
  title: '我的插件',
  icon: 'logoKibana', // 可选图标
  navLinkStatus: 1,   // 显示在侧边栏
  // ...
});

图标列表:Kibana Icon Catalog


7.2 集成 Elasticsearch 查询

// 调用 ES API
const esClient = core.elasticsearch.client.asCurrentUser;
const result = await esClient.search({
  index: 'my-index-*',
  body: { query: { match_all: {} } }
});

7.3 添加权限控制

// 检查用户是否有权限
if (!core.application.capabilities.my_plugin?.show) {
  return response.forbidden();
}

需在 kibana.json 中定义功能权限(高级用法)。


八、构建与发布

8.1 打包插件(生产部署)

cd /path/to/my_plugin

# 使用 Kibana 提供的工具打包
/path/to/kibana/node_modules/.bin/kibana-plugin-helpers build

# 输出:my_plugin-1.0.0.zip

8.2 安装插件包

bin/kibana-plugin install file:///path/to/my_plugin-1.0.0.zip

会自动解压到 plugins/ 目录。


九、调试技巧

技巧方法
查看日志tail -f /var/log/kibana/kibana.log
浏览器调试F12 → Console / Network
启用开发模式yarn start --oss --no-base-path
使用 console.logserver/public/ 中均可
检查插件加载Kibana 启动日志中搜索 Plugin "my_plugin" initialized

十、最佳实践

  1. 命名规范:插件 ID 使用小写字母+下划线(my_org_monitoring
  2. 版本匹配:确保 kibanaVersion 与 Kibana 一致
  3. 错误处理:API 返回标准 HTTP 状态码
  4. 安全性
    • 验证输入参数
    • 使用 asCurrentUser 调用 ES
    • 避免暴露敏感信息
  5. 文档化:提供 README 说明安装和使用方法

十一、常见问题

❓ 插件未加载?

  • 检查 kibana.json 格式是否正确
  • 检查版本是否匹配
  • 查看 Kibana 日志是否有报错

❓ 页面空白?

  • 检查 mount 函数是否返回卸载函数
  • 检查 React 渲染是否成功

❓ API 404?

  • 检查路由前缀是否正确(/my_plugin/api/xxx
  • 确保 core.http.createRouter 正确注册

十二、参考资源


十三、结语

Kibana 插件开发虽然有一定门槛(需熟悉 TypeScript、React、Elastic 架构),但一旦掌握,即可实现:

  • 企业级定制仪表盘
  • 内部审批流程集成
  • 第三方告警通知(钉钉、飞书)
  • 数据导出审批系统
  • 多租户权限增强

Kibana 高级用户和开发者的必备技能。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值