Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Redis

เชี่ยวชาญ Redis Data Source Plug-in สำหรับ Grafana: คู่มือขั้นตอนต่อขั้นตอน

ต้นเดือนนี้ Redis เปิดตัว Redis Data Source for Grafana plug-in ใหม่ ซึ่งเชื่อมต่อเครื่องมือ monitor แอปพลิ케이션 open source ที่ใช้กันอย่างกว้างขวางกับ Redis เพื่อให้คุณเห็นภาพรวมของการทำงาน มาดูตัวอย่าง self-referential: ใช้ plug-in เพื่อดูว่ามันถูกดาวน์โหลดไปกี่ครั้งตลอดเวลา (Grafana plug-in repository เองไม่ให้สถิติแบบนี้ out of the box)

อยากเรียนรู้เพิ่มเติม? อ่าน Introducing the Redis Data Source Plug-in for Grafana

Redis Data Source for Grafana คืออะไร?

หากคุณไม่คุ้นเคยกับ Grafana มันคือเครื่องมือยอดนิยมที่ใช้สร้าง dashboards เพื่อ monitor แอปพลิเคชัน infrastructures และ software components Redis Data Source for Grafana เป็น plug-in ที่อนุญาตให้ผู้ใช้เชื่อมต่อกับฐานข้อมูล Redis และสร้าง dashboards ใน Grafana เพื่อ monitor ข้อมูล Redis ได้อย่างง่าย มันให้ predefined dashboard ออกมาแบบพร้อมใช้ และยังให้คุณสร้าง dashboards ที่ปรับแต่งได้ตามความต้องการเฉพาะของคุณ

เชี่ยวชาญ Redis Data Source Plug-in สำหรับ Grafana: คู่มือขั้นตอนต่อขั้นตอน

Redis Data Source for Grafana plug-in สามารถติดตั้งได้โดยใช้ grafana-cli, Docker หรือใช้ใน Grafana Cloud หรือสร้างจากต้นทางโดยปฏิบัติตามคำแนะนำบน GitHub

grafana-cli plugins install redis-datasource

ข้อกำหนดก่อนหน้า (Prerequisites)

Demo นี้ใช้:

  • Node.js 10.x พร้อม Node package manager (npm)
  • Docker
  • Docker Compose
  • Redis 5.0.x หรือใหม่กว่า พร้อม RedisTimeSeries (demo นี้ใช้ Redis Docker container)
  • Grafana 7.0 หรือใหม่กว่า พร้อม Redis Data Source (demo นี้ใช้ Grafana Docker container)

วิธีดึงข้อมูล Grafana plug-in

ข้อมูลเกี่ยวกับ plug-in ที่ลงทะเบียนใน Grafana repository ใดๆ สามารถดึงได้โดยใช้ API ในรูปแบบ 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" } },

สำหรับตัวอย่างนี้ ผมอยากทราบว่า Redis Data Source for Grafana plug-in ถูกดาวน์โหลดกี่ครั้งต่อวัน และมองหา spikes หลังจากที่เราทวีตหรือโพสต์บน Redis blog เกี่ยวกับมัน ผมตัดสินใจใช้ RedisTimeSeries (โมดูล Redis ที่เพิ่มโครงสร้างข้อมูล time-series ให้ Redis) เพื่อติดตามจำนวนดาวน์โหลดทุกชั่วโมง

เพื่อ populate ข้อมูล ผมใช้คำสั่ง TS.ADD ด้วย timestamp อัตโนมัติและ labels `plugin` และ `version` X คือจำนวนดาวน์โหลด และ latest version `1.1.2` ที่ดึงมาจาก API Labels จะถูกใช้ภายหลังเพื่อสอบถาม time series

127.0.0.1:6379> ts.add redis-datasource * X LABELS plugin redis-datasource version 1.1.2

ผมเขียน script เรียบง่ายโดยใช้ไลบรารี ioredis และ Axios เพื่อเรียก API และใช้ข้อมูล plug-in เพื่อเพิ่ม time-series samples:

