কম্পিউটার টিউটোরিয়াল

Grafana-এর জন্য নতুন Redis Data Source Plug-in দক্ষতা অর্জন: ধাপে ধাপে গাইড

এই মাসের শুরুতে, Redis নতুন Redis Data Source for Grafana plug-in রিলিজ করল, যা ব্যাপকভাবে ব্যবহৃত ওপেন সোর্স অ্যাপ্লিকেশন মনিটরিং টুলকে Redis-এর সাথে সংযুক্ত করে। কীভাবে সব কিছু কাজ করে সেটি বুঝতে, আসুন একটি সেলফ-রেফারেনশিয়াল উদাহরণ দেখি: প্লাগইনটি ব্যবহার করে দেখি এটি কতবার ডাউনলোড হয়েছে সময়ের সাথে। (Grafana প্লাগইন রিপোজিটরি নিজে থেকে এমন পরিসংখ্যান আউট-অফ-দ্য-বক্স দেয় না।)

আরো জানতে চান? পড়ুন Introducing the Redis Data Source Plug-in for Grafana

Grafana-এর জন্য Redis Data Source কী?

আপনি যদি Grafana-র সাথে পরিচিত না হন, তবে এটি একটি খুব জনপ্রিয় টুল যা অ্যাপ্লিকেশন, ইনফ্রাস্ট্রাকচার, এবং সফটওয়্যার কম্পোনেন্ট মনিটর করার ড্যাশবোর্ড বানাতে ব্যবহৃত হয়। Grafana-এর জন্য Redis Data Source একটি প্লাগইন যা ইউজারদের Redis ডাটাবেসের সাথে কানেক্ট করতে এবং Grafana-এ ড্যাশবোর্ড বানাতে দেয় যাতে সহজে Redis ডেটা মনিটর করা যায়। এটি একটি আউট-অফ-দ্য-বক্স প্রিডিফাইনড ড্যাশবোর্ড দেয়, কিন্তু আপনার নির্দিষ্ট দরকার অনুযায়ী কাস্টোমাইজড ড্যাশবোর্ড বানাতেও দেয়।

Grafana-এর জন্য নতুন Redis Data Source Plug-in দক্ষতা অর্জন: ধাপে ধাপে গাইড

Redis Data Source for Grafana plug-in ইনস্টল করা যায় grafana-cli, Docker, বা Grafana Cloud-এ ব্যবহার করে। অথবা প্লাগইনটি GitHub-এ ইনস্ট্রাকশন ফলো করে স্ক্র্যাচ থেকে বিল্ড করা যায়।

grafana-cli plugins install redis-datasource

প্র리오রেসিটি

এই ডেমো ব্যবহার করে:

  • Node.js 10.x Node package manager (npm) সহ
  • Docker
  • Docker Compose
  • Redis 5.0.x বা তার পরে RedisTimeSeries সহ (এই ডেমো Redis Docker কন্টেইনার ব্যবহার করে)
  • Grafana 7.0 বা তার পরে Redis Data Source সহ (এই ডেমো Grafana Docker কন্টেইনার ব্যবহার করে)

Grafana প্লাগইন ইনফরমেশন কীভাবে রিট্রিভ করবেন

Grafana রিপোজিটরিতে যেকোনো রেজিস্টার্ড প্লাগইন সম্পর্কে ইনফরমেশন 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 প্লাগইন দিনে কতবার ডাউনলোড হয়েছে, এবং আমাদের টুইট বা Redis ব্লগ পোস্টের পর স্পাইক খুঁজে বের করতে চেয়েছিলাম। আমি RedisTimeSeries (একটি Redis মডিউল যা Redis-এ টাইম-সিরিজ ডেটা স্ট্রাকচার যোগ করে) ব্যবহার করতে সিদ্ধান্ত নিলাম প্রতি ঘণ্টা ডাউনলোড সংখ্যা ট্র্যাক করার জন্য।

ডেটা পপুলেট করতে আমি TS.ADD কমান্ড ব্যবহার করলাম অটোমেটিক টাইমস্ট্যাম্প এবং লেবেল `plugin` এবং `version` সহ। 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://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");

আমার স্ক্রিপ্ট এনভায়রনমেন্ট

আমি একটি 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 ব্যবহার করলাম:

  • Redis সার্ভিস redis/redistimeseries ইমেজের ওপর ভিত্তি করে, যেটিতে RedisTimeSeries মডিউল এনাবলড।
  • Grafana সার্ভিস লেটেস্ট Grafana রিলিজ ব্যবহার করে Redis Data Source প্লাগইন ইনস্টলড রিপোজিটরি থেকে।
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

Redis Data Source for Grafana plug-in টেস্ট করা

স্ক্রিপ্ট রান করতে এবং ডেটা সংগ্রহ করতে, আপনাকে 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=

