
टर्मिनल यूआई जो bpftool का उपयोग करके eBPF प्रोग्राम्स और मैप्स की रीयल-टाइम निगरानी और निरीक्षण करता है, जिससे कर्नेल-स्तरीय ऑब्जर्वेबिलिटी डेटा की लाइव डीबगिंग और विश्लेषण संभव होता है।
ebpfmon eBPF प्रोग्रामों की निगरानी के लिए एक उपकरण है। इसे लिनक्स कर्नेल के bpftool के साथ उपयोग करने के लिए डिज़ाइन किया गया है। ebpfmon एक TUI (टर्मिनल यूज़र इंटरफ़ेस) एप्लिकेशन है जो Go में लिखा गया है और यह eBPF प्रोग्रामों की रीयल-टाइम निगरानी करने की अनुमति देता है।
eBPFmon को स्रोत से बनाया जा सकता है या इसका एक संकलित संस्करण रिलीज़ में उपलब्ध है।
$ sudo apt install linux-tools-`uname -r` libelf-dev zlib1g-dev libcap-dev binutils-dev
$ sudo yum install bpftool elfutils-libelf-devel libcap-devel binutils-devel
$ sudo dnf install elfutils-libelf-devel libcap-devel zlib-devel binutils-devel bpftool
$ sudo apt install bpftool libelf-dev zlib1g-dev libcap-dev binutils-dev
$ ./ebpfmon
नोट: bpftool को रूट विशेषाधिकारों की आवश्यकता है और इसलिए ebpfmon sudo bpftool ... चलाएगा।
इसका मतलब है कि आपको अपना sudo पासवर्ड दर्ज करने के लिए कहा जाएगा।
सबसे पहले, यह उपकरण Go में लिखा गया है, इसलिए आपको इसे स्थापित करना होगा और इसे अपने PATH चर में रखना होगा। यह Go 1.18 या उसके बाद के संस्करण पर काम करना चाहिए, हालांकि यह संभव है कि यह पुराने संस्करणों पर भी काम कर सके। इसका परीक्षण नहीं किया गया है।
अगला, सुनिश्चित करें कि निम्नलिखित निर्भरताएँ स्थापित हैं।
बस निम्नलिखित कमांड चलाएँ। यह वर्तमान निर्देशिका में ebpfmon बाइनरी का निर्माण करेगा।
$ git clone https://github.com/redcanaryco/ebpfmon.git
$ cd ebpfmon
$ make
ebpfmon का मुख्य दृश्य प्रोग्राम दृश्य है। यह दृश्य सिस्टम पर वर्तमान में लोड सभी eBPF प्रोग्राम दिखाता है। प्रत्येक फलक चयन योग्य है और आप tab कुंजी का उपयोग करके फलकों के बीच स्विच कर सकते हैं। किसी दिए गए फलक में, आप टेक्स्ट या सूची चयन को ऊपर और नीचे स्क्रॉल करने के लिए तीर कुंजियों का उपयोग कर सकते हैं। प्रोग्राम या मैप जैसी सूचियों के लिए, आप चयन करने के लिए एंटर दबा सकते हैं। किसी प्रोग्राम का चयन करने से अन्य फलक उस प्रोग्राम के बारे में जानकारी से भर जाते हैं। किसी मैप का चयन करने से मैप प्रविष्टि दृश्य पर स्विच हो जाता है जो उस मैप की प्रविष्टियाँ दिखाता है।
ebpfmon में कुछ कुंजी बाइंडिंग्स उपलब्ध हैं। ये सहायता पृष्ठ पर सूचीबद्ध हैं जिसे F1 कुंजी या ? कुंजी दबाकर एक्सेस किया जा सकता है।
आप जिस भी दृश्य पर हैं, प्रोग्राम दृश्य तक पहुँचने के लिए Ctrl और e दबा सकते हैं।
आप जिस भी दृश्य पर हैं, bpf फीचर दृश्य तक पहुँचने के लिए Ctrl और f दबा सकते हैं।
मैप दृश्य तक पहुँचने के लिए बस वर्तमान eBPF प्रोग्राम के लिए एक मैप (यदि मौजूद हो) चुनें। यह मैप दृश्य को मैप प्रविष्टियों से भर देगा। आप d कुंजी दबाकर मैप प्रविष्टियों को हटा सकते हैं। मैप दृश्य में आप मैप प्रविष्टि डेटा को विभिन्न तरीकों से प्रारूपित कर सकते हैं। प्रारूप अनुभाग में जाने के लिए मैप प्रविष्टि सूची दृश्य में TAB दबाएँ। फिर आप विभिन्न प्रारूप विकल्पों के बीच जाने के लिए TAB का उपयोग कर सकते हैं। मैप प्रविष्टि सूची में वापस आने के लिए ESC दबाएँ।
आप किसी चयन पर ENTER दबाकर मैप प्रविष्टियों को संपादित भी कर सकते हैं। संपादन दृश्य में आप मैप कुंजी/मान के कच्चे बाइट मानों को संपादित कर सकते हैं। आप वर्गाकार कोष्ठकों को अनदेखा कर सकते हैं।
एप्लिकेशन से बाहर निकलने के लिए आप q या Q दबा सकते हैं।
सामान्यतः ESC कुंजी आपको उस पिछले दृश्य पर वापस ले जानी चाहिए जिस पर आप थे। इसके अलावा, यदि आप सहायता दृश्य या त्रुटि दृश्य में हैं, तो escape दबाने से आप पिछली विंडो पर वापस आ जाना चाहिए।
-bpftoolआपको bpftool बाइनरी के पथ को निर्दिष्ट करने की अनुमति देता है। यह उपयोगी है यदि आपके पास bpftool का एक कस्टम बिल्ड है जिसका आप उपयोग करना चाहते हैं। डिफ़ॉल्ट रूप से यह सिस्टम के bpftool बाइनरी का उपयोग करेगा। आप एक पर्यावरण चर का भी उपयोग कर सकते हैं। यह निम्न क्रम में देखेगा
-bpftool तर्क कमांड लाइन पर निर्दिष्ट किया गया थाBPFTOOL_PATH सेट है।-logfileयह तर्क आपको लॉग करने के लिए एक फ़ाइल निर्दिष्ट करने की अनुमति देता है। डिफ़ॉल्ट रूप से यह ./log.txt में लॉग करेगा। एप्लिकेशन के साथ समस्याओं को डीबग करने का प्रयास करते समय यह एक बेहतरीन फ़ाइल है क्योंकि यह रनटाइम के दौरान हुई त्रुटियों को लॉग करेगा।
इस प्रोजेक्ट से जुड़े कुछ बुनियादी परीक्षण हैं।
परीक्षण चलाने के लिए प्रोजेक्ट की रूट डायरेक्टरी से निम्नलिखित कमांड चलाएँ
$ go test ./...
यदि आप अपनी स्वयं की bpftool बाइनरी का उपयोग करना चाहते हैं, तो आप BPFTOOL_PATH पर्यावरण चर को अपने bpftool बाइनरी के पथ पर सेट कर सकते हैं। यदि नहीं, तो यह डिफ़ॉल्ट रूप से सिस्टम वाले का उपयोग करेगा।