রানিং kubectl logs
আমাকে একটি কুবেরনেটস ধারকটির স্ট্যাডার / স্টাডাউট দেখায়।
আমি কীভাবে একটি নির্দিষ্ট পোডের সংকলন স্টার্ডার / স্টডআউট পেতে পারি, বিশেষত একটি নির্দিষ্ট প্রতিলিপি নিয়ন্ত্রক দ্বারা তৈরি করা?
রানিং kubectl logs
আমাকে একটি কুবেরনেটস ধারকটির স্ট্যাডার / স্টাডাউট দেখায়।
আমি কীভাবে একটি নির্দিষ্ট পোডের সংকলন স্টার্ডার / স্টডআউট পেতে পারি, বিশেষত একটি নির্দিষ্ট প্রতিলিপি নিয়ন্ত্রক দ্বারা তৈরি করা?
উত্তর:
আপনি লেবেল ব্যবহার করতে পারেন
kubectl logs -l app=elasticsearch
--all-namespaces
।
-f
এখন (কুবারনেটস 1.12+ / kubectl
1.12+ হিসাবে) নিয়ে কাজ করে। এছাড়াও @ শুভম - এটি প্রাপ্ত অর্ডারে বার্তা প্রদর্শন করে, লগ লাইনগুলিতে কোনও ট্যাগ বা কিছুই নেই। এটি কেবল দ্রুত ডিবাগিংয়ের জন্য। আপনার যদি আরও লগের বিশদ দরকার হয় তবে আপনাকে আপনার লগগুলি কেন্দ্রীয় লগিং সিস্টেমে যেমন EFK, SumoLogic, ডেটাডোগ ইত্যাদিতে
আমি একটি ছোট বাশ স্ক্রিপ্ট তৈরি করেছি যা kubetail
এটি সম্ভব করে। উদাহরণস্বরূপ, "অ্যাপ 1" নামক পোডের জন্য সমস্ত লগের লেজ দিতে আপনি করতে পারেন:
kubetail app1
আপনি এখানে স্ক্রিপ্ট খুঁজে পেতে পারেন ।
brew tap johanhaleby/kubetail && brew install kubetail --with-short-names
বিশদ ডকুমেন্টেশন: kt -h
দুর্দান্ত!
অ্যাড্রিয়ান এনজি প্রস্তাবিত হিসাবে লেবেলগুলি ব্যবহার করে আপনি একাধিক পাত্রে লগগুলি পেতে পারেন:
kubectl logs --selector app=yourappname
যদি আপনার একাধিক পাত্রে পড থাকে তবে উপরের কমান্ডটি ব্যর্থ হতে চলেছে এবং আপনাকে ধারকটির নামটি নির্দিষ্ট করতে হবে:
kubectl logs --selector app=yourappname --container yourcontainername
দ্রষ্টব্য: আপনি যদি দেখতে চান যে কোন লেবেলগুলি আপনার কাছে উপলব্ধ, নিম্নলিখিত কমান্ডটি সেগুলি সমস্ত তালিকাভুক্ত করবে:
kubectl get pod <one of your pods> -o template --template='{{.metadata.labels}}'
... যেখানে আউটপুটটি দেখতে কিছু ভালো লাগবে
মানচিত্র [অ্যাপ: ইউর্যাপনাম নিয়ন্ত্রক-সংশোধন-হ্যাশ: 598302898 শুঁটি-টেমপ্লেট-জেনারেশন: 1]
মনে রাখবেন যে কয়েকটি লেবেল অন্য শুঁটি দ্বারা ভাগ করা যায় না - "অ্যাপ্লিকেশন" বাছাই করা সবচেয়ে সহজ বলে মনে হচ্ছে
পূর্বে প্রদত্ত সমাধানগুলি সর্বোত্তম নয়। কিছুটা আগে কুবেরনেটস দল নিজেই একটি সমাধান সরবরাহ করেছে, তাকে স্টার্ন বলে।
stern app1
এটি নিয়মিত প্রকাশের সাথেও মেলে এবং পূর্বনির্ধারিতভাবে লেজ এবং -f (অনুসরণ) করে) একটি দুর্দান্ত সুবিধা হ'ল এটি আপনাকে সেই পডটি দেখায় যা লগটিও উত্পন্ন করে।
app1-12381266dad-3233c foobar log
app1-99348234asd-959cc foobar log2
লিনাক্সের জন্য গো-বাইনারি ধরুন বা OSX এর জন্য ব্রিউয়ের মাধ্যমে ইনস্টল করুন।
https://kubernetes.io/blog/2016/10/tail-kubernetes-with-stern/
আমি এই সরল স্ক্রিপ্টটি ব্যবহারের একটি পোড থেকে লগ পেতে ব্যবহার করি:
#!/usr/bin/env bash
DEPLOYMENT=$1
for p in $(kubectl get pods | grep ^${DEPLOYMENT}- | cut -f 1 -d ' '); do
echo ---------------------------
echo $p
echo ---------------------------
kubectl logs $p
done
ব্যবহার: লগ_ডেপমেন্ট.শ "ডিপ্লোয়মেন্ট-নাম"।
স্ক্রিপ্ট তারপরে সেই "ডিপ্লোয়মেন্ট-নাম" দিয়ে শুরু হওয়া সমস্ত শুঁটির লগ প্রদর্শন করবে।
একটি বিকল্প হ'ল https://kubernetes.io/docs/user-guide/logging/elasticsearch/ এ বর্ণিত ফ্লুয়েন্টড / ইলাস্টিক অনুসন্ধানের মাধ্যমে ক্লাস্টার লগিং সেট আপ করা । লগগুলি একবার ES এ আসার পরে, নির্দিষ্ট পাত্রে লগগুলি দেখতে কিবানাতে ফিল্টার প্রয়োগ করা সহজ।
আপনি সহায়তা kubectl logs -h
এবং তথ্য অনুযায়ী সহায়তা পেতে পারেন ,
kubectl logs -f deployment/myapp -c myapp --tail 100
-c
এটি ধারকটির নাম এবং --tail
সর্বশেষতম লাইনগুলি প্রদর্শন করবে , তবে এটি স্থাপনার একটি শুঁটি বেছে নেবে, সমস্ত পোড নয়। এটি আপনার মনে রাখা দরকার is
kubectl logs -l app=myapp -c myapp --tail 100
আপনি যদি সমস্ত পোডের লগগুলি দেখাতে চান তবে আপনি -l
একটি লেবেল ব্যবহার এবং নির্দিষ্ট করতে পারেন , তবে একই সাথে -f
ব্যবহার করা হবে না।
এই উদাহরণস্বরূপ, কোনও পডে একাধিক কনটেইনার সংজ্ঞায়িত হলে আপনি লগগুলি প্রতিস্থাপন করতে <namespace>
এবং <app-name>
লগগুলি পেতে পারেন ।
kubectl -n <namespace> logs -f deployment/<app-name>
--all-containers=true --since=10m
যদি পোডগুলির নামকরণ করা হয় অর্থপূর্ণভাবে কেউ সাধারণ সরল ওল্ড ব্যাশ ব্যবহার করতে পারে:
keyword=nodejs
command="cat <("
for line in $(kubectl get pods | \
grep $keyword | grep Running | awk '{print $1}'); do
command="$command (kubectl logs --tail=2 -f $line &) && "
done
command="$command echo)"
eval $command
ব্যাখ্যা: "নোডেজ" যুক্ত নাম সহ চলমান শুঁকির মধ্য দিয়ে লুপ। তাদের প্রত্যেকের জন্য সমান্তরালে লগ টেইল করুন (ব্যাকগ্রাউন্ডে একক অ্যাম্পারস্যান্ড রান) এটি নিশ্চিত করে যে কোনও পোড ব্যর্থ হলে পুরো কমান্ডটি প্রস্থান করে (ডাবল অ্যাম্পারস্যান্ড)। প্রতিটি লেজ কমান্ডের স্ট্রিমগুলি অনন্য স্ট্রিমে বিড়াল করুন। গতিশীলভাবে নির্মিত এই কমান্ডটি চালনার জন্য ইভাল প্রয়োজন।
আমি এই কমান্ডটি ব্যবহার করি।
kubectl -n <namespace> logs -f deployment/<app-name> --all-containers=true --since=10m
এটি কোনও নতুন জিনিস কিনা তা নিশ্চিত নন তবে মোতায়েনের মাধ্যমে এটি এটি এভাবে করা সম্ভব:
kubectl logs deployment/app1