একটি ডকারের ধারক থেকে ব্যান্ডউইথ গণনা করা


13

আমি ডকারের ধারক থেকে আসা ব্যান্ডউইথকে কীভাবে ট্র্যাক করব তা অনুধাবন করার চেষ্টা করছি।

সাধারণত আমি --uid-ownerপ্রদত্ত ব্যবহারকারীর জন্য ব্যান্ডউইথের ব্যবহারের উপর নজর রাখতে চিহ্ন হিসাবে ব্যবহার করি । যাইহোক, আমি ডক পাত্রে থাকা অভ্যন্তরের ব্যবহারকারী হিসাবে সমস্ত প্রক্রিয়াগুলি চালাচ্ছি --uid-ownerনা কেন। ব্যবহারের পরিবর্তে --uid-owner, আমি ডুকারের দ্বারা তৈরি ভার্চুয়াল ইথারনেট ডিভাইস থেকে আসা সমস্ত প্যাকেটগুলি সন্ধান করার চেষ্টা করেছি।

এটি অবশ্য কিছুই না করে শেষ হয়েছে: আমি যা চেষ্টা করি না কেন, কোনও প্যাকেট ধরা পড়ছে না।

নিদারুণ হতাশার মধ্য দিয়ে আমি কেবল সমস্ত শৃঙ্খলে নিয়মগুলি রাখার চেষ্টা করেছি তবে এর কোনও ফলও হয়নি।

Chain PREROUTING (policy ACCEPT 3041 packets, 7849454 bytes)
num      pkts      bytes target     prot opt in     out     source               destination
1           0        0 MARK       tcp  --  veth5a36 any     anywhere             anywhere             MARK set 0x1

Chain INPUT (policy ACCEPT 273 packets, 23305 bytes)
num      pkts      bytes target     prot opt in     out     source               destination
1           0        0 MARK       tcp  --  veth5a36 any     anywhere             anywhere             MARK set 0x1

Chain FORWARD (policy ACCEPT 2750 packets, 7821109 bytes)
num      pkts      bytes target     prot opt in     out     source               destination
1           0        0 MARK       tcp  --  any    veth5a36  anywhere             anywhere             MARK set 0x1
2           0        0 MARK       tcp  --  veth5a36 any     anywhere             anywhere             MARK set 0x1
3           0        0            all  --  veth5a36 eth0    anywhere             anywhere             mark match 0x1

Chain OUTPUT (policy ACCEPT 293 packets, 80020 bytes)
num      pkts      bytes target     prot opt in     out     source               destination
1           0        0 MARK       tcp  --  any    veth5a36  anywhere             anywhere             MARK set 0x1

Chain POSTROUTING (policy ACCEPT 3043 packets, 7901129 bytes)
num      pkts      bytes target     prot opt in     out     source               destination
1           0        0 MARK       tcp  --  any    veth5a36  anywhere             anywhere             MARK set 0x1

কেউ কি আমাকে বলতে পারেন কীভাবে ডকারের ধারক থেকে সফলভাবে প্যাকেজগুলি চিহ্নিত করতে হয়? সাধারণত ব্যবহার করা হচ্ছে --uid-ownerতবে আমি এই মুহুর্তে কিছু নেব :)

উত্তর:


4

সমস্যাটি নেমস্পেসের সাথে সম্পর্কিত। ডকার এগুলিকে সংস্থানগুলি বিচ্ছিন্ন করতে ব্যবহার করে যার অর্থ তারা হোস্টের মোটে গণনা করেন না।

আপনি যখন iptablesহোস্টের উপর দৌড়ান , আপনি মূলত কেবল হোস্টের নেমস্পেসটি সন্ধান করেন এবং আপনার যে প্যাকেটগুলি আগ্রহী সেগুলি কনটেইনারটির নামস্থানে দীর্ঘতর হয়। এই ইস্যুটি সম্পর্কে কাজ করার জন্য ip netnsআপনি হোস্টে এখনও iptables চালাতে ব্যবহার করতে পারেন , তবে ধারকটির নেটওয়ার্ক নেমস্পেসে।

