Vercel Analytics ба мониторинг
Апп deploy хийсний дараа хэрэглэгч яаж хэрэглэж байгааг мэдэх хэрэгтэй. Хичнээн хүн ирж байна вэ? Аль хуудас удаан ачаалагдаж байна вэ? Ямар алдаа гарч байна вэ? Vercel-н Analytics болон Speed Insights эдгээр асуултыг хариулдаг — хоёулаа үнэгүй tier-тэй. Monitoring тохируулснаар аппын асуудлыг хэрэглэгч мэдэхийн өмнө та олж засах боломжтой болдог.
Vercel Analytics тохируулах
Vercel Analytics нь хуудасны хандалт, хэрэглэгчийн тоог хянадаг — cookie ашиглахгүй тул GDPR-д нийцдэг:
npm install @vercel/analytics
Root layout-д нэмнэ:
// app/layout.tsx
import { Analytics } from "@vercel/analytics/react";
import { GeistSans } from "next/font/google";
const geistSans = GeistSans({
subsets: ["latin"],
variable: "--font-geist-sans",
});
export default function RootLayout({
children,
}: {
children: React.ReactNode;
}) {
return (
<html lang="mn" className={geistSans.variable}>
<body>
{children}
<Analytics />
</body>
</html>
);
}
Vercel dashboard → тухайн project → Analytics tab дарахад хандалтын мэдээлэл харагдана:
| Үзүүлэлт | Тайлбар | | --------------- | ------------------------- | | Page Views | Нийт хуудас харсан тоо | | Unique Visitors | Өвөрмөц хэрэглэгчийн тоо | | Top Pages | Хамгийн их хандсан хуудас | | Referrers | Хаанаас ирсэн | | Countries | Ямар улс орноос ирсэн |
Speed Insights тохируулах
Speed Insights нь Core Web Vitals-г бодит хэрэглэгчийн төхөөрөмжөөс хэмждэг — synthetic test биш:
npm install @vercel/speed-insights
// app/layout.tsx
import { Analytics } from "@vercel/analytics/react";
import { SpeedInsights } from "@vercel/speed-insights/next";
export default function RootLayout({
children,
}: {
children: React.ReactNode;
}) {
return (
<html lang="mn">
<body>
{children}
<Analytics />
<SpeedInsights />
</body>
</html>
);
}
Speed Insights dashboard-д хуудас бүрийн LCP, INP, CLS утгуудыг харж болно. Асуудалтай хуудсыг шууд тодорхойлж оновчлох боломжтой.
Custom event бүртгэх
Хэрэглэгч тодорхой үйлдэл хийхэд custom event бүртгэж болно — жишээлбэл хичээл дуусгах, бүртгүүлэх:
// components/lesson/LessonPanel.tsx
"use client";
import { track } from "@vercel/analytics";
interface CompleteLessonButtonProps {
courseSlug: string;
lessonSlug: string;
onComplete: () => void;
}
export default function CompleteLessonButton({
courseSlug,
lessonSlug,
onComplete,
}: CompleteLessonButtonProps) {
function handleComplete() {
// Custom event бүртгэнэ
track("lesson_completed", {
courseSlug,
lessonSlug,
});
onComplete();
}
return (
<button
onClick={handleComplete}
className="px-6 py-3 bg-[#4ade80] text-[#0b1120] font-semibold rounded-lg"
>
Дуусгах
</button>
);
}
Custom event-ийг Analytics dashboard → Events tab-д харна. Ямар хичээл хамгийн их дуусгагдаж байгаа, аль курс идэвхтэй байгааг ингэж хянана.
Vercel Log Drain ба Function Log
API route болон Server Action-н log-г Vercel dashboard-д харж болно:
// app/api/progress/route.ts
import { NextRequest, NextResponse } from "next/server";
export async function POST(request: NextRequest) {
const body = await request.json();
// Log нь Vercel Functions log-д харагдана
console.log("[progress] Хичээл дуусгалаа:", {
courseSlug: body.courseSlug,
lessonSlug: body.lessonSlug,
timestamp: new Date().toISOString(),
});
// алдаа гарвал бүртгэнэ
try {
// ... Supabase логик
return NextResponse.json({ success: true });
} catch (error) {
console.error("[progress] Алдаа гарлаа:", error);
return NextResponse.json({ error: "Серверийн алдаа" }, { status: 500 });
}
}
Vercel dashboard → Logs tab → Function-уудын console.log, console.error бүгд бодит цагаар харагдана.
Supabase мониторинг
Supabase-н өөрийн dashboard-д database-н мониторинг байдаг:
-- Supabase SQL Editor дотор хэрэглэгчийн идэвхийг харах
select
date_trunc('day', completed_at) as day,
count(*) as completions
from lesson_progress
group by day
order by day desc
limit 30;
| Хянах зүйл | Хэрэгсэл |
| ------------------ | --------------------- |
| Хандалт, хэрэглэгч | Vercel Analytics |
| LCP, INP, CLS | Vercel Speed Insights |
| API log, алдаа | Vercel Function Logs |
| Database query | Supabase Dashboard |
| Custom event | track() функц |
Мониторингийг эхнээс нь тохируулбал апп өсөхийн хэрээр юу сайжруулах хэрэгтэйг тоон мэдээлэлд тулгуурлан шийдэх боломжтой болдог. Таамаглалаар биш, бодит өгөгдлөөр шийдвэр гаргах нь мэргэжлийн хөгжүүлэгчийн нэг чухал чадвар юм.
Дараагийн хичээлд:
Курсын эцсийн төслийг бүтээнэ — Next.js, Supabase, Vercel ашиглан бүрэн fullstack апп хийж, deploy хүртэл хүргэнэ.