/** * 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");

สภาพแวดล้อม script ของผม

ผมใช้ไฟล์ package.json เพื่อติดตั้ง dependencies และรันคำสั่งโดยใช้ `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 containers ผมใช้ docker-compose:

  • Redis service 基於 redis/redistimeseries image ซึ่งมีโมดูล RedisTimeSeries เปิดใช้งาน
  • Grafana service ใช้ latest Grafana release พร้อม Redis Data Source plug-in ติดตั้งจาก repository
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

เพื่อรัน script ทุกชั่วโมงและรวบรวมข้อมูลดาวน์โหลด ผมใช้ crontab บน Linux server ใน cloud:

root@grafana:~# crontab -l 5 * * * * node /root/grafana-plugin-stats/stats.ts

การทดสอบ Redis Data Source for Grafana plug-in

เพื่อรัน script และรวบรวมข้อมูล คุณต้องติดตั้ง 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.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=

หลังจากรัน script เราสามารถตรวจสอบข้อมูล RedisTimeSeries โดยใช้คำสั่ง TS.MRANGE คุณสามารถสอบถามช่วงข้าม time-series หลายตัวโดยใช้ filters ในทิศทาง forward หรือ reverse:

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

คำสั่ง TS.MRANGE พร้อม filter `plugin` ดึง samples เฉพาะสำหรับ `redis-datasource` plug-in ใช้ตัวเลือก WITHLABELS เพื่อคืนค่า labels

วิธีแสดงข้อมูล RedisTimeSeries ใน Grafana

เปิด Grafana ในเว็บเบราว์เซอร์โดยใช้ `https://localhost:3000` และสร้าง data source โดยเลือก Configuration -> Data Sources Redis Data Source for Grafana รองรับ transport layer security (TLS) และสามารถเชื่อมต่อกับ open source Redis OSS, Redis Enterprise และ Redis Enterprise Cloud databases ได้ทุกที่โดยใช้ direct connection

เชี่ยวชาญ Redis Data Source Plug-in สำหรับ Grafana: คู่มือขั้นตอนต่อขั้นตอน

ขั้นตอนต่อไปคือสร้าง dashboard พร้อม graph panel เพื่อ visualize data เลือก "Redis Datasource" และ "RedisTimeSeries commands" ใน query editor ใช้คำสั่ง TS.MRANGE พร้อม filter ชื่อ plug-in

เชี่ยวชาญ Redis Data Source Plug-in สำหรับ Grafana: คู่มือขั้นตอนต่อขั้นตอน

สุดท้าย ผมตั้งชื่อ plug-in Legend Labels และตั้ง version เป็น Value Label ซึ่งจะทำให้ง่ายต่อการแสดง series สำหรับเวอร์ชันใหม่ๆ ของ Redis Data Source for Grafana

ตรวจสอบผลลัพธ์

ใช้คำสั่ง TS.INFO เพื่อดูข้อมูลและสถิติสำหรับ time series จนถึงตอนเผยแพร่ ผมรวบรวมข้อมูลดาวน์โหลด 250 ชั่วโมง และสามารถเห็นว่ามีหน่วยความจำ (ใน bytes) จัดสรรเท่าไหร่เพื่อจัดเก็บ time-series และข้อมูลอื่นๆ

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 Data Source for Grafana plug-in ถูกดาวน์โหลดมากกว่า 3500 ครั้ง! เราได้รับฟีดแบ็กที่มีค่าจากชุมชนและยังคงพัฒนาฟีเจอร์ใหม่สำหรับ data source

สำหรับข้อมูลเพิ่มเติม โปรดดู GitHub repository สำหรับโปรเจกต์นี้ และแจ้งให้เราทราบหากคุณมีคำถามใน issues

สรุป

หวังว่าโพสต์นี้ และตัวอย่างของผมที่ใช้ Redis Data Source for Grafana เพื่อติดตามดาวน์โหลดของ plug-in ตลอดเวลา ได้แสดงพลังและความง่ายต่อการใช้งานของเครื่องมือใหม่นี้ และแรงบันดาลใจคุณให้ monitor ข้อมูลแอปพลิเคชันของคุณ (transactions, streams, queues ฯลฯ) โดยใช้ RedisTimeSeries อย่าลืมติดตามโพสต์เพิ่มเติมเกี่ยวกับวิธีและเหตุผลในการใช้ Redis Data Source for Grafana plug-in