প্রথমত, ip netnsকিছুটা পাল্টা স্বজ্ঞাত ইন্টারফেস রয়েছে। একটি বিদ্যমান প্রক্রিয়াটির নেমস্পেসের সাথে সংযুক্ত করতে (এই ক্ষেত্রে আপনার ধারক), আপনাকে /var/run/netns/প্রক্রিয়াটির নামের সাথে একটি লিঙ্ক তৈরি করতে হবে:

# ln -sf /proc/`docker inspect -f '{{ .State.Pid }}' YOUR_CONTAINER`/ns/net /var/run/netns/SOME_NAME

(আপনার হতে পারে mkdir /var/run/netns)

এখন আপনি আপনার ধারকটির নাম স্থানটিতে iptables চালাতে নিখরচায়:

# ip netns exec SOME_NAME iptables -L -nv

নোট করুন যে এটি iptables এর নিয়ামকটি ধারকটির ভিতরে রেখে দেয় যা সম্ভবত খালি থাকবে।

আপনি যদি বর্তমানে ব্যবহারকারী-প্রতি কাউন্টারগুলি ব্যবহারের জন্য - ব্যবহারকারীর মালিককে ব্যবহার করছেন তবে আপনার আর এটির প্রয়োজনও নেই, কারণ এই ক্ষেত্রে চেইন কাউন্টারগুলি কেবল ধারকটিতে প্রয়োগ হয় এবং তারপরে পর্যাপ্ত পরিমাণে হওয়া উচিত।

অবশেষে, আপনি পরিষ্কার করতে পারেন /var/run/netns

প্রতি ব্যবহারকারী একাধিক পাত্রে

যদি আপনার প্রতি ব্যবহারকারী একাধিক পাত্রে থাকে এবং সেগুলি একত্রে টাল করতে চান তবে আপনি আপনার পাত্রে দিয়ে এটি শুরু করতে পারেন --net=container:OTHER_CONTAINER_FROM_USER, যাতে তাদের নাম স্থানগুলি একত্রিত হয়।

খোলা পোর্ট সহ নেটওয়ার্ক স্ট্যাকের সমস্ত দিক মার্জ করার এতে অসুবিধা রয়েছে, সুতরাং একই পোর্টে একই ব্যবহারকারীর শোনার জন্য আপনার কাছে দুটি ধারক থাকতে পারে না।

যদি এটি একটি নিষিদ্ধ সীমাবদ্ধতা হয় তবে আপনি পৃথকভাবে ধারকগুলি এবং ইউআইডি-র ভিত্তিতে পরে দলবদ্ধ করতে পারেন।

আপনি এই সমস্যা সম্পর্কে আরো কিছু তথ্য পেতে পারেন এখানে


0

আপনি যা চেয়েছিলেন ঠিক তা নয়, তবে আমি কাজটি করে যাব বলে মনে করি।

ডকার ব্লগের উদ্ধৃতি :

ইন্টারফেস-স্তরের কাউন্টারগুলি

যেহেতু প্রতিটি ধারকের ভার্চুয়াল ইথারনেট ইন্টারফেস রয়েছে তাই আপনি সরাসরি এই ইন্টারফেসের টিএক্স এবং আরএক্স কাউন্টারগুলি পরীক্ষা করতে চাইতে পারেন।

[...]

তবে আপাতত, সর্বোত্তম উপায় হ'ল পাত্রে থেকে ম্যাট্রিকগুলি পরীক্ষা করা। আমি পাত্রে বিশেষ এজেন্ট চালানোর কথা বলছি না, বা এর মতো কিছু করছি। আমরা হোস্ট পরিবেশ থেকে একটি এক্সিকিউটেবল চালাচ্ছি, কিন্তু একটি ধারক নেটওয়ার্ক নেমস্পেসের মধ্যে।

কমান্ডটির সঠিক বিন্যাসটি হ'ল:

ip netns exec <nsname> <command...>

এই ক্ষেত্রে:

ip netns exec mycontainer netstat -i


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