TypeORM এর Logging এবং Monitoring
TypeORM হল একটি ORM (Object-Relational Mapping) লাইব্রেরি যা ডেটাবেস পরিচালনা করার জন্য ব্যবহৃত হয়। TypeORM ডেভেলপারদের জন্য বিভিন্ন ধরনের logging এবং monitoring টুল সরবরাহ করে, যা ডেটাবেস অপারেশনগুলির কার্যকারিতা এবং সমস্যা ট্র্যাক করতে সহায়তা করে। এটি ডেটাবেস অপারেশনগুলি পর্যবেক্ষণ করতে সাহায্য করে, বিশেষ করে উন্নয়ন এবং প্রোডাকশন পরিবেশে।
এখানে আমরা TypeORM এর Logging এবং Monitoring সম্পর্কে আলোচনা করব, এবং কীভাবে আপনি TypeORM-এ লগিং সেটআপ এবং মনিটরিং কার্যকরভাবে করতে পারেন তা দেখাব।
১. Logging in TypeORM
TypeORM এর logging অপশন আপনাকে SQL কুয়েরি, ডেটাবেসে পরিবর্তন এবং অন্যান্য অপারেশনগুলির লগ তৈরি করতে সক্ষম করে। এটি উন্নয়ন বা ডিবাগিংয়ের জন্য খুবই কার্যকরী। TypeORM আপনাকে ডেটাবেস কুয়েরি, এন্টিটি ইন্টারঅ্যাকশন, এবং অন্যান্য গুরুত্বপূর্ণ কার্যক্রম সম্পর্কে বিশদ তথ্য দেখতে সাহায্য করে।
Logging Configuration
TypeORM-এ লগিং কনফিগারেশনটি ormconfig.json অথবা আপনার কোডে DataSource কনফিগারেশনে সেটআপ করা যায়।
ormconfig.json এ লগিং কনফিগারেশন:
{
"type": "mysql",
"host": "localhost",
"port": 3306,
"username": "root",
"password": "password",
"database": "test",
"logging": true,
"entities": [
"src/entity/**/*.ts"
],
"synchronize": true
}
এখানে "logging": true কোডটি TypeORM কে SQL কুয়েরি এবং অন্যান্য কার্যকলাপ লগ করতে বলে।
Logging Options
TypeORM এ আপনি বিভিন্ন ধরনের লগিং নির্বাচন করতে পারেন:
true: সব ধরনের কুয়েরি লগ করবে।false: কোনো কুয়েরি লগ করবে না।["query", "schema"]: SQL কুয়েরি এবং স্কিমা পরিবর্তন লগ করবে।["error", "schema", "warn"]: SQL কুয়েরি, স্কিমা পরিবর্তন, এবং ওয়্যার্নিং লগ করবে।
Code Example: Enabling Logging in Code
import { DataSource } from "typeorm";
import { User } from "./entity/User";
const dataSource = new DataSource({
type: "mysql",
host: "localhost",
port: 3306,
username: "root",
password: "password",
database: "test",
entities: [User],
synchronize: true,
logging: true, // Enable logging
});
dataSource.initialize().then(() => {
console.log("DataSource has been initialized!");
}).catch((error) => {
console.error("Error during DataSource initialization:", error);
});
এখানে, logging: true প্যারামিটার দিয়ে আপনি SQL কুয়েরি লগিং এনাবল করেছেন। এটি কনসোলে SQL কুয়েরি এবং অন্যান্য ডিবাগিং তথ্য প্রদর্শন করবে।
২. Custom Logging Setup
TypeORM আপনাকে কাস্টম লগিং ফাংশন সেটআপ করারও সুবিধা দেয়, যেখানে আপনি নিজস্ব লোগিং মেথড এবং লাইব্রেরি ব্যবহার করতে পারেন (যেমন, Winston, Log4js ইত্যাদি)। TypeORM এর logger অপশন ব্যবহার করে কাস্টম লগার সেটআপ করা যায়।
Custom Logger Example
import { Logger } from "winston";
import { DataSource } from "typeorm";
import { User } from "./entity/User";
const customLogger: Logger = new (require('winston').createLogger)({
transports: [
new (require('winston').transports.Console)({
format: require('winston').format.simple(),
}),
],
});
const dataSource = new DataSource({
type: "mysql",
host: "localhost",
port: 3306,
username: "root",
password: "password",
database: "test",
entities: [User],
synchronize: true,
logging: ["query", "error", "schema"], // Enable specific log levels
logger: customLogger, // Use custom logger
});
dataSource.initialize().then(() => {
console.log("DataSource has been initialized with custom logger!");
}).catch((error) => {
console.error("Error during DataSource initialization:", error);
});
এখানে Winston logger ব্যবহার করা হয়েছে, যা TypeORM-এর logger অপশনের মাধ্যমে কাস্টম লগিং তৈরি করা হয়েছে। এটি SQL কুয়েরি, স্কিমা পরিবর্তন এবং ত্রুটির লগ তৈরি করবে।
৩. Monitoring TypeORM Operations
TypeORM-এ কার্যক্রম মনিটরিং করার জন্য বিভিন্ন পদ্ধতি এবং টুলস ব্যবহার করা যেতে পারে। মনিটরিং মূলত অ্যাপ্লিকেশনের পারফরম্যান্স এবং ব্যবহারের উপর নজর রাখে, যাতে ডেটাবেসের অপারেশনগুলো দক্ষতার সাথে সম্পন্ন হয়।
1. Database Query Performance Monitoring
Prometheus এবং Grafana এর মতো টুলস TypeORM অপারেশন মনিটর করার জন্য ব্যবহৃত হতে পারে। Prometheus ডেটাবেসের কুয়েরি পারফরম্যান্স এবং অন্যান্য পরিমাপ সঞ্চয় করে এবং Grafana এর মাধ্যমে সেই ডেটা বিশ্লেষণ এবং ভিজুয়ালাইজ করতে সাহায্য করে।
Prometheus সেটআপ করার জন্য আপনাকে ডেটাবেসের পারফরম্যান্স কাউন্টার বা exporter ব্যবহার করতে হবে যা আপনার ডেটাবেসের তথ্য Prometheus সার্ভারে পাঠাবে।
2. Real-time Monitoring with APM Tools
Application Performance Monitoring (APM) টুলস যেমন New Relic, Datadog, বা AppSignal TypeORM অপারেশন মনিটরিংয়ের জন্য ব্যবহার করা যায়। এই টুলসগুলো রিয়েল-টাইমে ডেটাবেস কুয়েরি পারফরম্যান্স, সিস্টেম রিসোর্স ব্যবহারের পরিমাপ এবং আরো অনেক গুরুত্বপূর্ণ তথ্য সংগ্রহ করে এবং মনিটর করে।
3. Query Execution Time
TypeORM এর logging অপশন ব্যবহার করে আপনি কুয়েরি এক্সিকিউশন টাইম ট্র্যাক করতে পারেন। logging সক্রিয় করার মাধ্যমে আপনি SQL কুয়েরি এবং তাদের এক্সিকিউশন সময় দেখতে পাবেন, যা ডেটাবেস অপটিমাইজেশনের জন্য সহায়ক।
import { DataSource } from "typeorm";
const dataSource = new DataSource({
type: "mysql",
host: "localhost",
port: 3306,
username: "root",
password: "password",
database: "test",
logging: ["query", "error"],
});
dataSource.initialize().then(() => {
console.log("Monitoring and logging enabled!");
}).catch((error) => {
console.error("Error during DataSource initialization:", error);
});
এখানে, TypeORM এর logging: ["query", "error"] ব্যবহার করে SQL কুয়েরি এবং ত্রুটির লগ তৈরি করা হচ্ছে।
৪. Monitoring with Query Builder
TypeORM-এ QueryBuilder ব্যবহার করে SQL কুয়েরি তৈরির সময় আপনি কুয়েরি তৈরি এবং এর এক্সিকিউশন টাইম ট্র্যাক করতে পারেন। এটি ডেটাবেস কুয়েরির পারফরম্যান্স মনিটর করতে সহায়তা করে।
const result = await dataSource
.getRepository(User)
.createQueryBuilder("user")
.where("user.age > :age", { age: 18 })
.getMany();
console.log(result);
এখানে, createQueryBuilder ব্যবহার করে কুয়েরি তৈরি করা হয়েছে এবং এর পরিণামে পাওয়া ডেটা থেকে বিভিন্ন পারফরম্যান্স মেট্রিকস বিশ্লেষণ করা যেতে পারে।
সারাংশ
Logging এবং Monitoring TypeORM অপারেশনগুলির জন্য গুরুত্বপূর্ণ এবং প্রয়োজনীয় ফিচার। TypeORM-এ logging পদ্ধতিটি কুয়েরি, স্কিমা পরিবর্তন এবং অন্যান্য কার্যকলাপ ট্র্যাক করতে ব্যবহৃত হয়। আপনি কাস্টম লগার ব্যবহার করতে পারেন, অথবা Winston, Log4js মতো লাইব্রেরি দিয়ে আরও উন্নত লগিং সিস্টেম তৈরি করতে পারেন। Monitoring পদ্ধতিগুলি যেমন Prometheus, Grafana, এবং APM Tools ব্যবহার করে ডেটাবেসের পারফরম্যান্স এবং অন্যান্য কার্যক্রম পর্যবেক্ষণ করা যায়। এগুলি অ্যাপ্লিকেশন এবং ডেটাবেস অপারেশনগুলির কার্যকারিতা এবং সমস্যা শনাক্ত করতে সহায়ক।
Read more