BCC – Linux效能監控、網路及更多功能的動態跟蹤工具


如果您是Linux使用者或管理員,您可能聽說過“BCC工具”或“BPF編譯器集合”。BCC是一套功能強大的動態跟蹤工具,它提供了一種簡單而有效的方法來監控系統性能、網路以及更多內容。在本文中,我們將討論BCC工具是什麼、它們的優點以及如何使用它們(附示例)。

什麼是BCC工具?

BCC(BPF編譯器集合)是一套基於Linux核心中eBPF(擴充套件伯克利資料包過濾器)技術的動態跟蹤工具。eBPF是一個在核心內部執行的虛擬機器,它允許對系統事件進行高效且靈活的跟蹤,而無需修改核心或重新編譯。

BCC工具旨在為使用eBPF跟蹤和分析各種系統事件提供一個簡單易用的介面。它們是用Python和C語言編寫的,可用於廣泛的任務,包括系統性能監控、網路分析、安全等。

BCC工具的優點

BCC工具為Linux使用者和管理員提供了許多好處。這些包括:

低開銷

BCC工具旨在對系統性能的影響最小。它們使用eBPF技術直接在核心內部跟蹤事件,從而減少了與傳統系統監控工具相關的上下文切換和其他開銷。

靈活性

BCC工具可用於各種任務,從監控系統性能到網路分析等等。它們非常靈活且可定製,是Linux使用者和管理員的強大工具。

使用者友好的介面

BCC工具提供了一個簡單易用的介面,用於使用eBPF跟蹤系統事件。它們易於使用,不需要專門瞭解核心內部結構或程式設計。

活躍的開發社群

BCC工具由龐大的開發者社群積極開發和維護。這意味著不斷新增新功能和改進,並且可以快速解決bug。

如何使用BCC工具

BCC工具可用於廣泛的任務,包括系統性能監控、網路分析、安全等。在本節中,我們將討論如何使用一些最常用的BCC工具,並提供示例。

BPFtrace

BPFtrace是一種用於eBPF的高階跟蹤語言,旨在簡化eBPF程式的編寫和閱讀。它為跟蹤系統事件和分析效能提供了簡單易用的介面。

要使用BPFtrace,您首先需要在系統上安裝它。您可以使用您發行版的包管理器來完成此操作。例如,在Ubuntu上,您可以透過執行以下命令來安裝BPFtrace:

sudo apt-get install bpftrace

安裝BPFtrace後,您可以使用它來編寫eBPF程式並跟蹤系統事件。例如,以下BPFtrace程式將在每次啟動程序時列印一條訊息:

