প্রমিথিয়াসের ব্যবহার করে ওয়াটারমিলের বাস্তবায়িত মোনিটরিং
মেট্রিক্স
ওয়াটারমিলে পাবরিশার/সাবস্ক্রাইবার এবং হ্যান্ডলারের উপর ডেকোরেটর ব্যবহার করে মনিটর করা যায়। আমরা গোর জন্য অফিসিয়াল প্রমিথিয়াস ক্লায়েন্ট ব্যবহার করে ডিফল্ট ইমপ্লিমেন্টেশন সরবরাহ করি।
components/metrics
প্যাকেজটি PrometheusMetricsBuilder
নির্যাতন করে, যা প্রকারগুলির প্রয়োজনীয় ফাংশন দেওয়া যায় পাবলিশার, সাবস্ক্রাইবার এবং হ্যান্ডলার ডেকোরেট করতে বিশেষ:
সম্পূর্ণ সোর্স কোড: github.com/ThreeDotsLabs/watermill/components/metrics/builder.go
// ...
// PrometheusMetricsBuilder রিপাব্লিশার, সাবস্ক্রাইবার এবং হ্যান্ডলার ট্যাগ করার জন্য পদক্ষেপ সরবরাহ করে।
type PrometheusMetricsBuilder struct {
// PrometheusRegistry ধারণ করতে পারে ধারণিক প্রোথেস্মাস নিবন্ধন পূরণ করতে পারে বা ডিফল্ট নিবন্ধন ব্যবহার করতে খালি হতে পারে।
PrometheusRegistry prometheus.Registerer
Namespace string
Subsystem string
}
// AddPrometheusRouterMetrics একটি যোগাযোগমাধ্যম মাধ্যমে সমস্ত হ্যান্ডলার উপর মেট্রিক মিডলওয়েয়ার যোগ করার জন্য একটি সহজ ফাংশন। এটা হ্যান্ডলারের পাবলিশার এবং সাবস্ক্রাইবারদের উপর ডেকোরেট করে অপডেট করে।
func (b PrometheusMetricsBuilder) AddPrometheusRouterMetrics(r *message.Router) {
// ...
পাবলিশার, সাবস্ক্রাইবার এবং হ্যান্ডলার ডেকোরেট করা
আপনি যদি ওয়াটারমিলের রাউটার ব্যবহার করেন (যা সর্বোত্তম ক্ষেত্রে প্রেরিত হয়), তবে আপনি এই রাউটারে যোগ করা সমস্ত হ্যান্ডলারগুলি ডেকোরেট করার জন্য সুন্দর ফাংশন AddPrometheusRouterMetrics
ব্যবহার করতে পারেন যাতে প্রোথেসমাস রেজিস্ট্রি আপডেট করা হয়, এবং তাদের পাবলিশারগুলি এবং সাবস্ক্রাইবারগুলি:
সম্পূর্ণ সোর্স কোড: github.com/ThreeDotsLabs/watermill/components/metrics/builder.go
// ...
// AddPrometheusRouterMetrics একটি সুযোগশীল ফাংশন যা বার্তা রাউটারের সমস্ত হ্যান্ডলারের উপর মেট্রিক মিডলওয়েয়ার যোগ করার জন্য প্রয়োজনীয়। এটা হ্যান্ডলারের পাবলিশার এবং সাবস্ক্রাইবারদের ডেকোরেট করে।
func (b PrometheusMetricsBuilder) AddPrometheusRouterMetrics(r *message.Router) {
r.AddPublisherDecorators(b.DecoratePublisher)
r.AddSubscriberDecorators(b.DecorateSubscriber)
r.AddMiddleware(b.NewRouterMiddleware().Middleware)
}
// ...
AddPrometheusRouterMetrics
ব্যবহারের উদাহরণ:
সম্পূর্ণ সোর্স কোড: github.com/ThreeDotsLabs/watermill/_examples/basic/4-metrics/main.go
// ...
// আমরা নিচের উদাহরণে নামকরণ এবং উপসেক্তম খালি ছেড়ে দিয়াছি
metricsBuilder := metrics.NewPrometheusMetricsBuilder(prometheusRegistry, "", "")
metricsBuilder.AddPrometheusRouterMetrics(router)
// ...
উপরের কোড নথিত স্নিপেটে, আমরা নিচের প্রমিথিয়াস ক্লায়েন্ট লাইব্রেরী ব্যবহার করে এই প্যারামিটার ইউজ করি মেট্রিক নাম অগ্রাহ্য করতে। আপনি নামপলেট বা উপপরিষদগুলি ব্যবহার করতে চাইতে পারেন, তবে দয়া করে মনে রাখবেন যে এটা মেট্রিক নাম প্রভাবিত করবে, তাই আপনাকে Grafana ড্যাশবোর্ড অনুযায়ী সাজানো দরকার।
স্বাধীন পাবলিশার এবং সাবস্ক্রাইবারের উপর যথার্থ ডেকোরেট ব্যবহার করা যায়, যা PrometheusMetricsBuilder
এর নিষেধাজাতকৃত ভাবে ব্যবহার করা যেতে পারে:
সম্পূর্ণ সোর্স কোড: github.com/ThreeDotsLabs/watermill/_examples/basic/4-metrics/main.go
// ...
subWithMetrics, err := metricsBuilder.DecorateSubscriber(pubSub)
if err != nil {
panic(err)
}
pubWithMetrics, err := metricsBuilder.DecoratePublisher(pub)
if err != nil {
panic(err)
}
// ...
মেট্রিক্স এন্ডপয়েন্ট /metrics উদ exposed
প্রোমিথিওসের কাজের প্রিনসিপাল অনুযায়ী, একটি সার্ভিস ডেটা স্ক্র্যাপিং এর জন্য একটি HTTP এন্ডপয়েন্ট উপস্থাপন করতে হবে। প্রথাগতভাবে এটি একটি GET এন্ডপয়েন্ট এবং পাথটি সাধারণভাবে /metrics
হয়।
এই এন্ডপয়েন্ট উপস্তাপন করার জন্য, দুটি সুবিধাজনক ফাংশন উপলব্ধ, যেতে পারে পূর্বে তৈরি করা প্রামিথিওস রেজিস্ট্রি ব্যবহার করে এবং অন্যটি একই সাথে নতুন রেজিস্ট্রি তৈরি করে:
সম্পূর্ণ সোর্স কোড: github.com/ThreeDotsLabs/watermill/components/metrics/http.go
// ...
// CreateRegistryAndServeHTTP দেয় একটি প্রোমিথিওস এন্ডপয়েন্ট উপস্থাপন করার জন্য একটি এইচটিটিপি সার্ভার।
// এটি একটি নতুন প্রোমিথিওস রেজিস্ট্রি (মেট্রিক রেজিস্ট্রেশনের জন্য) এবং সার্ভার বন্ধ করতে বাতিলকরণ ফাংশন ফেরুক করে।
func CreateRegistryAndServeHTTP(addr string) (registry *prometheus.Registry, cancel func()) {
registry = prometheus.NewRegistry()
return registry, ServeHTTP(addr, registry)
}
// ServeHTTP একটি এইচটিটিপি সার্ভার স্থাপন করে যা প্রোমিথিওসের /metrics এন্ডপয়েন্ট উপস্থাপন করে।
// এটি অবগত প্রোমিথিওস রেজিস্ট্রি গ্রহণ করে এবং সার্ভার বন্ধ করতে বাতিলকরণ ফাংশন ফেরত করে।
func ServeHTTP(addr string, registry *prometheus.Registry) (cancel func()) {
// ...
এখানে ব্যবহারের একটি উদাহরণ:
সম্পূর্ণ সোর্স কোড: github.com/ThreeDotsLabs/watermill/_examples/basic/4-metrics/main.go
// ...
prometheusRegistry, closeMetricsServer := metrics.CreateRegistryAndServeHTTP(*metricsAddr)
defer closeMetricsServer()
// আমরা নেম স্পেস এবং সাবসিস্টেম খালি রাখি
metricsBuilder := metrics.NewPrometheusMetricsBuilder(prometheusRegistry, "", "")
metricsBuilder.AddPrometheusRouterMetrics(router)
// ...
উদাহরণ অ্যাপ্লিকেশন
ড্যাশবোর্ডটি কীভাবে বাস্তবায়নে কাজ করে, এটি বোঝার জন্য আপনি metrics উদাহরণে দেখতে পারেন।
উদাহরণের README এ নির্দেশনা অনুসরণ করে এটি চালান এবং গ্রাফানায় প্রমিথিওস ডেটা সোর্স যুক্ত করুন।
গ্রাফানা ড্যাশবোর্ড
আমরা গ্রাফানা ড্যাশবোর্ড একটি ব্যবহার করার জন্য প্রিয়তে আনদা মেট্রিক্স অনুসন্ধান করি। এটি সরল তথ্য প্রদান করে যা থ্রুপুট, ব্যর্থতা হার এবং পাবলিশ / প্রসেসিং সময়ের প্রস্তুতি সম্পর্কে।
যদি আপনি এই ড্যাশবোর্ডটি স্থানিকভাবে দেখতে চান, তবে আপনি উদাহরণ অ্যাপ্লিকেশনটি ব্যবহার করতে পারেন।
প্রমিথিওসের চলাচল সম্পর্কে আরও অধিক জানতে, দেখুন প্রমিথিওস এক্সপোর্ট করা মেট্রিকস।
ড্যাশবোর্ড আমদানি
গ্রাফানা ড্যাশবোর্ড আমদানি করতে, বাম মেনু থেকে ড্যাশবোর্ড/ ম্যানেজ নির্বাচন করুন, তারপর + আমদানি
ক্লিক করুন।
ড্যাশবোর্ডের URL https://grafana.com/dashboards/9777 (বা শুধুমাত্র আইডি, 9777) লিখুন, তারপর লোড ক্লিক করুন।
তারপর প্রমিথিওস ডেটা সোর্স নির্বাচন করুন, যা /metrics
এন্ডপয়েন্ট স্ক্র্যাপ করতে ব্যবহৃত হয়। আমদানি ক্লিক করুন এবং আপনি সান্ত হয়ে যাবেন!
প্রাসঙ্গিক মেট্রিক
PrometheusMetricsBuilder
দ্বারা প্রমিথিয়াস রেজিস্ট্রিত সমস্ত মেট্রিক্স তালিকা করা হয়েছে।
প্রামিথিয়াস মেট্রিক প্রকারের অধিক তথ্যের জন্য, অনুগ্রহ করে প্রামিথিয়াস নথি দেখুন।
অবজেক্ট | মেট্রিক | বিবরণ | লেবেল/মান |
---|---|---|---|
গ্রাহক | subscriber_messages_received_total |
একটি প্রামিথিয়াস গণক। একটি গ্রাহক দ্বারা প্রাপ্ত বার্তা গণনা করে। | acked এর মান "acked" বা "nacked"। |
যদি গ্রাহক একটি হ্যান্ডলারের মধ্যে পরিচালিত হয়, তবে handler_name সেট করুন; অন্যথায়, " |
|||
subscriber_name গ্রাহক চিহ্নিত করে। যদি এটি fmt.Stringer ইন্টারফেস পুরোপুরি অনুসরণ করে, তবে এটি String() এর ফলাফল; অন্যথায়, এটি package.structName । |
|||
হ্যান্ডলার | handler_execution_time_seconds |
একটি প্রামিথিয়াস হিস্টোগ্রাম। মিডলওয়্যার দ্বারা আবর্তিত হ্যান্ডলার ফাংশনের সময় অনুলিপি করে। | handler_name হ্যান্ডলারের নাম। |
'সাক্সেস' টি "সত্য" বা "মিথ্যা", আবর্তিত হ্যান্ডলার ফাংশন কোনো ত্রুটি প্রত্যাখ্যান করে তা বিশেষণ করে। | |||
পাবলিশার | publish_time_seconds |
একটি প্রামিথিয়াস হিস্টোগ্রাম। পাবলিশারের ডেকোরেটেড প্রকাশ ফাংশনের সময় অনুলিপি করে। | সাক্সেস টি "সত্য" বা "মিথ্যা", ডেকোরেটেড পাবলিশার কোনো ত্রুটি প্রত্যাখ্যান করে মূলত তা বিশেষণ করে। |
যদি পাবলিশার একটি হ্যান্ডলারের মধ্যে পরিচালিত হয়, তবে handler_name সেট করুন; অন্যথায়, " |
|||
publisher_name পাবলিশার চিহ্নিত করে। যদি এটি fmt.Stringer ইন্টারফেস পুরোপুরি অনুসরণ করে, তবে এটি String() এর ফলাফল; অন্যথায়, এটি package.structName । |
এছাড়াও, প্রতিটি মেট্রিকের একটি node
লেবেল প্রদান করে প্রামিথিয়াস, যা এর মান মেট্রিক উৎসের ইনস্ট্যান্সের সাথে সামর্থ্যভূক্ত, এবং একটি job
, যা প্রামিথিয়াস কনফিগারেশন ফাইল এর জব নাম হিসেবে নির্ধারিত।
নোট: উপরোক্ত, একটি গুরুত্বপূর্ণ নেমস্পেস
বা সাবসিস্টেম
ব্যবহার করা উচিত যায় না। এটি সঙ্গে সঙ্গে মেট্রিক নাম উপসর্গ অংকিত হবে। আপনার যদি একাধিক সব তাদের প্যানেল সংজ্ঞানা গ্রাফানা ড্যাশবোর্ডের ডিফিনিশন সংশোধন করা প্রয়োজন হয়, তাহলে এর মেলানুসার সংশোধন করা প্রয়োজন হতে পারে।
কাস্টোমাইজেশন
আপনি যদি মনে করেন কোনও মেট্রিক অবদান হয়ে গিয়েছে, তাহলে আপনি এই মৌলিক বৈশিষ্ট্যবিশেষ করে প্রসারিত করতে পারেন। সেরা উপায়টি হ'ল প্রামিথিয়াস মন্ত্রালয় ব্যবহার করে মেট্রিক নিবন্ধকে ServeHTTP
পদ্ধতিতে ব্যবহার করে মেট্রিক নিবন্ধন করা।
এই মেট্রিকগুলি উন্নত করার একটি সংক্ষিপ্ত পদ্ধতি হ'ল ডেকোরেটর ব্যবহার করে এগুলি আপডেট করা। পূর্ণ সোর্স কোডটি পেতে পারেন github.com/ThreeDotsLabs/watermill/message/decorator.go।
// ...
// MessageTransformSubscriberDecorator একটি গ্রাহক ডেকোরেটর তৈরি করে যা প্রতিটি মেসেজ থেকে গ্রাহক পাস করলে রূপান্তর ফাংশনকে কল দেয়।
func MessageTransformSubscriberDecorator(transform func(*Message)) SubscriberDecorator {
if transform == nil {
panic("রূপান্তর ফাংশন নির্মূলিত")
}
return func(sub Subscriber) (Subscriber, error) {
return &messageTransformSubscriberDecorator{
sub: sub,
transform: transform,
}, nil
}
}
// MessageTransformPublisherDecorator একটি পাবলিশার ডেকোরেটর তৈরি করে যা প্রতিটি মেসেজ থেকে পাবলিশার পাস করলে রূপান্তর ফাংশনকে কল দেয়।
func MessageTransformPublisherDecorator(transform func(*Message)) PublisherDecorator {
if transform == nil {
panic("রূপান্তর ফাংশন নির্মূলিত")
}
return func(pub Publisher) (Publisher, error) {
return &messageTransformPublisherDecorator{
Publisher: pub,
transform: transform,
}, nil
}
}
type messageTransformSubscriberDecorator struct {
// ...
এবং/অথবা মিডলওয়্যারে রাউটারে।
একটি সহজ পদ্ধতি মাএনqছের প্রয়োজনীয় ময়ত্রিক শুধুমাত্র হ্যান্ডলার ফাংশনে।