Skip to content

pmdaopentelemetry: new pmda for opentelemetry metrics #2197

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 1 commit into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions build/rpm/GNUmakefile
Original file line number Diff line number Diff line change
Expand Up @@ -76,6 +76,7 @@ pcp.spec: pcp.spec.in
-e's|@pmda_infiniband@|$(PMDA_INFINIBAND)|g' \
-e's|@pmda_perfevent@|$(PMDA_PERFEVENT)|g' \
-e's|@pmda_openmetrics@|$(PMDA_OPENMETRICS)|g' \
-e's|@pmda_opentelemetry@|$(PMDA_OPENTELEMETRY)|g' \
-e's|@pmda_libvirt@|$(PMDA_LIBVIRT)|g' \
-e's|@pmda_lio@|$(PMDA_LIO)|g' \
-e's|@pmda_json@|$(PMDA_JSON)|g' \
Expand Down
28 changes: 27 additions & 1 deletion build/rpm/pcp.spec.in
Original file line number Diff line number Diff line change
Expand Up @@ -1721,6 +1721,23 @@ extracting metrics from OpenMetrics (https://openmetrics.io/) endpoints.
#end pcp-pmda-openmetrics
%endif

%if "@pmda_opentelemetry@" == "true"
#
# pcp-pmda-opentelemetry
#
%package pmda-opentelemetry
License: GPL-2.0-or-later
Summary: Performance Co-Pilot (PCP) metrics from OpenTelemetry endpoints
URL: https://pcp.io
Requires: pcp = @package_version@ pcp-libs = @package_version@
Requires: python3-pcp = @package_version@
Requires: python3-requests
%description pmda-opentelemetry
This package contains the PCP Performance Metrics Domain Agent (PMDA) for
extracting metrics from OpenTelemetry (https://opentelemetry.io//) endpoints.
#end pcp-pmda-opentelemetry
%endif

%if "@pmda_json@" == "true"
#
# pcp-pmda-json
Expand Down Expand Up @@ -2260,6 +2277,7 @@ basic_manifest | keep '(etc/pcp|pmdas)/nginx(/|$)' >pcp-pmda-nginx-files
basic_manifest | keep '(etc/pcp|pmdas)/nutcracker(/|$)' >pcp-pmda-nutcracker-files
basic_manifest | keep '(etc/pcp|pmdas)/nvidia(/|$)' >pcp-pmda-nvidia-files
basic_manifest | keep '(etc/pcp|pmdas)/openmetrics(/|$)' >pcp-pmda-openmetrics-files
basic_manifest | keep '(etc/pcp|pmdas)/opentelemetry(/|$)' >pcp-pmda-opentelemetry-files
basic_manifest | keep '(etc/pcp|pmdas|pmieconf)/openvswitch(/|$)' >pcp-pmda-openvswitch-files
basic_manifest | keep '(etc/pcp|pmdas)/oracle(/|$)' >pcp-pmda-oracle-files
basic_manifest | keep '(etc/pcp|pmdas)/pdns(/|$)' >pcp-pmda-pdns-files
Expand Down Expand Up @@ -2306,7 +2324,7 @@ for pmda_package in \
mailq memcache mic mounts mongodb mssql mysql \
named netcheck netfilter news nfsclient nginx \
nutcracker nvidia \
openmetrics openvswitch oracle \
openmetrics opentelemetry openvswitch oracle \
pdns perfevent podman postfix postgresql \
rabbitmq redis resctrl rocestat roomtemp rsyslog \
samba sendmail shping slurm smart snmp \
Expand Down Expand Up @@ -2560,6 +2578,11 @@ done
%{pmda_remove "$1" "openmetrics"}
%endif

%if "@pmda_opentelemetry@" == "true"
%preun pmda-opentelemetry
%{pmda_remove "$1" "opentelemetry"}
%endif

%if "@pmda_nginx@" == "true"
%preun pmda-nginx
%{pmda_remove "$1" "nginx"}
Expand Down Expand Up @@ -3109,6 +3132,9 @@ fi
%files pmda-openmetrics -f pcp-pmda-openmetrics-files.rpm
%endif

%if "@pmda_opentelemetry@" == "true"
%files pmda-opentelemetry -f pcp-pmda-opentelemetry-files.rpm
%endif
%files pmda-apache -f pcp-pmda-apache-files.rpm

%if "@pmda_amdgpu@" == "true"
Expand Down
25 changes: 24 additions & 1 deletion build/rpm/redhat.spec
Original file line number Diff line number Diff line change
Expand Up @@ -1713,6 +1713,22 @@ This package contains the PCP Performance Metrics Domain Agent (PMDA) for
extracting metrics from OpenMetrics (https://openmetrics.io/) endpoints.
#end pcp-pmda-openmetrics

#
# pcp-pmda-opentelemetry
#
%package pmda-opentelemetry
License: GPL-2.0-or-later
Summary: Performance Co-Pilot (PCP) metrics from OpenTelemetry endpoints
URL: https://pcp.io
Requires: pcp = %{version}-%{release} pcp-libs = %{version}-%{release}
Requires: python3-pcp
Requires: python3-requests
BuildRequires: python3-requests
%description pmda-opentelemetry
This package contains the PCP Performance Metrics Domain Agent (PMDA) for
extracting metrics from OpenTelemetry (https://opentelemetry.io/) endpoints.
#end pcp-pmda-opentelemetry

#
# pcp-pmda-lmsensors
#
Expand Down Expand Up @@ -2470,6 +2486,7 @@ basic_manifest | keep '(etc/pcp|pmdas)/nginx(/|$)' >pcp-pmda-nginx-files
basic_manifest | keep '(etc/pcp|pmdas)/nutcracker(/|$)' >pcp-pmda-nutcracker-files
basic_manifest | keep '(etc/pcp|pmdas)/nvidia(/|$)' >pcp-pmda-nvidia-files
basic_manifest | keep '(etc/pcp|pmdas)/openmetrics(/|$)' >pcp-pmda-openmetrics-files
basic_manifest | keep '(etc/pcp|pmdas)/opentelemetry(/|$)' >pcp-pmda-opentelemetry-files
basic_manifest | keep '(etc/pcp|pmdas|pmieconf)/openvswitch(/|$)' >pcp-pmda-openvswitch-files
basic_manifest | keep '(etc/pcp|pmdas)/oracle(/|$)' >pcp-pmda-oracle-files
basic_manifest | keep '(etc/pcp|pmdas)/pdns(/|$)' >pcp-pmda-pdns-files
Expand Down Expand Up @@ -2517,7 +2534,7 @@ for pmda_package in \
mailq memcache mic mounts mongodb mssql mysql \
named netcheck netfilter news nfsclient nginx \
nutcracker nvidia \
openmetrics openvswitch oracle \
openmetrics opentelemetry openvswitch oracle \
pdns perfevent podman postfix postgresql \
rabbitmq redis resctrl rocestat roomtemp rpm rsyslog \
samba sendmail shping slurm smart snmp \
Expand Down Expand Up @@ -2803,6 +2820,9 @@ exit 0
%preun pmda-openmetrics
%{pmda_remove "$1" "openmetrics"}

%preun pmda-opentelemetry
%{pmda_remove "$1" "opentelemetry"}

%preun pmda-lustre
%{pmda_remove "$1" "lustre"}

Expand Down Expand Up @@ -3296,6 +3316,9 @@ fi
%files pmda-openmetrics -f pcp-pmda-openmetrics-files.rpm
%endif

%files pmda-opentelemetry -f pcp-pmda-opentelemetry-files.rpm
%endif

%if !%{disable_amdgpu}
%files pmda-amdgpu -f pcp-pmda-amdgpu-files.rpm
%endif
Expand Down
14 changes: 14 additions & 0 deletions configure
Original file line number Diff line number Diff line change
Expand Up @@ -827,6 +827,7 @@ QMAKE
PMDA_RESCTRL
PMDA_LIBVIRT
PMDA_MSSQL
PMDA_OPENTELEMETRY
PMDA_OPENMETRICS
PMDA_LIO
PMDA_NUTCRACKER
Expand Down Expand Up @@ -9746,6 +9747,19 @@ if $pmda_openmetrics; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result:
printf "%s\n" "yes" >&6; }; else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
printf "%s\n" "no" >&6; }; fi

{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if the OpenTelemetry PMDA should be included" >&5
printf %s "checking if the OpenTelemetry PMDA should be included... " >&6; }
pmda_opentelemetry=false
if test "$have_python" = true
then
$have_python_requests && $have_python_OrderedDict && pmda_opentelemetry=true
fi
PMDA_OPENTELEMETRY=$pmda_opentelemetry

if $pmda_opentelemetry; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
printf "%s\n" "yes" >&6; }; else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
printf "%s\n" "no" >&6; }; fi

