Readme.md 2.83 KB
Newer Older
liming6's avatar
liming6 committed
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
# Readme

这是一个类似Prometheus的监控工具,目前的想法是采集服务器上使用GPU/DCU的进程信息
主要包含两部分:

- 探针:部署在每个需要被监控的服务器上,暴露服务器中使用GPU/DCU进程的相关信息
- 收集器:收集各个探针的数据,并记录下来,且支持查询

写这个工具的目的是希望能快速快速找到哪些节点的GPU/DCU是空的,没有被使用的。
nvidia-dcgm-exporter和dcu-exporter收集的是一些数字指标信息,不能直观的体现GPU/DCU是否被占用

***本工具的另一个目的是希望能追查到进程的真实用户,以便统计每个人的GPU使用率***

## 关键组件选型

数据库

- prometheus/tsdb

序列化方法

- json
- CBOR

## 如何确定谁使用了显卡、加速卡

编写本工具的一个目的是想了解是哪些Linux系统用户在使用显卡

对于曙光环境,使用显卡的方式主要有两种

- docker容器
- 主机进程使用

34
对于docker容器,我们认为谁创建了容器,那么该容器中的进程使用了显卡,就认为是容器的创建者使用了显卡
liming6's avatar
liming6 committed
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
对于主机进程,那就是进程的用户使用了显卡

复杂情况:

- sudo转换用户执行
- su转换用户

思路或方法:

- docker
  - 使用audit审计docker命令、docker.sock文件
  - 使用空壳脚本记录
  - 代理和转发docker.sock文件
  - 使用falco审计工具
  - 监听/var/run/docker.sock
- 主机进程
  - 直接审计使用显卡设备的进程

### docker监控

audit方案
```shell
auditctl -w /usr/bin/docker -p x -k docker-cmd
auditctl -w /var/run/docker.sock -p rwxa -k docker-daemon

ausearch -k docker-daemon | aureport -f -i
```

空壳shell方案: 编写一个空壳脚本替代原本的docker命令,在执行实际docker命令前记录相关信息,以下是空壳脚本的内容
```shell
#!/bin/bash

REAL_SUFFIX='-real'
BASE_NAME=$(basename "$0")
REAL_CMD="${BASE_NAME}$REAL_SUFFIX"
LOG_FILE="/var/log/${BASE_NAME}-call.log"
[[ -f "$LOG_FILE" ]] || (touch "$LOG_FILE" && chmod 666 "$LOG_FILE")

# 记录调用信息
{
    TIMESTAMP=$(date +"%Y-%m-%d %H:%M:%S")
    echo "=== [${TIMESTAMP}] ==="
    echo "Command   : $0"
    echo "All args  : $*"
    echo "PID       : $$"
    echo "Parent PID: $PPID"
    PARENT_INFO=$(ps -fp $PPID)
    echo "Parent Info:"
    echo "$PARENT_INFO"
    echo "--- Environment ---"
    env
    echo "--- Environment ---"
    echo "----- Output -----"

} >> "$LOG_FILE"
(exec /usr/bin/"${REAL_CMD}" "$@") | tee "$LOG_FILE"
{
    echo "----- Output -----"
    echo ""
} >> "$LOG_FILE"
```

falco方案与audit的方案类似,本质上都是使用eBPF抓包,这里省略

### 针对sudo和su的方法

- 记录进程树
- 检查进程信息 /proc/\<PID\>/{status,sessionid,stat,environment}
- 使用who或last命令
- audit审计
- 使用pam会话记录
- acct记账