===== Compiling on Fedora38 =====
dnf -y install git flex python-devel make tar bison gcc-c++ \
perl-ExtUtils-MakeMaker.noarch gcc-c++ python3-devel rpm-build \
initscripts ncurses-devel readline-devel zlib-devel \
systemd-devel autoconf libselinux-devel libuv-devel \
setools-console libsemanage-devel selinux-policy-devel
# ensure pcp user/group exist.
# 'make install' relies on this
useradd pcp
mkdir /pcpserv && cd /pcpserv
git clone https://github.com/performancecopilot/pcp
cd pcp
./Makepkgs
cd ./pcp-*/build/rpm
# remove existing pcp rpms
rpm -evh $(rpm -qa|grep pcp|grep -v grafana|xargs) \
perl-PCP-PMDA
# install minimum packages
dnf localinstall pcp-6*$(uname -m).rpm pcp-libs-6.*rpm \
pcp-conf-6.*rpm pcp-selinux-6.*rpm pcp-pmda-denki-6.*rpm \
pcp-zeroconf-6.*.rpm pcp-system-tools-6.*.rpm \
pcp-doc-6.*noarch.rpm pcp-pmda-dm-6.*rpm \
pcp-pmda-nfsclient-6.*rpm pcp-pmda-openmetrics-6.*rpm \
python3-pcp-6.*rpm
# optional: install devel packages
dnf localinstall pcp-devel-6.*.rpm \
pcp-libs-devel-6.*.rpm \
pcp-testsuite-6*.rpm perl-PCP-PMDA-6*.rpm \
pcp-pmda*rpm pcp-debuginfo-6*.rpm
systemctl start pmcd
systemctl status pmcd
pminfo
===== Compiling on RHEL7 =====
* install rhel7.5 x86_64
# activate base and optional channels
yum install \
https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
yum -y install git flex python-devel make tar \
bison perl-ExtUtils-MakeMaker.noarch gcc-c++
mkdir /pcpserv && cd /pcpserv
git clone https://github.com/performancecopilot/pcp
cd pcp
./Makepkgs
cd ./pcp-*/build/tar
./preinstall
here=`pwd`
( cd /; tar xpf $here/pcp-*-[0-9]*.tar.gz )
./postinstall
systemctl start pmcd
systemctl status pmcd
pminfo
# ./configure --prefix=/
# make
# make install
===== Compiling on RHEL8 =====
* install RHEL8.2
yum -y install git flex make tar \
bison perl-ExtUtils-MakeMaker.noarch gcc-c++ \
python3-devel rpm-build initscripts ncurses-devel \
readline-devel zlib-devel autoconf systemd-devel
# libuv-devel needs to be installed, so pmproxy can
# communicate with grafana.
# ensure pcp user/group exist.
# 'make install' relies on this
useradd pcp
mkdir /pcpserv && cd /pcpserv
git clone https://github.com/performancecopilot/pcp
cd pcp
./Makepkgs
cd ./pcp-6*/build/rpm
# install rpms, i.e. for pcp-6
dnf localinstall pcp-6.*.x86_64.rpm pcp-libs-6.*.x86_64.rpm \
pcp-conf-6.*.x86_64.rpm pcp-zeroconf-6.*.x86_64.rpm \
pcp-doc-6.*.noarch.rpm pcp-pmda-dm-6.*.x86_64.rpm \
pcp-pmda-nfsclient-6.*.x86_64.rpm pcp-system-tools-6.*.x86_64.rpm \
pcp-pmda-netcheck-6.*.x86_64.rpm python3-pcp-6.*.x86_64.rpm \
pcp-pmda-openmetrics-6.*.x86_64.rpm
systemctl start pmcd
systemctl status pmcd
pminfo
===== Running the qa suite =====
# install required packages
yum localinstall pcp-testsuite-6*rpm pcp-pmda*rpm pcp-debuginfo*rpm \
perl-PCP-PMDA-6*rpm
# preparing for QA tests
useradd -m pcpqa
echo 'pcpqa ALL=(ALL) NOPASSWD: ALL' >/etc/sudoers.d/pcpqa
mkdir ~pcpqa/.ssh
cp /root/.ssh/authorized_keys ~pcpqa/.ssh
chown -R pcpqa:pcpqa ~pcpqa/.ssh /var/lib/pcp/testsuite
# now change into user pcpqa..
su - pcpqa
cd /var/lib/pcp/testsuite
./chk.setup
admin/check-vm
./check 000
$ cat ~/.gitconfig
[user]
email = chorn@
name = Christian Horn
[push]
default = simple
===== Own branches =====
# checkout own branch
git clone -b fix-lmsensors-parser \
https://github.com/christianhorn/pcp.git fix-lmsensors-parser
# modify files
git commit .
git push
# pylint --output-format=colorized pmdalmsensors.python
# pylint --rcfile=/home/chris/Downloads/.pylintrc \
--output-format=colorized pmdalmsensors.python
===== Stripping down pmlogger metrics =====
You might just archive metrics with pmlogger for creating graphs with grafana, and not want to use them for debugging. In that case, you could
* initially run pmlogger with the metrics suggested by pcp-zeroconf
* then create dashboard which show everything you need. While doing that, you might add metrics to the pmlogger config, so they get archived.
* once you are happy, you can use the dashboard json-code to understand which metrics you use, and create a new config which only contains _these_ metrics.
I used this workflow:
* 'sudo dnf -y install xclip'
* in your dashboard, go on the top to 'dashboard settings'
* click 'json model', right click the json code, click 'select all' and 'copy'
# then, in a terminal use this to store the dashboard json
xclip -o -selection clipboard >grafana.json
# lets now extract the sources
grep expr grafana.json | sed -e 's,.*": ",\t,' -e 's,".*,,' -e 's,{.*,,'
Some values from there should be collapsed, for example
lmsensors.acpitz_acpi_0.temp1
lmsensors.coretemp_isa_0000.core_0
lmsensors.coretemp_isa_0000.core_1
into
lmsensors
..which will capture all the deeper metrics.
# Then use the metrics in file
# /var/lib/pcp/config/pmlogger/config.default . For example:
######
log advisory on default {
lmsensors
kernel.all.load
mem.util.cached
mem.physmem
mem.util.free
kernel.percpu.cpu.user
kernel.percpu.cpu.sys
kernel.all.pswitch
kernel.all.runnable
mem.util.used
mem.util.cached
mem.util.free
mem.vmstat.pgfault
mem.vmstat.pgmajfault
network.interface.in.bytes
network.interface.out.bytes
network.interface.in.drops
network.interface.out.drops
network.interface.in.packets
network.interface.in.packets
network.tcp.timeouts
network.tcp.listenoverflows
network.tcp.listendrops
network.tcp.retranssegs
network.tcp.fastretrans
network.tcp.slowstartretrans
network.tcp.synretrans
disk.dev.read_rawactive
disk.dev.write_rawactive
disk.dev.read
disk.dev.write
disk.dev.read_bytes
disk.dev.write_bytes
disk.dev.avactive
}
[access]
disallow .* : all;
disallow :* : all;
allow local:* : enquire;
###
systemctl restart pmlogger
===== Hints =====
* [[https://hub.github.com/#developer|Will use 'hub' for next pull request]]
* pmproxy debugging
# Grafana shows only 1 week old data, but archive files with 2 weeks old data exist
# looking at grafana query:
http://127.0.0.1:3000/api/datasources/proxy/11/series/values?series=ed1fee80843
4b8c265752bd81ab18b4d8a45802c&start=1588916484&finish=1588916666&interval=0.01
# performing query manually
curl 'http://localhost:44322/series/values?series=ed1fee808434b8c265752bd81ab18b4d8a45802c&start=1588916484&finish=1588916666&interval=0.01'
[{"series":"ed1fee808434b8c265752bd81ab18b4d8a45802c","instance":"a2b4c26ae379f30881bfe0c82f6c30cc10d0934f","timestamp":1588916524035.758,"value":"4.284000e+00"}[..]
=> I always get "timestamp":1587801603901.84, and no newer timestamps.
Also querying for start=1000000000 does not change that
=> Verify with pmrep on commandline if older data is available:
pmrep -a 20200415.0 kernel.all.load -p -s 1000000000 \
-f '%Y-%m-%d %H:%M:%S'|head
k.a.load k.a.load k.a.load
1 minute 5 minute 15 minut
2020-04-15 00:10:07 N/A N/A N/A
2020-04-15 00:10:08 N/A N/A N/A
2020-04-15 00:10:09 N/A N/A N/A
2020-04-15 00:10:10 N/A N/A N/A
2020-04-15 00:10:11 0.070 0.140 0.160
2020-04-15 00:10:12 0.070 0.140 0.160
2020-04-15 00:10:13 0.070 0.140 0.160
=> Data is there..