1. 什么是Grafana
谷歌一下就知道了 Grafana主页:Grafana
Github地址:Grafana-Github
2. 如何使用Grafana插件
Grafana插件有四种:
Datasources
Apps
Panels
Dashboards
以Windows系统为例,首先在Grafana首页中下载自己想要的Grafana插件, 解压缩到[$本机grafana安装地址]\data\plugins,重启grafana server, 重新登录自己的grafana主页就可以看到了
3. 开发自己的Grafana插件
Step1
在plugin目录下新建文件夹,命名为XXX; 在这个目录下新建文件plugin.json,用记事本打开,输入以下内容并保存:
{ "type": "panel", "name": "CHL_Text", "id": "chl-text-panel", "info": { "description": "Text panel made by chl", "author": { "name": "chl", "url": "https://grafana.com" }, "keywords": ["text", "panel"], "logos": { "small": "src/img/icn-text-panel.svg", "large": "src/img/icn-text-panel.svg" }, "version": "0.0.9", "updated": "2017-03-18" }, "dependencies": { "grafanaVersion": "3.x.x", "plugins": [ ] }}
以上内容是plugin.json的模板,
第一个参数type可以有四个选项,分别对应Grafana的始终插件类型;
第二个参数指定这个插件的名称;
第三个参数为插件指定的唯一的ID,它不能与其他插件的ID相同,约定是 [github username/org]-[plugin name]-[plugin type];
其它都是一些版本信息之类的,可以不必关注。
有了这个plugin.json文件,重启grafana服务器后就能在主页上看到自己的插件了。
Step2
要想DashBoard中使用插件,光有plugin.json是不够的,还需要module.js文件,这是用来创建Panel实例的。代码如下:
/*! grafana - v4.3.2 - 2017-05-31 * Copyright (c) 2017 Torkel Ödegaard; Licensed Apache-2.0 */System.register(["lodash","app/plugins/sdk"],function(a,b){ "use strict"; var c,d,e,f=this&&this.__extends||function() { var a=Object.setPrototypeOf|| { proto:[] } instanceof Array&&function(a,b){ a.proto=b } ||function(a,b){ for(var c in b) b.hasOwnProperty(c)&&(a[c]=b[c]) }; return function(b,c){ function d(){ this.constructor=b } a(b,c), b.prototype=null===c?Object.create(c):(d.prototype=c.prototype,new d) } }(); b&&b.id;return{ setters:[function(a){ c=a },function(a){ d=a } ], execute:function(){ e=function(a){ function b(b,d,e,f){ var g=a.call(this,b,d)||this; return g.templateSrv=e,g.$sce=f,g.panelDefaults={ mode:"markdown",content:"# title" }, c.default.defaults(g.panel,g.panelDefaults), g.events.on("init-edit-mode",g.onInitEditMode.bind(g)), g.events.on("refresh",g.onRefresh.bind(g)), g.events.on("render",g.onRender.bind(g)),g } return f(b,a),b.$inject=["$scope","$injector","templateSrv","$sce"], b.prototype.onInitEditMode=function(){ this.addEditorTab("Options","public/app/plugins/panel/text/editor.html"),this.editorTabIndex=1,"text"===this.panel.mode&&(this.panel.mode="markdown") }, b.prototype.onRefresh=function(){ this.render() }, b.prototype.onRender=function(){ "markdown"===this.panel.mode?this.renderMarkdown(this.panel.content):"html"===this.panel.mode&&this.updateContent(this.panel.content),this.renderingCompleted() }, b.prototype.renderText=function(a){ a=a.replace(/&/g,"&").replace(/>/g,">").replace(/</g,"<").replace(/\n/g,"
"), this.updateContent(a) }, b.prototype.renderMarkdown=function(a){ var b=this;return this.remarkable?void this.updateContent(this.remarkable.render(a)):System.import("remarkable").then(function(c){ b.remarkable=new c,b.$scope.$apply(function(){ b.updateContent(b.remarkable.render(a)) }) }) }, b.prototype.updateContent=function(a){ try{ this.content=this.$sce.trustAsHtml(this.templateSrv.replace(a,this.panel.scopedVars)) }catch(b){ console.log("Text panel error: ",b),this.content=this.$sce.trustAsHtml(a) } }, b }(d.PanelCtrl),e.templateUrl="public/app/plugins/panel/text/module.html",a("TextPanelCtrl",e),a("PanelCtrl",e) } }});
重启grafana,在Dashboard中新建一个Panel,可以找到我们的CHL_Text,效果如下:
以上就是做一个最简单的插件,不过module.js我是复用的别人的代码,想要做自己的插件,还要去学习JS,Angular,任重而道远。