আমি কীভাবে কোনও কুবারনেটস প্রতিলিপি নিয়ন্ত্রকের সমস্ত শুঁটি থেকে লগ পেতে পারি?


123

রানিং kubectl logsআমাকে একটি কুবেরনেটস ধারকটির স্ট্যাডার / স্টাডাউট দেখায়।

আমি কীভাবে একটি নির্দিষ্ট পোডের সংকলন স্টার্ডার / স্টডআউট পেতে পারি, বিশেষত একটি নির্দিষ্ট প্রতিলিপি নিয়ন্ত্রক দ্বারা তৈরি করা?


মনে রাখবেন যে কোনও নির্বাচক ব্যবহার করার সময় লেজের যুক্তি নির্ধারণ না করা প্রতিটি
পোড লগকে

উত্তর:


175

আপনি লেবেল ব্যবহার করতে পারেন

kubectl logs -l app=elasticsearch

21
ভাল সমাধান এবং সম্ভবত মূল প্রশ্নের উত্তর দেওয়ার পক্ষে যথেষ্ট তবে এটি লেজ দেয় না: "ত্রুটি: অনুসরণের মধ্যে কেবল একটি (-f) বা নির্বাচক (-l) অনুমোদিত"।
নেস্টর ওরকিউজা

3
এছাড়াও, না --all-namespaces
এরিক ওয়াকার 18

এই লগগুলির ক্রম কী হবে? আমি বোঝাতে চাইছি যদি এখানে একাধিক পোড থাকে এবং প্রতিটি পডের নিজস্ব লগ থাকে। সুতরাং যদি সমস্ত থেকে লগগুলি প্রদর্শিত হয়, তবে তারা কোন ক্রমে প্রদর্শিত হবে এবং আমি কীভাবে কোনও নির্দিষ্ট লগ লাইনের উত্স পডকে সনাক্ত করব?
শুভম 20'19

6
দেখে মনে হচ্ছে এটি -fএখন (কুবারনেটস 1.12+ / kubectl1.12+ হিসাবে) নিয়ে কাজ করে। এছাড়াও @ শুভম - এটি প্রাপ্ত অর্ডারে বার্তা প্রদর্শন করে, লগ লাইনগুলিতে কোনও ট্যাগ বা কিছুই নেই। এটি কেবল দ্রুত ডিবাগিংয়ের জন্য। আপনার যদি আরও লগের বিশদ দরকার হয় তবে আপনাকে আপনার লগগুলি কেন্দ্রীয় লগিং সিস্টেমে যেমন EFK, SumoLogic, ডেটাডোগ ইত্যাদিতে
প্রেরণ করতে হবে

1
কুবেরনেটস ড্যাশবোর্ড ব্যবহার করে যেভাবেই হোক তেমন কিছু আছে?
mchawre

70

আমি একটি ছোট বাশ স্ক্রিপ্ট তৈরি করেছি যা kubetailএটি সম্ভব করে। উদাহরণস্বরূপ, "অ্যাপ 1" নামক পোডের জন্য সমস্ত লগের লেজ দিতে আপনি করতে পারেন:

kubetail app1

আপনি এখানে স্ক্রিপ্ট খুঁজে পেতে পারেন ।


এটির সাথে এটি ইনস্টল করা হয়েছে: brew tap johanhaleby/kubetail && brew install kubetail --with-short-namesবিশদ ডকুমেন্টেশন: kt -hদুর্দান্ত!
খলিল ঘরবাউই

অসাধারণ. আমার কিছু প্রশ্ন আছে. `` `1. আমরা বিভিন্ন স্থাপনার অন্তর্ভুক্ত একাধিক পোডের লগগুলি টেল করতে পারি? "কেটি-এল অ্যাপ্লিকেশন = সার্ভিস 1, অ্যাপ্লিকেশন = পরিষেবা 2" এর মতো কিছু 2 em এই "কেটি-এল অ্যাপ্লিকেশন = সার্ভিস 1 file >> ফাইলনাম.লগ" করলে এটিতে কেবল পডের নাম লেখা হয়। ৩. এটি অটোক্যাসিং মোতায়েনের ক্ষেত্রেও লেজ দেয়? `` `
বাসুদেব

19

অ্যাড্রিয়ান এনজি প্রস্তাবিত হিসাবে লেবেলগুলি ব্যবহার করে আপনি একাধিক পাত্রে লগগুলি পেতে পারেন:

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]

মনে রাখবেন যে কয়েকটি লেবেল অন্য শুঁটি দ্বারা ভাগ করা যায় না - "অ্যাপ্লিকেশন" বাছাই করা সবচেয়ে সহজ বলে মনে হচ্ছে


13

পূর্ববর্তী উত্তরটি তৈরি করতে যদি আপনি যুক্ত করেন -fতবে লগগুলিতে লেজ দিতে পারেন ।

kubectl logs -f deployment/app

10

পূর্বে প্রদত্ত সমাধানগুলি সর্বোত্তম নয়। কিছুটা আগে কুবেরনেটস দল নিজেই একটি সমাধান সরবরাহ করেছে, তাকে স্টার্ন বলে।

stern app1