স্ক্রিপ্ট রান করার পর, আমরা RedisTimeSeries ডেটা চেক করতে পারি TS.MRANGE কমান্ড ব্যবহার করে। আপনি একাধিক টাইম-সিরিজের জন্য একটি রেঞ্জ কোয়েরি করতে পারেন ফিল্টার ব্যবহার করে ফরওয়ার্ড বা রিভার্স ডিরেকশনে:

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 কমান্ড `plugin` ফিল্টারের সাথে শুধু `redis-datasource` প্লাগইনটির জন্য স্যাম্পল রিট্রিভ করে। `WITHLABELS` অপশন ব্যবহার করুন লেবেল রিটার্ন করতে।

Grafana-এ RedisTimeSeries ডেটা কীভাবে ডিসপ্লে করবেন

`https://localhost:3000` ব্যবহার করে ওয়েব ব্রাউজারে Grafana খুলুন এবং Configuration -> Data Sources সিলেক্ট করে ডেটা সোর্স তৈরি করুন। Redis Data Source for Grafana ট্রান্সপোর্ট লেয়ার সিকিউরিটি (TLS) সাপোর্ট করে এবং ওপেন সোর্স Redis OSS, Redis Enterprise, এবং Redis Enterprise Cloud ডাটাবেসের সাথে যেকোনো জায়গা থেকে ডায়রেক্ট কানেকশন দিয়ে কানেক্ট করতে পারে।

Grafana-এর জন্য নতুন Redis Data Source Plug-in দক্ষতা অর্জন: ধাপে ধাপে গাইড

পরবর্তী ধাপ হলো একটি ড্যাশবোর্ড তৈরি করা একটি গ্রাফ প্যানেল সহ ডেটা ভিজ্যুয়ালাইজ করার জন্য। "Redis Datasource" এবং "RedisTimeSeries commands" কোয়েরি এডিটরে সিলেক্ট করুন। TS.MRANGE কমান্ড ব্যবহার করুন প্লাগইন নাম ফিল্টারের সাথে।

Grafana-এর জন্য নতুন Redis Data Source Plug-in দক্ষতা অর্জন: ধাপে ধাপে গাইড

শেষে, আমি প্লাগইন Legend Labels হিসেবে নাম দিলাম এবং version কে Value Label হিসেবে সেট করলাম, যা লেটার ভার্সনগুলোর জন্য সিরিজ ডিসপ্লে করা সহজ করবে।

রেজাল্ট চেক করা

TS.INFO কমান্ড ব্যবহার করুন টাইম সিরিজের ইনফরমেশন ও পরিসংখ্যান দেখতে। 지금까지 আমি ২৫০ ঘণ্টা ডাউনলোড ডেটা সংগ্রহ করেছি এবং দেখতে পাচ্ছি কত মেমরি (বাইটে) টাইম-সিরিজ ও অন্যান্য ইনফরমেশন স্টোর করার জন্য অ্যালোকেট হয়েছিল।

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 প্লাগইন ৩৫০০+ বার ডাউনলোড হয়েছে! আমরা কমিউনিটির কাছ থেকে মূল্যবান ফিডব্যাক পেয়েছি এবং ডেটা সোর্সের জন্য নতুন ফিচার ডেভেলপ করছি।

আরো ইনফরমেশন জন্য, প্রজেক্টের GitHub রিপোজিটরি দেখুন এবং আপনার কোনো প্রশ্ন থাকলে issues-এ জানান।

উপসংহার

আশা করি এই পোস্ট, এবং আমার উদাহরণ Redis Data Source for Grafana ব্যবহার করে প্লাগইন ডাউনলোড ট্র্যাক করার 時間ের সাথে, এই নতুন টুলের পাওয়ার এবং ইজ অফ ইউজ প্রদর্শন করলো এবং আপনাকে অনুপ্রাণিত করলো আপনার অ্যাপ্লিকেশন ডেটা (ট্রানজ্যাকশন, স্ট্রিম, কিউ, ইত্যাদি) RedisTimeSeries ব্যবহার করে মনিটর করতে। Redis Data Source for Grafana plug-in কীভাবে এবং কেন ব্যবহার করবেন সেটি নিয়ে আরো পোস্টের জন্য tuned থাকুন।

  1. উইন্ডোজ ১১-এ নতুন মিডিয়া প্লেয়ার অ্যাপ ব্যবহার করুন

  2. উইন্ডোজ ১১-এ নতুন Photos অ্যাপ ব্যবহার গাইড

  3. Redis Data Source-চালিত তিনটি প্রমাণিত Grafana অ্যাপ্লিকেশন

  4. Grafana এখন Redis সমর্থন করে: নতুন ডেটা সোর্স প্লাগ-ইন পরিচিতি