编译Intel PCM¶
编译¶
clone CPM代码仓库以及子模块:
git clone --recursive https://github.com/opcm/pcm.git
# 或者clone之后执行 git submodule update --init --recursive
mkdir build
cd build
cmake ..
# 使用 --parallel 参数可以加快编译
cmake --build . --parallel
# 所有编译后的二进制执行文件在 build/bin 目录下,这里执行 make install 会安装到 /usr/local/sbin 目录
sudo make install
在CentOS 7,2平台编译¶
生产环境使用了古老的(类)CentOS 7.2环境,在这个旧OS中编译会比较折腾(无力吐糟)
默认CentOS 7使用的CMaker版本是 2.8.12.2 ,CPM编译时会提示要求 CMake 3.5或更高版本,所以要从 cmake官方下载 最新版本自己 在CentOS 7环境升级CMake
Intel PCM使用了 simdjson(Github) ,而
simdjson
需要使用现代化的编译器(LLVM clang 6 or better, GNU GCC 7.4 or better, Xcode 11 or better) ,所以需要 升级CentOS 7 GCC编译步骤同上
文件打包¶
为了方便安装,根据 make install
列出文件,记录到 files.txt
中,然后执行以下命令打包成 cpm.tar.gz
(参考 Tar archiving that takes input from a list of files ,此外同时打包 pcm-exporter :Intel Performance Counter Monitor (Intel PCM) Prometheus exporter 的 /etc/systemd/system/pcm-exporter.service
):
# 这里参数 -T 表示 --files-from 可以从文件中读取需要打包的文件列表
tar -cvf pcm.tar -T files.txt
然后在目标服务器上只需要执行以下命令就能快速运行 pcm-exporter
服务:
tar xfz pcm.tar.gz
systemctl daemon-reload
systemctl enable --now pcm-exporter
也可以通过类似 Homebrew 方法执行脚本安装:
curl https://onesre.cloud-atlas.io/download/pcm.tar.gz -o /pcm.tar.gz
cd /
tar xfz pcm.tar.gz
systemctl daemon-reload
systemctl enable --now pcm-exporter
rm /pcm.tar.gz
/bin/bash -c "$(curl -fsSL https://onesre.cloud-atlas.io/download/install_pcm.sh)"
问题排查¶
遇到一个问题,使用 pcm-exporter :Intel Performance Counter Monitor (Intel PCM) Prometheus exporter 中 Systemd进程管理器 配置方式启动 pcm-sensor-server
失败:
● pcm-exporter.service - pcm-exporter
Loaded: loaded (/etc/systemd/system/pcm-exporter.service; disabled; vendor preset: disabled)
Active: activating (auto-restart) (Result: exit-code) since Sun 2023-07-16 16:00:41 CST; 864ms ago
Process: 373807 ExecStart=/usr/local/sbin/pcm-sensor-server -p 9738 --real-time (code=exited, status=6)
Main PID: 373807 (code=exited, status=6)
Jul 16 16:00:41 sqaappxdn006002124157.sa127 systemd[1]: Unit pcm-exporter.service entered failed state.
Jul 16 16:00:41 sqaappxdn006002124157.sa127 systemd[1]: pcm-exporter.service failed.
我发现是参数 --real-time
导致,原因未明,通过取消该参数恢复