接下来看下python方面的知识。1.   初始化1.1     BPF语法:BPF({text=BPF_program | src_file=filename} [, usdt_contexts=[USDT_object, ...]])创建一个BPF对象,能通过交互来产生输出。1.2     USDT语法:USDT({pid=pid | path=path})创建对象来使用USDT,可以指定进程...
原创 2021-08-16 23:25:41
1718阅读
从广义的层面上讲,任何遵循Prometheus数据格式 ,可对其提供监控指标的程序都可以称为Exporter。在Prometheus社区中提供了丰富多样的Exporter供选择,如前面用到的node_exporter。这些Exporter不仅类型丰富,功能上也很强大,通过合理的使用可以极大的方便我们的运维监控工作。除此之外,Prometheus还提供了支持多种开发语言的Clinet Librari
eBPF篇中,我们知道虽然可用 C 来实现 BPF,但编译出来的却仍然是 ELF 文件,开发者需要手动析出真正可以注入内核的代码。工作有些麻烦,于是就有人设计了 BPF Compiler Collection(BCC),BCC 是一个(基于 C 和 C++) python 库,实现了对 BCC 应用层接口的封装。  使用 BCC 进行 BPF 的开发仍然需要开发者自行利用 C 来设计 BPF 程...
原创 2021-08-16 23:25:57
856阅读
argdist工具用于探测指定的函数,并收集参数到一个直方图和频率计数器。可以在没有调试器的情况下,过滤并打印敢兴趣的参数,从而理解指定参数的分布图。例如像知道一个应用中的内存分配块大小情况,可以指向如下:./argdist -p 2420 -c -C 'p:c:malloc(size_t size):size_t:size'如果要变成柱状图,参数修改成-H即可。./argdist -p 2420...
原创 2021-08-16 23:25:47
763阅读
funccount函数可以通过匹配来跟踪函数,tracepoints 或USDT探针。例如所有以vfs_ 开头的内核函数。./funccount 'vfs_*'这个对于探索内核代码很有帮助,可以找出哪个函数在使用那个函数没在使用。也可以设置间隔,每秒打印一次:./funccount -i 1 'vfs_*'跟踪所有tcp函数。./funccount 'tcp_*'当执行Ctrl+C进行取消跟踪的时...
原创 2021-08-16 23:25:53
391阅读
在之前的bcc代码中我们知道其程序是分为两部分的,一部分是C语言,另一部分是基于Python的。本篇是关于C语言部分的。1.   事件和参数1.1     kprobes使用kprobe的语法是:kprobe__kernel_function_name其中kprobe__是前缀,用于给内核函数创建一个kprobe(内核函数调用的动态跟踪)。也可通过C语言函数定义一个C函数,然后使用python的B...
原创 2021-08-16 23:25:43
3521阅读
bcc开发脚本有两种方式,一种是基于python接口,另一种是基于ruby接口,我们看的是基于python接口的。本篇的前置条件是系统中已经安装好了bcc。1.   Hello world输入代码如下:#!/usr/bin/env pythonfrom bcc import BPFBPF(text='int kprobe__sys_clone(void *ctx) { bpf_trace_prin...
原创 2021-08-16 23:25:45
1298阅读
关于trace,argdist,funccount三个工具已有专门篇章介绍。所有脚本位于bcc/tools文件夹中。execsnoop跟踪新进程创建,跟踪exec函数。bashreadline打印系统中所有bash上运行的命令,通过跟踪readline()函数实现。biolatency跟踪块设备IO,记录IO延时分布并输出直方图。biosnoop跟踪块设备IO,为每个IO打印一行。biotop是块...
原创 2021-08-16 23:25:49
2747阅读
这里将问题诊断分为两个阶段,第一阶段是定性分析,第二阶段是是用bcc进行定量分析。 1.   阶段一 在使用bcc工具前,先要进行基本的系统性能判断,如下十个步骤,可以1到2分钟之内观测完毕。 相关脚本可以参考 https://github.com/kernel-z/LinuxProfiling l   uptime l   dmesg | tail l   vmstat 1 l 
原创 2021-08-16 23:27:01
979阅读
原创 精选 9月前
443阅读
1点赞
上篇中是通用的直接可用工具。  trace工具可以指定跟踪函数并显示,可控制其输出格式来显示函数参数和返回值。例如跟踪文件拥有者的属性更改,也就是跟踪三个文件系统调用chown,fchown,lchown。使用如下:trace.py    'p::SyS_chown "file = %s, to_uid = %d, to_gid = %d, from_uid = %d", arg1, arg2, ...
原创 2021-08-16 23:25:51
989阅读
原理 从内核中获取数据。 整个工具的核心原理是利用 eBPF 技术,在内核中与块设备 I/O 相关的关键函数上设置探针(Tracepoint),从而在几乎无开销的情况下捕获 I/O 请求的开始和结束时间,计算出延迟,并将结果存入 eBPF map 中。用户空间程序则负责读取这个 map 并将数据格式 ...
转载 4天前
341阅读
博文内容为读书笔记整理,对原书内容做了摘要博文内容涉及:BPF和eBPF认知BCC和bpftrace认知BCC和bpftrace工具简单认知
原创 精选 2024-03-01 10:42:13
472阅读
DBCC INPUTBUFFER 显示从客户端发送到 Microsoft® SQL Server™ 的最后一个语句。 语法 DBCC INPUTBUFFER (spid) 参数 spid 是 sp_who 系统存储过程的输出中所显示的用户连接系统进程 ID (SPID)。 结果集 DBCC INPU ...
转载 2021-08-09 08:57:00
175阅读
2评论
原创宋宝华Linux阅码场3月8日bcceBPF的一种前端,当然这个前端特别地简单好用。可以直接在python里面嵌入通过C语言写的BPF程序,并帮忙产生BPFbytecode和load进入kernel挂载kprobe、tracepoints等上面执行。之后,还可以从python取出来C函数里面导出的maps数据以及per-event数据并进行打印。详细的原理参见:http://www.bren
原创 2020-11-27 00:19:13
407阅读
BCC(Block Check Character/信息组校验码),因校验码是将所有数据异或得出,故俗称异或校验。具体算法是:将每一个字节的数据(一般是两个16进制的字符)进行异或后即得到校验码。 例如16进制数据:01 A0 7C FF 02 计算:01 xor A0 xor 7C xor FF xor 02 = 20 校验码是:20 /*********
转载 2023-06-08 11:12:23
422阅读
原创宋宝华Linux阅码场2019-12-25bcceBPF的一种前端,当然这个前端特别地简单好用。可以直接在python里面嵌入通过C语言写的BPF程序,并帮忙产生BPFbytecode和load进入kernel挂载kprobe、tracepoints等上面执行。之后,还可以从python取出来C函数里面导出的maps数据以及per-event数据并进行打印。详细的原理参见:http://ww
原创 2020-11-27 10:38:03
1627阅读
1. ebpf概述1.1 ebpf发展历史 BPF,及伯克利包过滤器Berkeley Packet Filter,最初构想提出于 1992 年,其目的是为了提供一种过滤包的方法,并且要避免从内核空间到用户空间的无用的数据包复制行为。它最初是由从用户空间注入到内核的一个简单的字节码构成,它在那个位置利用一个校验器进行检查 —— 以避免内核崩溃或者安全问题 —— 并附着到一个套接字上,接着在每个接收到
转载 2024-05-27 14:37:43
167阅读
Linux内核 eBPF基础 ftrace基础:ftrace_init初始化 荣涛 2021年5月12日 本文相关注释代码:https://github.com/Rtoax/linux-5.10.13从整体架构来看,ftrace位于内核态,提供对内核函数的trace功能。图片链接:http://tinylab.org/ftrace-principle-and-practice/静态探测点,
转载 2024-01-04 19:39:54
141阅读
Ubuntu安装BCC 教程 官方文档 安装 这里官方文档中首先讲到的是二进制文件的安装,直接通过apt进行安装 sudo apt-get install bpfcc-tools linux-headers-$(uname -r) 这里安装好后,对于/usr/sbin目录下的部分工具,使用时会报编译 ...
转载 2021-08-01 16:14:00
1827阅读
2评论
  • 1
  • 2
  • 3
  • 4
  • 5