{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if the SQL Server PMDA should be included" >&5
printf %s "checking if the SQL Server PMDA should be included... " >&6; }
pmda_mssql=false
Expand Down
11 changes: 11 additions & 0 deletions configure.ac
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,8 @@ dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
dnl for more details.
dnl

configopts="`rpmbuild --eval '--exec-prefix=%{_exec_prefix} --bindir=%{_bindir} --sbindir=%{_sbindir} --sysconfdir=%{_sysconfdir} --datadir=%{_datadir} --includedir=%{_includedir} --libdir=%{_libdir} --libexecdir=%{_libexecdir} --localstatedir=%{_localstatedir} --sharedstatedir=%{_sharedstatedir} --mandir=%{_mandir} --prefix=%{_prefix}' 2>/dev/null`"

dnl unpacking check - this file must exist
AC_INIT
AC_CONFIG_SRCDIR([src/include/pcp/pmapi.h])
Expand Down Expand Up @@ -1532,6 +1534,15 @@ fi
AC_SUBST(PMDA_OPENMETRICS, $pmda_openmetrics)
if $pmda_openmetrics; then AC_MSG_RESULT(yes); else AC_MSG_RESULT(no); fi

AC_MSG_CHECKING([if the OpenTelemetry PMDA should be included])
pmda_opentelemetry=false
if test "$have_python" = true
then
$have_python_requests && $have_python_OrderedDict && pmda_opentelemetry=true
fi
AC_SUBST(PMDA_OPENTELEMETRY, $pmda_opentelemetry)
if $pmda_opentelemetry; then AC_MSG_RESULT(yes); else AC_MSG_RESULT(no); fi

