首页 文章 精选 留言 我的

精选列表

搜索[数据库监控],共10000篇文章
优秀的个人博客,低调大师

eBPF监控工具bcc系列九bcc Python

接下来看下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,可以指定进程ID,路径。 2. 事件 2.1 attach_kprobe 语法:BPF.attach_kprobe(event="event", fn_name="name") 使用函数入口的内核动态跟踪,关联C函数name和内核函数event()。 2.2 attach_kretprobe 语法:BPF.attach_kretprobe(event="event", fn_name="name") 关联C函数name和内核函数event,在内核函数返回的时候调用函数name. 2.3 attach_tracepoint 语法:BPF.attach_tracepoint(tp="tracepoint", fn_name="name") 关联C语言定义的BPF函数和内核的tracepoint。也可以使用TRACEPOINT_PROBE宏,使用该宏可以使用高级的自申明的args结构体包含了tracepoint参数。如果,使用attach_tracepoint,参数需要在BPF程序中声明。 2.4 attach_uprobe 语法:BPF.attach_uprobe(name="location", sym="symbol", fn_name="name") 将在location中的函数事件symbol,关联到C定义的函数。当symbol调用时候回调用name函数。 例如: b.attach_uprobe(name="c", sym="strlen", fn_name="count") 2.5 attach_uretprobe 语法:BPF.attach_uretprobe(name="location", sym="symbol", fn_name="name") 同attach_uprobe,不过是在函数返回时候调用name函数。 2.6 USDT.enable_probe 语法:USDT.enable_probe(probe=probe, fn_name=name) 将BPF的C函数附加到USDT探针上。 例如: u = USDT(pid=int(pid)) u.enable_probe(probe="http__server__request", fn_name="do_trace") 查看二进制文件是否有USDT探针,可以使用如下命令检测stap调试段: #readelf –n binary 3. 调试输出 3.1 trace_print 语法:BPF.trace_print(fmt="fields") 持续读取全局共享的/sys/kernel/debug/tracing/trace_pipe文件并输出。这个文件可以被BPF 和bpf_trace_printk()函数写入。 例如: # print trace_pipe output as-is: b.trace_print() # print PID and message: b.trace_print(fmt="{1} {5}") 3.2 trace_fields 语法:BPF.trace_fields(nonblocking=False) 从全局共享文件/sys/kernel/debug/tracing/trace_pipe文件中读取一行并返回域。参数表示在等待写入的时候是否blocking. 4. 输出 4.1 perf_buffer_poll 语法:BPF.perf_buffer_poll() 从perf ring buffers等待数据,有数据会调用open_perf_buffer指定的回调函数。 例如: # loop with callback to print_event b["events"].open_perf_buffer(print_event) while 1: b.perf_buffer_poll() 5. 映射 5.1 get_table 返回表对象。此函数已经淘汰,因为BFP可以将表作为items来读取,例如BFP[name]. 5.2 open_perf_buffer 语法:table.open_perf_buffers(callback, page_cnt=N, lost_cb=None) 当perf ring buffer中数据可用的时候,调用callback函数。其中table是定义在BPF的。这个是从内核到用户层传递perf event数据的建议方式。 perf ring buffer的大小由page_cnt参数制定,建议是页的偶数倍,默认是8。如果callback处理的不够快,有些数据会丢失掉。当有丢失数据到时候会调用lost_cb。如果lost_cb定义为none,那么会打印一行信息到stderr。 5.3 items 返回表中keys的数组。可以通过BPF_HASH来获取,迭代。 5.4 values 返回表中values数组。 5.5 clear 清除表。 5.6 print_log2_hist 语法:table.print_log2_hist(val_type="value", section_header="Bucket ptr", section_print_fn=None) 使用ASCII以log2直方图打印表。表必须用log2方式存储,这个可以通过bpf_log2()。 val_type可选的,表示列头。 section_header:如果直方图有第二个键,多个表会被打印,section_header会被作为头描述。 如果section_print_fn不是none,传递bucket值。 5.7 print_linear_hist 语法:table.print_linear_hist(val_type="value", section_header="Bucket ptr", section_print_fn=None) 以ASCII方式打印表的线性直方图。 val_type参数可选的,列的头 section_header:如果直方图有第二个键,多个图会打印,section_header会被作为头描述符。 section_print_fn:如果该参数不会NONE,会被传递bucket值。 6. 帮助 6.1 ksym 语法:BPF.ksym(addr) 将一个内核内存地址转成一个内核函数名字。 6.2 ksymname 语法:BPF.ksymname(name) 将一个内核名字转换成一个地址,是ksym的逆向函数。 6.3 sym 语法:BPF.sym(addr, pid, show_module=False, show_offset=False) 为进程转换一个内存地址位函数名字。 参数show_module,show_offset参数控制是否显示symbol符号所在的模块,符号偏移。 6.4 num_open_kprobes 返回打开的k[ret]probes数量。在event_re场景中有用。 7. 关于BPF Errors BPF中所有内存读取都要通过bpf_probe_read()函数将内存复制到BPF栈。如果直接读取内存,会出现Invalid mem access。 参考文件: 内核中Documentation/networking/filter.txt

优秀的个人博客,低调大师

批量生成监控配置文件

for host in 253 252 251 250 249 do cfgmaker --global "HtmlDir: /var/www/mrtg" \ --global "ImageDir: /var/www/mrtg" \ --global "LogDir: /var/lib/mrtg" \ --global "ThreshDir: /var/lib/mrtg" \ --global "Options[_]: growright,bits" \ \ --ifref=name --ifdesc=descr \ --subdirs=Cisco-Switch-2960G-$host \ public@172.16.0.$host \ \ > /etc/mrtg/switch-2960-$host.cfg indexmaker --output=/var/www/mrtg/switch-2960-$host.html /etc/mrtg/switch-2960-$host.cfg done Please enable JavaScript to view the <a href="http://disqus.com/?ref_noscript">comments powered by Disqus.</a>comments powered by Disqus 原文出处:Netkiller 系列 手札 本文作者:陈景峯 转载请与作者联系,同时请务必标明文章原始出处和作者信息及本声明。

资源下载

更多资源
腾讯云软件源

腾讯云软件源

为解决软件依赖安装时官方源访问速度慢的问题,腾讯云为一些软件搭建了缓存服务。您可以通过使用腾讯云软件源站来提升依赖包的安装速度。为了方便用户自由搭建服务架构,目前腾讯云软件源站支持公网访问和内网访问。

Spring

Spring

Spring框架(Spring Framework)是由Rod Johnson于2002年提出的开源Java企业级应用框架,旨在通过使用JavaBean替代传统EJB实现方式降低企业级编程开发的复杂性。该框架基于简单性、可测试性和松耦合性设计理念,提供核心容器、应用上下文、数据访问集成等模块,支持整合Hibernate、Struts等第三方框架,其适用范围不仅限于服务器端开发,绝大多数Java应用均可从中受益。

Rocky Linux

Rocky Linux

Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。

Sublime Text

Sublime Text

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。

用户登录
用户注册