目录
一、实验
1.环境
2. proc目录
3. sys目录
4.netlink
5.tracepoint
6.kprobes
7. uprobes
二、问题
1.systemd如何查看启动时间
2.CentOS与Ubuntu如何安装bpftrace
3.snap有哪些常用的命令
4.snap如何安装store
5.如何列出使用bpftrace的OpenJDK USDT探针
一、实验
1.环境
(1)主机
表1-1 主机
主机 | 架构 | 组件 | IP | 备注 |
prometheus | 监测 系统 | prometheus、node_exporter | 192.168.204.18 | |
grafana | 监测GUI | grafana | 192.168.204.19 | |
agent | 监测 主机 | node_exporter | 192.168.204.20 |
(2)Linux监测来源表
表1-2 Linux监测来源表
序号 | 类型 | 来源 |
1 | 进程级计数器 | /proc |
2 | 系统级计数器 | /proc、/sys |
3 | 设备配置与计数器 | /sys |
4 | Cgroup统计 | /sys/fs/cgroup |
5 | 进程级跟踪 | ptrace |
6 | 硬件计数器( PMC) | perf_event |
7 | 网络统计 | netlink |
8 | 捕获网络数据包 | libpcap |
9 | 线程级延时指标 | 延时审计 |
10 | 系统级跟踪 | 函数剂析(Ftrace)、 tracepoint、 软件事件、kprobes、 uprobes、 pert_event |
2. proc目录
(1) 进程级别统计
① 查看proc目录,提供了各种文件用于每个进程的统计
[root@prometheus proc]# ls -F /proc/
② 查看PID 1
[root@prometheus proc]# ls -F /proc/1
(2) 系统级别统计
[root@prometheus proc]# ls -Fd [a-z]*
(3)CPU统计准确性
[root@prometheus proc]# cat /proc/stat
(4)文件内容(查看内存信息)
[root@prometheus proc]# cat /proc/meminfo [root@prometheus proc]# grep Mem /proc/meminfo
3. sys目录
(1)查看CPU0 文件列表
[root@prometheus proc]# find /sys/devices/system/cpu/cpu0 -type f
(2)查看CPU0 硬件缓存信息
[root@prometheus proc]# grep . /sys/devices/system/cpu/cpu0/cache/index*/level[root@prometheus proc]# grep . /sys/devices/system/cpu/cpu0/cache/index*/size
分析:
CPU0有2个L1缓存,48K和32K,还有1个2MB的L2缓存,以及一个36MB的L3缓存
4.netlink
(1) 查看套接字统计工具ss
[root@prometheus proc]# strace ss
分析:
NETLINK_SOCK_DIAG组打开了一个AF_NETLINK套接字,NETLINK_SOCK_DIAG返回套接字的信息。
5.tracepoint
(1)tracepoint
① 搜索perf
[root@prometheus proc]# yum search perf
② 安装perf
[root@prometheus proc]# yum install perf -y
③ 命令列出可用的tracepoint (数量1000+,只显示开头和结尾)
[root@prometheus proc]# perf list tracepoint
④ 命令跟踪指定事件并实时打印
[root@prometheus proc]# perf trace -e block:block_rq_issue
(2)tracepoint参数与格式字符串
①查看事件的额外上下文
[root@prometheus proc]# cat /sys/kernel/debug/tracing/events/block/block_rq_issue/format
分析:
最后打印信息位perf脚本输出的格式字符串例子,最后一行显示了字符串的格式与参数。
6.kprobes
(1) bpftrace列出探针
① 添加repo
[root@prometheus proc]# curl https://repos.baslab.org/rhel/7/bpftools/bpftools.repo --output /etc/yum.repos.d/bpftools.repo
② 安装
[root@prometheus proc]# yum install bpftrace bpftrace-tools bpftrace-doc bcc-static bcc-tools
③ 列出bpftrace支持的nanosleep函数相关的所有探针
[root@prometheus proc]# bpftrace -l '*nanosleep'
7. uprobes
(1) 列出bash shell 的uprobes函数入口位置(1000+)
二、问题
1.systemd如何查看启动时间
(1)功能
systemd是常用的Linux服务管理器,包括依赖感知服务启动和服务时间统计等功能。systemd的时间统计可以显示出调整的方向。
(2)报告总体启动时间
[root@prometheus proc]# systemd-analyze
(3)子命令查看更多信息(显示导致延迟的各步序列)
[root@prometheus proc]# systemd-analyze critical-chain
分析:
最慢的服务是postfix.service,需要1.515秒才启动。
2.CentOS与Ubuntu如何安装bpftrace
(1)CentOS安装
1)添加仓库
curl https://repos.baslab.org/rhel/7/bpftools/bpftools.repo --output /etc/yum.repos.d/bpftools.repo 2)安装
yum install bpftrace bpftrace-tools bpftrace-doc bcc-static bcc-tools
(2)Ubuntu安装
1)适用于ubuntu19.04及更高版本
sudo apt-get install -y bpftrace2)适用于ubuntu16.04及更高版本
sudo snap install --devmode bpftrace sudo snap connect bpftrace:system-trace
3.snap有哪些常用的命令
(1)命令
1)切换软件仓库
#扩展
snap refresh hugo --channel=extended
#稳定
snap refresh hugo --channel=stable3)更新一个snap包,
如果你后面不加包的名字的话那就是更新所有的snap包
sudo snap refresh <snap name>4)列出已经安装的snap包
sudo snap list5) 搜索要安装的snap包
sudo snap find <text to search>6) 安装一个snap包
sudo snap install <snap name>7) 指定 edge通道 安装软件
sudo snap install <snap name> --edge8) 把一个包还原到以前安装的版本
snap revert <snap name>9) 更新snap
snap install core10) 删除一个snap包
sudo snap remove <snap name>
4.snap如何安装store
(1)安装依赖
[root@prometheus proc]# yum install epel-release
(2)安装snapd
[root@prometheus proc]# yum install snapd
(3) 自启动与软链接
[root@prometheus proc]# sudo systemctl enable --now snapd.socket[root@prometheus proc]# sudo ln -s /var/lib/snapd/snap /snap
(4)安装store
[root@prometheus proc]# sudo snap install snap-store
(5) 完成
(6)查看列表
[root@prometheus proc]# sudo snap list
(7)更新仓库
[root@prometheus proc]# sudo snap install hugo --edge[root@prometheus proc]# snap refresh hugo --channel=stable
(8)再次查看列表
[root@prometheus proc]# sudo snap list
5.如何列出使用bpftrace的OpenJDK USDT探针
(1)命令
bpftrace -lv 'usdt:/usr/lib/jvm/openjdk/libjvm.so:*'