AC_MSG_CHECKING([if the SQL Server PMDA should be included])
pmda_mssql=false
if test "$have_python" = true
Expand Down
98 changes: 98 additions & 0 deletions qa/1632
Original file line number Diff line number Diff line change
@@ -0,0 +1,98 @@
#!/bin/sh
# PCP QA Test No. 1632
# pmdaopentelemetry scalability testing
# specifically scaling number of metrics per nodes
#
# Copyright (c) 2025 Red Hat. All Rights Reserved.
#

seq=`basename $0`
echo "QA output created by $seq"

# get standard environment, filters and checks
. ./common.opentelemetry

_pmdaopentelemetry_check || _notrun "opentelemetry pmda and/or load generator not installed"
_have_python266 && _notrun "python load generator does not currently work with python 2.6.6"

status=1 # failure is the default!
$sudo rm -rf $tmp $tmp.* $seq.full
totalendpoints=5 #total queue to work through
endpoints=5 #opentelemetry endpoints
iterations=5
metrics=400
instances=10

_cleanup()
{
# load generator exits itself for this test

echo "=== endpoint log ===" >>$here/$seq.full
if [ -f $tmp.endpoint ]
then
cat $tmp.endpoint >>$here/$seq.full
else
echo "Error: endpoint log file is missing" >>$here/$seq.full
fi

cd $here
_pmdaopentelemetry_cleanup
$sudo rm -rf $tmp $tmp.*
}

_prepare_pmda opentelemetry
trap "_cleanup; exit \$status" 0 1 2 3 15
_stop_auto_restart pmcd

_pmdaopentelemetry_save_config
_pmdaopentelemetry_install

port=`_find_free_port 10000`
echo "port=$port" >>$here/$seq.full

$python $here/opentelemetry/opentelemetry_endpoint.python \
--port=$port \
--output=$PCP_PMDAS_DIR/opentelemetry/config.d/ \
--total $totalendpoints \
--endpoints $endpoints \
--metrics $metrics \
--instances $instances \
--limit $iterations >$tmp.endpoint 2>&1 &
pid=$!
if ! _pmdaopentelemetry_wait_for_metric opentelemetry.source4
then
status=1
exit
fi
if pminfo -b 1000000 -v `pminfo opentelemetry.source0 | LC_COLLATE=POSIX sort` > $tmp.info 2> $tmp.err
then
:
else
echo "... failed! ... here is the Install log ..."
cat $tmp.out
fi
cat $tmp.info $tmp.err

if pminfo -b 1000000 -ftd `pminfo opentelemetry.source1 | LC_COLLATE=POSIX sort` > $tmp.info 2>$tmp.err
then
echo "Fetch and desc opentelemetry metrics: success"
cat $tmp.info
else
echo "Fetch and desc opentelemetry metrics: failed"
cat $tmp.err
fi

for i in `seq 0 1 4`
do
pminfo -b 10000000 -tf `pminfo opentelemetry.source$i | LC_COLLATE=POSIX sort`
pminfo -b 10000000 -tf `pminfo opentelemetry.source$i | LC_COLLATE=POSIX sort`
pminfo -b 10000000 -tf `pminfo opentelemetry.source$i | LC_COLLATE=POSIX sort`
pminfo -b 10000000 -tf `pminfo opentelemetry.source$i | LC_COLLATE=POSIX sort`
sleep 0.5
done

_pmdaopentelemetry_remove

# success, all done
status=0
exit
Loading
Loading