tracepoint:process:process_start
{
   printf("process %s started
", args->comm); }

您可以將此程式儲存到一個檔案(例如,“process_start.bt”)中,並使用以下命令執行它:

sudo bpftrace process_start.bt

執行此命令時,BPFtrace將開始跟蹤程序事件,並在每次啟動程序時列印一條訊息。

BCC工具

BCC工具為Linux系統提供了廣泛的跟蹤和監控功能。一些最常用的BCC工具包括:

Execsnoop

execsnoop工具跟蹤系統上新的程序執行。它可用於監控哪些程序正在執行以及它們何時啟動。要使用execsnoop,只需執行以下命令:

sudo execsnoop

這將開始跟蹤程序執行事件,並在啟動新程序時列印有關這些程序的資訊。

Opensnoop

opensnoop工具跟蹤檔案系統事件,包括檔案開啟、關閉和讀取。它可用於監控檔案系統活動並查詢效能瓶頸。要使用opensnoop,請執行以下命令:

sudo opensnoop

這將開始跟蹤檔案系統事件,並在發生檔案活動時列印有關檔案活動的資訊。

Tcptracer

tcptracer工具跟蹤系統上的TCP連線,包括與遠端主機及其關聯埠的連線。它可用於監控網路活動並診斷網路相關問題。要使用tcptracer,請執行以下命令:

sudo tcptracer

這將開始跟蹤TCP連線,並在發生連線事件時列印有關連線事件的資訊。

BCC指令碼示例

BCC工具也可用於編寫更復雜的指令碼以監控和分析系統性能。在本節中,我們將提供一些BCC指令碼示例,這些指令碼可用於監控CPU使用率、磁碟I/O和網路活動。

CPU使用率

以下BCC指令碼可用於監控系統上的CPU使用率:

#!/usr/bin/python

from bcc import BPF

# load BPF program
bpf_text = """
#include <uapi/linux/ptrace.h>

int count_sched(struct pt_regs *ctx) {
   u64 ts = bpf_ktime_get_ns();
   bpf_trace_printk("Hello, world! %d\
", ts); return 0; } """ # initialize BPF program bpf = BPF(text=bpf_text) # attach BPF program to sched_switch tracepoint bpf.attach_tracepoint(tp="sched:sched_switch", fn_name="count_sched") # print trace messages as they occur bpf.trace_print()

此指令碼將在系統上的CPU排程程式切換任務時列印一條訊息。

磁碟I/O

以下BCC指令碼可用於監控系統上的磁碟I/O活動:

#!/usr/bin/python

from bcc import BPF

# load BPF program
bpf_text = """
#include <uapi/linux/ptrace.h>

int count_disk_io(struct pt_regs *ctx, const char *rwflag) {
   u64 ts = bpf_ktime_get_ns();
   bpf_trace_printk("Disk I/O %s %d\
", rwflag, ts); return 0; } """ # initialize BPF program bpf = BPF(text=bpf_text) # attach BPF program to blk_account_io_done tracepoint bpf.attach_tracepoint(tp="block:block_rq_complete", fn_name="count_disk_io", ctx="R") # print trace messages as they occur bpf.trace_print()

此指令碼將在系統上完成磁碟I/O操作時列印一條訊息。

網路活動

以下BCC指令碼可用於監控系統上的網路活動:

#!/usr/bin/python

from bcc import BPF

# load BPF program
bpf_text = """
#include <uapi/linux/ptrace.h>

int count_network(struct pt_regs *ctx, int protocol) {
   u64 ts = bpf_ktime_get_ns();
   bpf_trace_printk("Network %d %d\
", protocol, ts); return 0; } """ # initialize BPF program bpf = BPF(text=bpf_text) # attach BPF program to tcp_v{4,6}_connect trace points bpf.attach_tracepoint(tp="tcp_v4_connect", fn_name="count_network", ctx="R") bpf.attach_tracepoint(tp="tcp_v6_connect", fn_name="count_network", ctx="R") print trace messages as they occur bpf.trace_print()

此指令碼將在系統上建立TCP連線時列印一條訊息。

除了我們提供的示例之外,BCC工具還有許多其他用例。例如,BCC工具可用於監控系統呼叫、跟蹤使用者級事件以及診斷核心級問題。其他一些可能有用的BCC工具包括:

  • csysdig – 一個提供圖形介面以使用eBPF分析系統活動的工具。

  • funccount – 一個計算指定函式呼叫次數的工具。

  • tcpconnect – 一個跟蹤系統上TCP連線的工具。

  • biosnoop – 一個在BIOS級別跟蹤塊I/O操作的工具。

  • syncsnoop – 一個跟蹤系統上同步事件的工具。

BCC工具也可以與其他系統監控工具(例如prometheus、grafana和nagios)結合使用,以提供更全面的系統性能檢視。

還值得注意的是,BCC工具正在不斷地由社群開發和改進,因此定期新增新的功能和能力。因此,務必使您的BCC工具保持最新狀態,以利用最新的改進。

結論

總之,BCC工具提供了一套強大的動態跟蹤工具,用於監控和分析Linux系統上的系統性能、網路以及更多內容。它們提供使用者友好的介面、低開銷和高靈活性,使它們成為Linux使用者和管理員的必備工具。無論您是系統管理員、開發人員還是安全分析師,BCC工具都可以幫助您深入瞭解您的系統並快速有效地診斷效能問題。因此,如果您還沒有嘗試過,請試用BCC工具,看看它們如何使您和您的Linux系統受益。

更新於:2023年4月11日

瀏覽量:499

啟動您的職業生涯

透過完成課程獲得認證

開始
廣告
© . All rights reserved.