diff --git a/debian/rules b/debian/rules index 884c11a13d04..138a231d760f 100755 --- a/debian/rules +++ b/debian/rules @@ -219,6 +219,7 @@ install: build find debian/opennms-common/usr/share/opennms/bin -type f -execdir chmod 755 {} \; mv debian/temp/etc/* debian/opennms-common/etc/opennms/ mv debian/temp/lib debian/opennms-common/usr/share/opennms/ + mv debian/temp/agent debian/opennms-common/usr/share/opennms/ install -d -m 755 debian/opennms-common/var/lib/opennms/xsds mv debian/temp/share/xsds/* debian/opennms-common/var/lib/opennms/xsds/ find debian/opennms-common/etc/opennms -type f -execdir chmod 644 {} \; diff --git a/opennms-base-assembly/pom.xml b/opennms-base-assembly/pom.xml index d4959b864d39..0d661b439a98 100644 --- a/opennms-base-assembly/pom.xml +++ b/opennms-base-assembly/pom.xml @@ -1013,6 +1013,11 @@ org.postgresql postgresql + + io.pyroscope + agent + ${pyroscopeVersion} + axis axis diff --git a/opennms-base-assembly/src/assembly/daemon.xml b/opennms-base-assembly/src/assembly/daemon.xml index 8203e854474c..024e96550565 100644 --- a/opennms-base-assembly/src/assembly/daemon.xml +++ b/opennms-base-assembly/src/assembly/daemon.xml @@ -111,6 +111,7 @@ org.opennms:opennms-jasperstudio-extension org.springframework:* org.slf4j:slf4j-jdk14 + io.pyroscope:agent *:pom @@ -123,5 +124,14 @@ org.apache.httpcomponents:httpasyncclient-osgi:jar:${httpasyncclientVersion} + + false + pyroscope-agent.jar + agent + true + + io.pyroscope:agent:jar + + diff --git a/opennms-base-assembly/src/main/filtered/bin/opennms b/opennms-base-assembly/src/main/filtered/bin/opennms index a6cb5726be53..b1848070b5f6 100755 --- a/opennms-base-assembly/src/main/filtered/bin/opennms +++ b/opennms-base-assembly/src/main/filtered/bin/opennms @@ -87,6 +87,9 @@ RUNJAVA_OPTIONS="" # when it cannot connect using the Attach API (automatically or by PID) JMX_URL="service:jmx:rmi:///jndi/rmi://127.0.0.1:1099/jmxrmi" +# Whether to enable the Pyroscope agent +PYROSCOPE_AGENT_ENABLED=0 + # The user that OpenNMS needs to run as. [ -z "$RUNAS" ] && RUNAS=opennms @@ -796,6 +799,14 @@ if [ -n "$JAVA_HEAP_SIZE" ] && [ "$JAVA_HEAP_SIZE" -gt 0 ]; then MANAGER_OPTIONS+=("-Xmx${JAVA_HEAP_SIZE}m") fi +# https://pyroscope.io/docs/java-tracing/#running-as-otel-java-instrumentation-extension +if [ -n "$PYROSCOPE_AGENT_ENABLED" ] && [ "$PYROSCOPE_AGENT_ENABLED" -gt 0 ]; then + export PYROSCOPE_APPLICATION_NAME="${PYROSCOPE_APPLICATION_NAME:=OpenNMS}" + export PYROSCOPE_SERVER_ADDRESS="${PYROSCOPE_SERVER_ADDRESS:=http://localhost:4040}" # so we don't get a warning + + MANAGER_OPTIONS+=("-javaagent:${OPENNMS_HOME}/agent/pyroscope-agent.jar") +fi + JAVA_VERSION="$("$OPENNMS_HOME/bin/runjava" -p -f 2> /dev/null)" JAVA_SHORT_VERSION="$(echo "$JAVA_VERSION" | cut -d. -f1)" if [ -z "$JAVA_SHORT_VERSION" ]; then diff --git a/pom.xml b/pom.xml index ffeb66d4173c..690dc68178e3 100644 --- a/pom.xml +++ b/pom.xml @@ -1764,6 +1764,7 @@ 2.3 0.31.0 0.34.0 + 0.10.2 1.8.0 2.3.2 2.0.0 diff --git a/tools/packages/opennms/opennms.spec b/tools/packages/opennms/opennms.spec index ea33d2736bdd..e7cda03a2700 100644 --- a/tools/packages/opennms/opennms.spec +++ b/tools/packages/opennms/opennms.spec @@ -668,6 +668,9 @@ find %{buildroot}%{sharedir} ! -type d | \ grep -v 'tca-datacollection-config.xml' | \ grep -v 'juniper-tca' | \ sort >> %{_tmppath}/files.main +find %{buildroot}%{instprefix}/agent ! -type d | \ + sed -e "s|^%{buildroot}|%attr(755,opennms,opennms) |" | \ + sort >> %{_tmppath}/files.main find %{buildroot}%{instprefix}/contrib ! -type d | \ sed -e "s|^%{buildroot}|%attr(755,opennms,opennms) |" | \ sort >> %{_tmppath}/files.main @@ -690,8 +693,9 @@ find %{buildroot}%{instprefix}/system ! -type d | \ sed -e "s|^%{buildroot}|%attr(755,opennms,opennms) |" | \ grep -v 'jira-' | \ sort >> %{_tmppath}/files.main -# Put the etc, lib, and system subdirectories into the package -find %{buildroot}%{instprefix}/bin \ +# Put the agent, bin, etc, lib, and system subdirectories into the package +find %{buildroot}%{instprefix}/agent \ + %{buildroot}%{instprefix}/bin \ %{buildroot}%{instprefix}/contrib \ %{buildroot}%{instprefix}/etc \ %{buildroot}%{instprefix}/lib \