এটি নিয়মিত প্রকাশের সাথেও মেলে এবং পূর্বনির্ধারিতভাবে লেজ এবং -f (অনুসরণ) করে) একটি দুর্দান্ত সুবিধা হ'ল এটি আপনাকে সেই পডটি দেখায় যা লগটিও উত্পন্ন করে।

app1-12381266dad-3233c foobar log
app1-99348234asd-959cc foobar log2

লিনাক্সের জন্য গো-বাইনারি ধরুন বা OSX এর জন্য ব্রিউয়ের মাধ্যমে ইনস্টল করুন।

https://kubernetes.io/blog/2016/10/tail-kubernetes-with-stern/

https://github.com/wercker/stern


6

আমি এই সরল স্ক্রিপ্টটি ব্যবহারের একটি পোড থেকে লগ পেতে ব্যবহার করি:

#!/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

লিপির সংক্ষিপ্তসার

ব্যবহার: লগ_ডেপমেন্ট.শ "ডিপ্লোয়মেন্ট-নাম"।

স্ক্রিপ্ট তারপরে সেই "ডিপ্লোয়মেন্ট-নাম" দিয়ে শুরু হওয়া সমস্ত শুঁটির লগ প্রদর্শন করবে।


5

একটি বিকল্প হ'ল https://kubernetes.io/docs/user-guide/logging/elasticsearch/ এ বর্ণিত ফ্লুয়েন্টড / ইলাস্টিক অনুসন্ধানের মাধ্যমে ক্লাস্টার লগিং সেট আপ করা । লগগুলি একবার ES এ আসার পরে, নির্দিষ্ট পাত্রে লগগুলি দেখতে কিবানাতে ফিল্টার প্রয়োগ করা সহজ।


4

আপনি সহায়তা 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ব্যবহার করা হবে না।


3

আপনি পরিষেবার নামেও এটি করতে পারেন।

প্রথমে সংশ্লিষ্ট পডের সেবার নামটি অনুসন্ধান করার চেষ্টা করুন যা একই পরিষেবার একাধিক পোদের সাথে সম্পর্কিত। kubectl get svc

এরপরে, প্রতিটি ধারক থেকে লগগুলি প্রদর্শন করতে নিম্নলিখিত কমান্ডটি চালান।

kubectl logs -f service/<service-name>

2

এই উদাহরণস্বরূপ, কোনও পডে একাধিক কনটেইনার সংজ্ঞায়িত হলে আপনি লগগুলি প্রতিস্থাপন করতে <namespace>এবং <app-name>লগগুলি পেতে পারেন ।

kubectl -n <namespace> logs -f deployment/<app-name>
--all-containers=true --since=10m

1

যদি পোডগুলির নামকরণ করা হয় অর্থপূর্ণভাবে কেউ সাধারণ সরল ওল্ড ব্যাশ ব্যবহার করতে পারে:

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

ব্যাখ্যা: "নোডেজ" যুক্ত নাম সহ চলমান শুঁকির মধ্য দিয়ে লুপ। তাদের প্রত্যেকের জন্য সমান্তরালে লগ টেইল করুন (ব্যাকগ্রাউন্ডে একক অ্যাম্পারস্যান্ড রান) এটি নিশ্চিত করে যে কোনও পোড ব্যর্থ হলে পুরো কমান্ডটি প্রস্থান করে (ডাবল অ্যাম্পারস্যান্ড)। প্রতিটি লেজ কমান্ডের স্ট্রিমগুলি অনন্য স্ট্রিমে বিড়াল করুন। গতিশীলভাবে নির্মিত এই কমান্ডটি চালনার জন্য ইভাল প্রয়োজন।


-1

আমি এই কমান্ডটি ব্যবহার করি।

kubectl -n <namespace> logs -f deployment/<app-name> --all-containers=true --since=10m

1
হ্যালো! যদিও এই আদেশটি প্রশ্নটির সমাধান করতে পারে, কীভাবে এবং কেন এটি সমস্যার সমাধান করে তার ব্যাখ্যা সহ আপনার পোস্টের মান উন্নত করতে সত্যিই সহায়তা করবে এবং সম্ভবত আরও বেশি ভোটের ফলাফল হবে in মনে রাখবেন যে আপনি ভবিষ্যতে পাঠকদের জন্য প্রশ্নের উত্তর দিচ্ছেন, কেবল এখনই জিজ্ঞাসা করা ব্যক্তি নয়। দয়া করে সম্পাদনা ব্যাখ্যা যোগ করতে পারেন এবং সীমাবদ্ধতা এবং অনুমানের কি প্রয়োগ একটি ইঙ্গিত দিতে আপনার উত্তর।
ব্রায়ান

-4

এটি কোনও নতুন জিনিস কিনা তা নিশ্চিত নন তবে মোতায়েনের মাধ্যমে এটি এটি এভাবে করা সম্ভব:

kubectl logs deployment/app1

8
আপনি যখন মোতায়েনের মাধ্যমে লগ পান এটি যে কোনও একটির প্রতিলিপিযুক্ত পোড বেছে নেয় (এলোমেলোভাবে পছন্দ করে) তবে সেগুলি সবই নয়।
আখিল বোজেদলা

ডাউনভোটিং কারণ এটি কেবল একটি পড নির্বাচন করে
ম্যাক্সিমিলিয়ান
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.