将 Hubot 与 Grafana 集成
介绍
Grafana 2.0 发布了一个很棒的功能,它可以将任何图表或面板渲染成 PNG 图像。
无论您使用什么数据源,图表的 PNG 图像看起来都会与您在浏览器中看到的相同。
本指南向您展示如何安装和配置 Hubot-Grafana 插件。该插件允许您在 Slack、Basecamp 或任何其他支持的 Hubot 适配器中的频道中告诉 Hubot 渲染任何仪表盘或图表。机器人将以图表的图像和链接作为回复,您可以点击该链接跳转到图表。

什么是 Hubot?
Hubot 是一个通用且可扩展的聊天机器人,可以与许多聊天服务一起使用,并且拥有庞大的第三方插件库,允许您通过聊天室自动化任何任务。
安装 Hubot
Hubot 非常易于安装和托管。如果您还没有启动并运行机器人,请阅读官方的 Hubot 入门 指南。
安装 Hubot-Grafana 脚本
在您的 Hubot 项目仓库中,使用 npm
安装 Grafana 插件
npm install hubot-grafana --save
编辑文件 external-scripts.json,并将 hubot-grafana 添加到插件列表中。
["hubot-pugme", "hubot-shipit", "hubot-grafana"]
配置
Hubot-Grafana 插件需要设置两个环境变量才能正常工作。
export HUBOT_GRAFANA_HOST=https://play.grafana.org
export HUBOT_GRAFANA_API_KEY=abcd01234deadbeef01234
还有 其他环境变量 可以设置,以控制图表的外观。
Grafana 服务端渲染
Hubot 插件将利用 Grafana 服务端渲染功能,该功能可以使用 phantomjs 在服务器上渲染任何面板。Grafana 附带了 phantomjs 二进制文件(仅限 Linux)。
要验证此功能是否正常工作,请尝试面板共享对话框中的 Direct link to rendered image
链接。如果在打开此链接时未获得图像,请验证是否已安装 phantomjs 工作所需的字体包。
Grafana API 密钥

您需要将环境变量 HUBOT_GRAFANA_API_KEY
设置为 Grafana API 密钥。您可以从 API 密钥页面(在 Organization 下拉菜单中找到)添加这些密钥。
图像上传
有几种方法可以上传渲染后的图表。如果您使用 Slack、Rocket.Chat 或 Telegram,适配器原生的上传器将负责通过其各自的 API 发送。如果您的 Hubot 托管在不支持上传的平台(例如 IRC),您可以使用内置的 S3 上传器。请注意,如果您配置了 S3,则不会使用适配器的上传功能。
Hubot 命令
hubot graf list
- 列出可用的仪表盘
hubot graf db graphite-carbon-metrics
- 绘制仪表盘中的所有面板
hubot graf db graphite-carbon-metrics:3
- 仅绘制特定仪表盘中 ID 为 3 的面板
hubot graf db graphite-carbon-metrics:cpu
- 仅绘制标题中包含“cpu”(不区分大小写)的面板
hubot graf db graphite-carbon-metrics now-12hr
- 获取时间窗口为 12 小时前至今的仪表盘
hubot graf db graphite-carbon-metrics now-24hr now-12hr
- 获取时间窗口为 24 小时前至 12 小时前的仪表盘
hubot graf db graphite-carbon-metrics:3 now-8d now-1d
- 仅获取特定仪表盘中时间窗口为 8 天前至昨天的第三个面板
hubot graf db graphite-carbon-metrics host=carbon-a
- 获取模板化仪表盘,其中
$host
参数设置为carbon-a
- 获取模板化仪表盘,其中
别名
上面的一些 Hubot 命令可能很长,您可能需要记住仪表盘 slug(url ID)。如果您有几个经常想查看的常用图表(比如从您的手机),您可以使用 Hubot 脚本 hubot-alias
创建 Hubot 命令别名。
安装它
npm i --save hubot-alias
现在将 hubot-alias
添加到 external-scripts.json
中的插件列表,然后重启 Hubot。
现在您可以像这样添加别名:
hubot alias graf-lb=graf db loadbalancers:2 now-20m

总结
Grafana 有一天会推出集成的 Slack 和 Hipchat 功能,但您不必为此等待。Grafana 2 发布了一个非常巧妙的服务端渲染功能,可以使用 phantomjs 将任何面板渲染成 png。您可以立即安装和使用 Grafana 的 Hubot 插件!