视频

了解更多
本月早些时候,Redis 发布了新的 Redis 数据源 Grafana 插件,它将广泛使用的开源应用程序监控工具连接到 Redis。为了让您了解其工作原理,让我们看一个自我引用的示例:使用插件查看它被下载的次数。(Grafana 插件库 本身并没有提供开箱即用的统计信息。)
想要了解更多?阅读 为 Grafana 推出 Redis 数据源插件
如果您不熟悉 Grafana,它是一种非常流行的工具,用于构建仪表板以监控应用程序、基础设施和软件组件。Redis 数据源 Grafana 插件是一个插件,允许用户连接到 Redis 数据库并在 Grafana 中构建仪表板,以便轻松监控 Redis 数据。它提供了一个开箱即用的预定义仪表板,但还允许您构建针对特定需求定制的仪表板。
Redis 数据源 Grafana 插件可以使用 grafana-cli、Docker 安装,或在 Grafana Cloud 中使用。或者,可以按照 GitHub 上的说明 从头开始构建插件。
grafana-cli plugins install redis-datasource
此演示使用
可以使用 API 以 JSON 格式检索有关 Grafana 库中任何已注册插件的信息
GET https://grafana.org.cn/api/plugins/redis-datasource/versions/latest { "id": 2613, "pluginId": 639, "pluginSlug": "redis-datasource", "version": "1.1.2", "url": "https://github.com/RedisTimeSeries/grafana-redis-datasource/", ... "downloads": 1153, "verified": false, "status": "active", "packages": { "any": { "md5": "ea0a2c9cb11c9fad66703ba4291e61cb", "packageName": "any", "downloadUrl": "/api/plugins/undefined/versions/1.1.2/download" } },
在此示例中,我想找出 Redis 数据源 Grafana 插件每天被下载的次数,并查找在我们在 Redis 博客上发布推文或文章后的峰值。我决定使用 RedisTimeSeries(一个将时间序列数据结构添加到 Redis 的 Redis 模块)来跟踪每小时的下载次数。
为了填充数据,我使用带有自动时间戳和标签 `plugin` 和 `version` 的 TS.ADD 命令。X 是下载次数,最新版本 `1.1.2` 来自 API。标签稍后将用于查询时间序列。
127.0.0.1:6379> ts.add redis-datasource * X LABELS plugin redis-datasource version 1.1.2
我编写了一个 简单脚本,使用 ioredis 和 Axios 库来调用 API 并使用插件信息添加时间序列样本
/** * A robust, performance-focused and full-featured Redis client for Node.js. * * @see https://github.com/luin/ioredis */ const Redis = require("ioredis"); /** * Promise based HTTP client for the browser and node.js * * @see https://github.com/axios/axios */ const axios = require("axios"); /** * You can also specify connection options as a redis:// URL or rediss:// URL when using TLS encryption */ const redis = new Redis("redis://#:6379"); /** * Main * * @async * @param {string} plugin Plugin name */ async function main(plugin) { /** * Get Plugin's data * * @see https://grafana.org.cn/api/plugins/redis-datasource/versions/latest */ const response = await axios.get( `https://grafana.org.cn/api/plugins/${plugin}/versions/latest` ); /** * Response */ const data = response.data; if (!data) { console.log("Where is the data?"); return; } /** * Add Time-series sample with plugin and version labels */ await redis.send_command( "TS.ADD", data.pluginSlug, "*", data.downloads, "LABELS", "plugin", data.pluginSlug, "version", data.version ); /** * Close Redis connection */ await redis.quit(); } /** * Start */ main("redis-datasource");
我使用一个 package.json 文件来安装依赖项,并使用 `npm` 运行命令,如下所示
{ "author": "Mikhail Volkov", "dependencies": { "axios": "^0.19.2", "ioredis": "^4.17.3" }, "description": "Get statistics for Grafana Plugin", "devDependencies": { "@types/node": "^14.0.27" }, "license": "ISC", "name": "grafana-plugin-stats", "scripts": { "redis-cli": "docker exec -it redistimeseries redis-cli", "start": "docker-compose up", "start:app": "node grafana-plugin-stats.ts" }, "version": "1.0.0" }
为了编排 Docker 容器,我使用了 docker-compose
version: "3.4" services: redis: container_name: redistimeseries image: redis/redistimeseries:latest ports: - 6379:6379 grafana: container_name: grafana image: grafana/grafana:latest ports: - "3000:3000" environment: - GF_AUTH_ANONYMOUS_ORG_ROLE=Admin - GF_AUTH_ANONYMOUS_ENABLED=true - GF_AUTH_BASIC_ENABLED=false - GF_ENABLE_GZIP=true - GF_INSTALL_PLUGINS=redis-datasource
为了每小时运行一次脚本并收集下载数据,我使用云中 Linux 服务器上的 crontab
root@grafana:~# crontab -l 5 * * * * node /root/grafana-plugin-stats/stats.ts
要运行脚本并收集数据,您需要安装 Node.js、Docker 和 Docker Compose,请按照您的操作系统的说明操作:
> docker-compose up -d Starting grafana ... done Starting redistimeseries ... done ... redistimeseries | 1:M 08 Aug 2020 21:13:20.405 * <timeseries> Redis version found by RedisTimeSeries : 6.0.1 - oss ... grafana | installing redis-datasource @ 1.1.2 grafana | from: https://grafana.org.cn/api/plugins/redis-datasource/versions/1.1.2/download ... grafana | t=2020-08-08T21:13:23+0000 lvl=info msg="Registering plugin" logger=plugins name=Redis grafana | t=2020-08-08T21:13:23+0000 lvl=info msg="HTTP Server Listen" logger=http.server address=[::]:3000 protocol=http subUrl= socket=
运行脚本后,我们可以使用 TS.MRANGE 命令检查 RedisTimeSeries 数据。您可以使用过滤器在正向或反向方向上查询多个时间序列的范围
127.0.0.1:6379> ts.mrange - + withlabels filter plugin=redis-datasource 1) 1) "diff:redis-datasource" 2) 1) 1) "value" 2) "diff" 2) 1) "type" 2) "datasource" 3) 1) "plugin" 2) "redis-datasource" 4) 1) "version" 2) "1.1.2" 3) 1) 1) (integer) 1597125602559 2) 0 2) 1) (integer) 1597129202847 2) 1 3) 1) (integer) 1597132802738 2) 10
带有过滤器 `plugin` 的命令 `TS.MRANGE` 仅检索 `redis-datasource` 插件的样本。使用选项 `WITHLABELS` 返回标签。
在 Web 浏览器中使用 `https://#:3000` 打开 Grafana,并通过选择配置 -> 数据源来创建数据源。Redis 数据源 Grafana 支持传输层安全 (TLS),并且可以使用直接连接连接到任何地方的开源 Redis OSS、Redis Enterprise 和 Redis Enterprise Cloud 数据库。
下一步是在查询编辑器中创建一个带有图形面板的仪表板,以可视化数据。在查询编辑器中选择“Redis 数据源”和“RedisTimeSeries 命令”。使用带有插件名称过滤器的命令 `TS.MRANGE`。
最后,我将插件命名为图例标签并将版本设置为值标签,这将使其更容易显示 Redis 数据源 Grafana 以后版本的序列。
使用命令 TS.INFO 查看时间序列的信息和统计信息。到目前为止,我已经收集了 250 小时的下载数据,并且可以看到分配多少内存(以字节为单位)来存储时间序列和其他信息。
127.0.0.1:6379> ts.info diff:redis-datasource 1) totalSamples 2) (integer) 250 3) memoryUsage 4) (integer) 4313 5) firstTimestamp 6) (integer) 1597125602559 7) lastTimestamp 8) (integer) 1598022003033 9) retentionTime 10) (integer) 0 11) chunkCount 12) (integer) 1 13) maxSamplesPerChunk 14) (integer) 256 15) labels 16) 1) 1) "value" 2) "diff" 2) 1) "type" 2) "datasource" 3) 1) "plugin" 2) "redis-datasource" 4) 1) "version" 2) "1.1.2" 17) sourceKey 18) (nil) 19) rules 20) (empty list or set)
截至出版时,Redis 数据源 Grafana 插件已被下载超过 3500 次!我们收到了社区宝贵的反馈,并继续为数据源开发新功能。
有关更多信息,请查看 项目的 GitHub 库,如果您有任何问题,请在问题中告诉我们。
我希望这篇文章以及我使用 Redis 数据源 Grafana 来跟踪插件下载次数的示例,已经展示了这种新工具的强大功能和易用性,并激励您使用 RedisTimeSeries 监控应用程序数据(交易、流、队列等)。敬请关注有关如何以及为什么要使用 Redis 数据源 Grafana 插件的更多文章。