Đầu tháng này, Redis đã phát hành Trình cắm thêm Nguồn dữ liệu Redis cho Grafana, kết nối công cụ giám sát ứng dụng nguồn mở được sử dụng rộng rãi với Redis. Để cung cấp cho bạn ý tưởng về cách tất cả hoạt động, hãy xem một ví dụ tự tham chiếu:sử dụng plugin để xem số lần nó đã được tải xuống theo thời gian. (Bản thân kho lưu trữ trình cắm Grafana không cung cấp các số liệu thống kê như vậy.)
Bạn muốn tìm hiểu thêm? Đọc Giới thiệu Plugin nguồn dữ liệu Redis cho Grafana
Nguồn dữ liệu Redis cho Grafana là gì?
Nếu bạn không quen thuộc với Grafana, đây là một công cụ rất phổ biến được sử dụng để tạo trang tổng quan nhằm theo dõi các ứng dụng, cơ sở hạ tầng và các thành phần phần mềm. Nguồn dữ liệu Redis cho Grafana là một trình cắm thêm cho phép người dùng kết nối với cơ sở dữ liệu Redis và xây dựng trang tổng quan trong Grafana để dễ dàng theo dõi dữ liệu của Redis. Nó cung cấp một bảng điều khiển được xác định trước bên ngoài hộp, nhưng cũng cho phép bạn xây dựng các bảng điều khiển tùy chỉnh được điều chỉnh theo nhu cầu cụ thể của bạn.
Nguồn dữ liệu Redis cho trình cắm Grafana có thể được cài đặt bằng grafana-cli, Docker hoặc được sử dụng trong Đám mây Grafana. Ngoài ra, plugin có thể được tạo từ đầu theo hướng dẫn trên GitHub.
grafana-cli plugins install redis-datasource
Điều kiện tiên quyết
Bản trình diễn này sử dụng:
- Node.js 10.x với trình quản lý gói Node (npm)
- Docker
- Docker Compose
- Redis 5.0.x trở lên với RedisTimeSeries (bản trình diễn này sử dụng vùng chứa Redis Docker)
- Grafana 7.0 trở lên với Nguồn dữ liệu Redis (bản trình diễn này sử dụng vùng chứa Grafana Docker)
Cách truy xuất thông tin trình cắm Grafana
Thông tin về bất kỳ plugin nào đã đăng ký trong kho lưu trữ Grafana có thể được truy xuất bằng cách sử dụng API ở định dạng JSON:
GET https://grafana.com/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" } },
Đối với ví dụ này, tôi muốn tìm hiểu xem Nguồn dữ liệu Redis cho trình cắm Grafana được tải xuống bao nhiêu lần mỗi ngày và tìm kiếm các mức tăng đột biến sau khi chúng tôi đã tweet hoặc đăng trên blog Redis về nó. Tôi quyết định sử dụng RedisTimeSeries (một mô-đun Redis bổ sung cấu trúc dữ liệu chuỗi thời gian cho Redis) để theo dõi số lượt tải xuống mỗi giờ.
Để điền dữ liệu, tôi đã sử dụng TS.ADD lệnh với dấu thời gian tự động và nhãn ` plugin `và` phiên bản `. X là số lượt tải xuống và phiên bản mới nhất `1.1.2` được truy xuất từ API. Các nhãn sẽ được sử dụng sau này để truy vấn chuỗi thời gian.
127.0.0.1:6379> ts.add redis-datasource * X LABELS plugin redis-datasource version 1.1.2
Tôi đã viết một tập lệnh đơn giản bằng cách sử dụng thư viện ioredis và Axios để gọi API và sử dụng thông tin trình cắm để thêm các mẫu chuỗi thời gian:
/** * 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://localhost:6379"); /** * Main * * @async * @param {string} plugin Plugin name */ async function main(plugin) { /** * Get Plugin's data * * @see https://grafana.com/api/plugins/redis-datasource/versions/latest */ const response = await axios.get( `https://grafana.com/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");
Môi trường tập lệnh của tôi
Tôi đã sử dụng tệp package.json để cài đặt các phần phụ thuộc và chạy các lệnh bằng cách sử dụng ` npm `như hình ở đây:
{ "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" }
Để sắp xếp các vùng chứa Docker, tôi đã sử dụng docker-compos:
- Dịch vụ Redis dựa trên hình ảnh redis / redistimeseries, đã bật mô-đun RedisTimeSeries.
- Dịch vụ Grafana sử dụng bản phát hành Grafana mới nhất với plugin Nguồn dữ liệu Redis được cài đặt từ kho lưu trữ.
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
Để chạy tập lệnh mỗi giờ và thu thập dữ liệu tải xuống, tôi đã sử dụng crontab trên máy chủ Linux trong đám mây:
root@grafana:~# crontab -l 5 * * * * node /root/grafana-plugin-stats/stats.ts
Kiểm tra Nguồn dữ liệu Redis cho trình cắm Grafana
Để chạy tập lệnh và thu thập dữ liệu, bạn cần cài đặt Node.js, Docker và Docker Compose, làm theo hướng dẫn dành cho hệ điều hành của bạn:
> 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.com/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=
Sau khi chạy tập lệnh, chúng ta có thể kiểm tra dữ liệu RedisTimeSeries bằng TS.MRANGE yêu cầu. Bạn có thể truy vấn một phạm vi trên nhiều chuỗi thời gian bằng cách sử dụng các bộ lọc theo hướng thuận hoặc ngược:
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
Lệnh TS.MRANGE với bộ lọc ` plugin `chỉ lấy mẫu cho` redis-datasource `trình cắm. Sử dụng tùy chọn WITHLABELS để trả lại nhãn.
Cách hiển thị dữ liệu RedisTimeSeries trong Grafana
Mở Grafana trong trình duyệt web bằng cách sử dụng ` https:// localhost:3000 `và tạo nguồn dữ liệu bằng cách chọn Cấu hình -> Nguồn dữ liệu. Nguồn dữ liệu Redis cho Grafana hỗ trợ bảo mật lớp truyền tải (TLS) và có thể kết nối với cơ sở dữ liệu nguồn mở Redis OSS, Redis Enterprise và Redis Enterprise Cloud ở bất kỳ đâu bằng kết nối trực tiếp.
Bước tiếp theo là tạo trang tổng quan với bảng biểu đồ để trực quan hóa dữ liệu. Chọn “Nguồn dữ liệu Redis” và “Lệnh RedisTimeSeries” trong trình soạn thảo truy vấn. Sử dụng lệnh TS.MRANGE với bộ lọc tên trình cắm.
Cuối cùng, tôi đã đặt tên cho plug-in Legend Labels và đặt phiên bản là Nhãn giá trị, điều này sẽ giúp hiển thị chuỗi cho các phiên bản sau của Nguồn dữ liệu Redis cho Grafana dễ dàng hơn.
Kiểm tra kết quả
Sử dụng lệnh TS.INFO để xem thông tin và thống kê cho chuỗi thời gian. Cho đến nay, tôi đã thu thập dữ liệu tải xuống trong 250 giờ và có thể xem lượng bộ nhớ (tính bằng byte) đã được phân bổ để lưu trữ chuỗi thời gian và các thông tin khác.
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)
Tại thời điểm xuất bản, Nguồn dữ liệu Redis cho trình cắm thêm Grafana đã được tải xuống hơn 3500 lần! Chúng tôi đã nhận được phản hồi có giá trị từ cộng đồng và tiếp tục phát triển các tính năng mới cho nguồn dữ liệu.
Để biết thêm thông tin, hãy xem kho lưu trữ GitHub cho dự án và cho chúng tôi biết nếu bạn có bất kỳ câu hỏi nào về vấn đề này.
Kết luận
Tôi hy vọng bài đăng này và ví dụ của tôi về việc sử dụng Nguồn dữ liệu Redis cho Grafana để theo dõi lượt tải xuống plugin theo thời gian, đã chứng minh sức mạnh và tính dễ sử dụng của công cụ mới này và truyền cảm hứng cho bạn theo dõi dữ liệu ứng dụng của mình (giao dịch, luồng , hàng đợi, v.v.) bằng RedisTimeSeries. Hãy theo dõi để biết thêm các bài đăng về cách thức và lý do sử dụng Nguồn dữ liệu Redis cho trình cắm Grafana.