Hello,
On 9 Jun 2021, at 07:14, Holger Sunke holger.sunke@posteo.de wrote:
Hello Michael,
the node exporter does not have a daemon mode. I could alternatively pip the output into a log file:
loadproc /usr/bin/node_exporter $OPTIONS >> /var/log/node_exporter.log 2>&1 &
Hmm, so there are two problems here:
* loadproc shows [ OK ] or [ ERROR ] so that the user knows if the program was started successfully. That is now being thrown away.
* Anything useful that node_exporter would print is also being thrown away
This seems to become a common thing that they remove the fork mode, maybe we need a special version of loadproc() that can handle that.
Should I add a third patch to do my fixes or adjust patch 1 & 2 each?
Let’s work on Go first and get that merged and then come back to this one.
We need to have a solution first and then implement it.
-Michael
Kind regards
Holger
Am 08.06.21 um 18:56 schrieb Michael Tremer:
Hello, This looks quite good, too. Just a minor detail below...
On 6 Jun 2021, at 18:48, Holger Sunke holger.sunke@posteo.de wrote:
config/node_exporter/node_exporter_options | 203 +++++++++++++++++++++ config/rootfiles/packages/node_exporter | 3 + lfs/node_exporter | 94 ++++++++++ make.sh | 1 + src/initscripts/packages/node_exporter | 42 +++++ src/paks/node_exporter/install.sh | 31 ++++ src/paks/node_exporter/uninstall.sh | 30 +++ src/paks/node_exporter/update.sh | 27 +++ 8 files changed, 431 insertions(+) create mode 100644 config/node_exporter/node_exporter_options create mode 100644 config/rootfiles/packages/node_exporter create mode 100644 lfs/node_exporter create mode 100644 src/initscripts/packages/node_exporter create mode 100644 src/paks/node_exporter/install.sh create mode 100644 src/paks/node_exporter/uninstall.sh create mode 100644 src/paks/node_exporter/update.sh
diff --git a/config/node_exporter/node_exporter_options b/config/node_exporter/node_exporter_options new file mode 100644 index 000000000..f614b1102 --- /dev/null +++ b/config/node_exporter/node_exporter_options @@ -0,0 +1,203 @@ +# Customize node_exporter startup command line flags by editing OPTIONS below:
+export OPTIONS="--web.listen-address=:9100"
+#Flags: +# -h, --help Show context-sensitive help (also try +# --help-long and --help-man). +# --collector.bcache.priorityStats +# Expose expensive priority stats. +# --collector.cpu.info Enables metric cpu_info +# --collector.cpu.info.flags-include=COLLECTOR.CPU.INFO.FLAGS-INCLUDE +# Filter the `flags` field in cpuInfo with a +# value that must be a regular expression +# --collector.cpu.info.bugs-include=COLLECTOR.CPU.INFO.BUGS-INCLUDE +# Filter the `bugs` field in cpuInfo with a value +# that must be a regular expression +# --collector.diskstats.ignored-devices="^(ram|loop|fd|(h|s|v|xv)d[a-z]|nvme\d+n\d+p)\d+$" +# Regexp of devices to ignore for diskstats. +# --collector.filesystem.ignored-mount-points="^/(dev|proc|sys|var/lib/docker/.+)($|/)" +# Regexp of mount points to ignore for filesystem +# collector. +# --collector.filesystem.ignored-fs-types="^(autofs|binfmt_misc|bpf|cgroup2?|configfs|debugfs|devpts|devtmpfs|fusectl|hugetlbfs|iso9660|mqueue|nsfs|overlay|proc|procfs|pstore|rpc_pipefs|securityfs|selinuxfs|squashfs|sysfs|tracefs)$" +# Regexp of filesystem types to ignore for +# filesystem collector. +# --collector.ipvs.backend-labels="local_address,local_port,remote_address,remote_port,proto,local_mark" +# Comma separated list for IPVS backend stats +# labels. +# --collector.netclass.ignored-devices="^$" +# Regexp of net devices to ignore for netclass +# collector. +# --collector.netdev.device-include=COLLECTOR.NETDEV.DEVICE-INCLUDE +# Regexp of net devices to include (mutually +# exclusive to device-exclude). +# --collector.netdev.device-exclude=COLLECTOR.NETDEV.DEVICE-EXCLUDE +# Regexp of net devices to exclude (mutually +# exclusive to device-include). +# --collector.netstat.fields="^(.*_(InErrors|InErrs)|Ip_Forwarding|Ip(6|Ext)_(InOctets|OutOctets)|Icmp6?_(InMsgs|OutMsgs)|TcpExt_(Listen.*|Syncookies.*|TCPSynRetrans)|Tcp_(ActiveOpens|InSegs|OutSegs|OutRsts|PassiveOpens|RetransSegs|CurrEstab)|Udp6?_(InDatagrams|OutDatagrams|NoPorts|RcvbufErrors|SndbufErrors))$" +# Regexp of fields to return for netstat +# collector. +# --collector.ntp.server="127.0.0.1" +# NTP server to use for ntp collector +# --collector.ntp.protocol-version=4 +# NTP protocol version +# --collector.ntp.server-is-local +# Certify that collector.ntp.server address is +# not a public ntp server +# --collector.ntp.ip-ttl=1 IP TTL to use while sending NTP query +# --collector.ntp.max-distance=3.46608s +# Max accumulated distance to the root +# --collector.ntp.local-offset-tolerance=1ms +# Offset between local clock and local ntpd time +# to tolerate +# --path.procfs="/proc" procfs mountpoint. +# --path.sysfs="/sys" sysfs mountpoint. +# --path.rootfs="/" rootfs mountpoint. +# --collector.perf.cpus="" List of CPUs from which perf metrics should be +# collected +# --collector.perf.tracepoint=COLLECTOR.PERF.TRACEPOINT ... +# perf tracepoint that should be collected +# --collector.powersupply.ignored-supplies="^$" +# Regexp of power supplies to ignore for +# powersupplyclass collector. +# --collector.qdisc.fixtures="" +# test fixtures to use for qdisc collector +# end-to-end testing +# --collector.runit.servicedir="/etc/service" +# Path to runit service directory. +# --collector.supervisord.url="http://localhost:9001/RPC2" +# XML RPC endpoint. +# --collector.systemd.unit-include=".+" +# Regexp of systemd units to include. Units must +# both match include and not match exclude to be +# included. +# --collector.systemd.unit-exclude=".+\.(automount|device|mount|scope|slice)" +# Regexp of systemd units to exclude. Units must +# both match include and not match exclude to be +# included. +# --collector.systemd.enable-task-metrics +# Enables service unit tasks metrics +# unit_tasks_current and unit_tasks_max +# --collector.systemd.enable-restarts-metrics +# Enables service unit metric +# service_restart_total +# --collector.systemd.enable-start-time-metrics +# Enables service unit metric +# unit_start_time_seconds +# --collector.textfile.directory="" +# Directory to read text files with metrics from. +# --collector.vmstat.fields="^(oom_kill|pgpg|pswp|pg.*fault).*" +# Regexp of fields to return for vmstat +# collector. +# --collector.wifi.fixtures="" +# test fixtures to use for wifi collector metrics +# --collector.arp Enable the arp collector (default: enabled). +# --collector.bcache Enable the bcache collector (default: enabled). +# --collector.bonding Enable the bonding collector (default: +# enabled). +# --collector.btrfs Enable the btrfs collector (default: enabled). +# --collector.buddyinfo Enable the buddyinfo collector (default: +# disabled). +# --collector.conntrack Enable the conntrack collector (default: +# enabled). +# --collector.cpu Enable the cpu collector (default: enabled). +# --collector.cpufreq Enable the cpufreq collector (default: +# enabled). +# --collector.diskstats Enable the diskstats collector (default: +# enabled). +# --collector.drbd Enable the drbd collector (default: disabled). +# --collector.edac Enable the edac collector (default: enabled). +# --collector.entropy Enable the entropy collector (default: +# enabled). +# --collector.fibrechannel Enable the fibrechannel collector (default: +# enabled). +# --collector.filefd Enable the filefd collector (default: enabled). +# --collector.filesystem Enable the filesystem collector (default: +# enabled). +# --collector.hwmon Enable the hwmon collector (default: enabled). +# --collector.infiniband Enable the infiniband collector (default: +# enabled). +# --collector.interrupts Enable the interrupts collector (default: +# disabled). +# --collector.ipvs Enable the ipvs collector (default: enabled). +# --collector.ksmd Enable the ksmd collector (default: disabled). +# --collector.loadavg Enable the loadavg collector (default: +# enabled). +# --collector.logind Enable the logind collector (default: +# disabled). +# --collector.mdadm Enable the mdadm collector (default: enabled). +# --collector.meminfo Enable the meminfo collector (default: +# enabled). +# --collector.meminfo_numa Enable the meminfo_numa collector (default: +# disabled). +# --collector.mountstats Enable the mountstats collector (default: +# disabled). +# --collector.netclass Enable the netclass collector (default: +# enabled). +# --collector.netdev Enable the netdev collector (default: enabled). +# --collector.netstat Enable the netstat collector (default: +# enabled). +# --collector.network_route Enable the network_route collector (default: +# disabled). +# --collector.nfs Enable the nfs collector (default: enabled). +# --collector.nfsd Enable the nfsd collector (default: enabled). +# --collector.ntp Enable the ntp collector (default: disabled). +# --collector.perf Enable the perf collector (default: disabled). +# --collector.powersupplyclass +# Enable the powersupplyclass collector (default: +# enabled). +# --collector.pressure Enable the pressure collector (default: +# enabled). +# --collector.processes Enable the processes collector (default: +# disabled). +# --collector.qdisc Enable the qdisc collector (default: disabled). +# --collector.rapl Enable the rapl collector (default: enabled). +# --collector.runit Enable the runit collector (default: disabled). +# --collector.schedstat Enable the schedstat collector (default: +# enabled). +# --collector.sockstat Enable the sockstat collector (default: +# enabled). +# --collector.softnet Enable the softnet collector (default: +# enabled). +# --collector.stat Enable the stat collector (default: enabled). +# --collector.supervisord Enable the supervisord collector (default: +# disabled). +# --collector.systemd Enable the systemd collector (default: +# disabled). +# --collector.tcpstat Enable the tcpstat collector (default: +# disabled). +# --collector.textfile Enable the textfile collector (default: +# enabled). +# --collector.thermal_zone Enable the thermal_zone collector (default: +# enabled). +# --collector.time Enable the time collector (default: enabled). +# --collector.timex Enable the timex collector (default: enabled). +# --collector.udp_queues Enable the udp_queues collector (default: +# enabled). +# --collector.uname Enable the uname collector (default: enabled). +# --collector.vmstat Enable the vmstat collector (default: enabled). +# --collector.wifi Enable the wifi collector (default: disabled). +# --collector.xfs Enable the xfs collector (default: enabled). +# --collector.zfs Enable the zfs collector (default: enabled). +# --collector.zoneinfo Enable the zoneinfo collector (default: +# disabled). +# --web.listen-address=":9100" +# Address on which to expose metrics and web +# interface. +# --web.telemetry-path="/metrics" +# Path under which to expose metrics. +# --web.disable-exporter-metrics +# Exclude metrics about the exporter itself +# (promhttp_*, process_*, go_*). +# --web.max-requests=40 Maximum number of parallel scrape requests. Use +# 0 to disable. +# --collector.disable-defaults +# Set all collectors to disabled by default. +# --web.config="" [EXPERIMENTAL] Path to config yaml file that +# can enable TLS or authentication. +# --log.level=info Only log messages with the given severity or +# above. One of: [debug, info, warn, error] +# --log.format=logfmt Output format of log messages. One of: [logfmt, +# json] +# --version Show application version.
diff --git a/config/rootfiles/packages/node_exporter b/config/rootfiles/packages/node_exporter new file mode 100644 index 000000000..994c8365b --- /dev/null +++ b/config/rootfiles/packages/node_exporter @@ -0,0 +1,3 @@ +usr/bin/node_exporter +etc/node_exporter_options +etc/rc.d/init.d/node_exporter diff --git a/lfs/node_exporter b/lfs/node_exporter new file mode 100644 index 000000000..942816754 --- /dev/null +++ b/lfs/node_exporter @@ -0,0 +1,94 @@ +############################################################################## +# # +# IPFire.org - A linux based firewall # +# Copyright (C) 2007 Michael Tremer & Christian Schmidt # +# # +# This program is free software: you can redistribute it and/or modify # +# it under the terms of the GNU General Public License as published by # +# the Free Software Foundation, either version 3 of the License, or # +# (at your option) any later version. # +# # +# This program is distributed in the hope that it will be useful, # +# but WITHOUT ANY WARRANTY; without even the implied warranty of # +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # +# GNU General Public License for more details. # +# # +# You should have received a copy of the GNU General Public License # +# along with this program. If not, see http://www.gnu.org/licenses/. # +# # +###############################################################################
+############################################################################### +# Definitions +###############################################################################
+include Config
+VER = 1.1.2
+THISAPP = node_exporter-$(VER) +DL_FILE = $(THISAPP).tar.gz +DL_FROM = https://github.com/prometheus/node_exporter/archive/v$(VER)/ +DIR_APP = $(DIR_SRC)/$(THISAPP) +TARGET = $(DIR_INFO)/$(THISAPP) +SUP_ARCH = x86_64 i586 aarch64 armv5tel +PROG = node_exporter +PAK_VER = 1
+DEPS = ""
+############################################################################### +# Top-level Rules +###############################################################################
+objects = $(DL_FILE)
+$(DL_FILE) = $(DL_FROM)/$(DL_FILE)
+$(DL_FILE)_MD5 = 33c2be846dbd502f9c0efab149a8cbc5
+install : $(TARGET) +check : $(patsubst %,$(DIR_CHK)/%,$(objects))
+download : $(patsubst %,$(DIR_DL)/%,$(objects))
+md5 : $(subst %,%_MD5,$(objects))
+dist :
- @$(PAK)
+############################################################################### +# Downloading, checking, md5sum +###############################################################################
+$(patsubst %,$(DIR_CHK)/%,$(objects)) :
- @$(CHECK)
+$(patsubst %,$(DIR_DL)/%,$(objects)) :
- @$(LOAD)
+$(subst %,%_MD5,$(objects)) :
- @$(MD5)
+############################################################################### +# Installation Details +###############################################################################
+$(TARGET) : $(patsubst %,$(DIR_DL)/%,$(objects))
- @$(PREBUILD)
- @rm -rf $(DIR_APP) && cd $(DIR_SRC) && tar zxf $(DIR_DL)/$(DL_FILE)
- cd $(DIR_APP) && make build $(MAKETUNING) $(EXTRA_MAKE)
- # install compiled binary
- cd $(DIR_APP) && cp node_exporter /usr/bin
- # install configuration file
- install -v -m 644 $(DIR_SRC)/config/node_exporter/node_exporter_options \
/etc/node_exporter_options
- # Install initscript
- $(call INSTALL_INITSCRIPT,node_exporter)
- @rm -rf $(DIR_APP)
- @$(POSTBUILD)
diff --git a/make.sh b/make.sh index 4af0081e9..671f15558 100755 --- a/make.sh +++ b/make.sh @@ -1632,6 +1632,7 @@ buildipfire() { lfsmake2 socat lfsmake2 libcdada lfsmake2 pmacct
- lfsmake2 node_exporter
}
buildinstaller() { diff --git a/src/initscripts/packages/node_exporter b/src/initscripts/packages/node_exporter new file mode 100644 index 000000000..b9cbc6ab9 --- /dev/null +++ b/src/initscripts/packages/node_exporter @@ -0,0 +1,42 @@ +#!/bin/sh +######################################################################## +# Begin $rc_base/init.d/ +# +# Description : Prometheus Node Exporter daemon +# +########################################################################
+. /etc/sysconfig/rc +. ${rc_functions}
+# read configurable OPTIONS +. /etc/node_exporter_options
+case "${1}" in
- start)
boot_mesg "Starting..."
The “Starting…” line normally has the name of the program.
loadproc /usr/bin/node_exporter $OPTIONS > /dev/null 2>&1 &
You are throwing away the output of loadproc as well as any potential error messages. Does this program have a way to fork itself into the background?
;;
- stop)
boot_mesg "Stopping..."
Same here.
killproc /usr/bin/node_exporter
;;
- restart)
${0} stop
sleep 1
${0} start
;;
- status)
statusproc /usr/bin/node_exporter
;;
- *)
echo "Usage: ${0} {start|stop|restart|status}"
exit 1
;;
+esac
+# End $rc_base/init.d/ diff --git a/src/paks/node_exporter/install.sh b/src/paks/node_exporter/install.sh new file mode 100644 index 000000000..e9272d7cb --- /dev/null +++ b/src/paks/node_exporter/install.sh @@ -0,0 +1,31 @@ +#!/bin/bash +############################################################################ +# # +# This file is part of the IPFire Firewall. # +# # +# IPFire is free software; you can redistribute it and/or modify # +# it under the terms of the GNU General Public License as published by # +# the Free Software Foundation; either version 2 of the License, or # +# (at your option) any later version. # +# # +# IPFire is distributed in the hope that it will be useful, # +# but WITHOUT ANY WARRANTY; without even the implied warranty of # +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # +# GNU General Public License for more details. # +# # +# You should have received a copy of the GNU General Public License # +# along with IPFire; if not, write to the Free Software # +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA # +# # +# Copyright (C) 2007 IPFire-Team info@ipfire.org. # +# # +############################################################################ +# +. /opt/pakfire/lib/functions.sh +extract_files +restore_backup ${NAME} +start_service --background ${NAME}
+ln -svf ../init.d/node_exporter /etc/rc.d/rc0.d/K30node_exporter +ln -svf ../init.d/node_exporter /etc/rc.d/rc3.d/S40node_exporter +ln -svf ../init.d/node_exporter /etc/rc.d/rc6.d/K30node_exporter diff --git a/src/paks/node_exporter/uninstall.sh b/src/paks/node_exporter/uninstall.sh new file mode 100644 index 000000000..710baf8b4 --- /dev/null +++ b/src/paks/node_exporter/uninstall.sh @@ -0,0 +1,30 @@ +#!/bin/bash +############################################################################ +# # +# This file is part of the IPFire Firewall. # +# # +# IPFire is free software; you can redistribute it and/or modify # +# it under the terms of the GNU General Public License as published by # +# the Free Software Foundation; either version 2 of the License, or # +# (at your option) any later version. # +# # +# IPFire is distributed in the hope that it will be useful, # +# but WITHOUT ANY WARRANTY; without even the implied warranty of # +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # +# GNU General Public License for more details. # +# # +# You should have received a copy of the GNU General Public License # +# along with IPFire; if not, write to the Free Software # +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA # +# # +# Copyright (C) 2007 IPFire-Team info@ipfire.org. # +# # +############################################################################ +# +. /opt/pakfire/lib/functions.sh +/etc/init.d/node_exporter stop +make_backup ${NAME} +remove_files
+rm -rfv /etc/rc.d/rc*.d/*node_exporter
diff --git a/src/paks/node_exporter/update.sh b/src/paks/node_exporter/update.sh new file mode 100644 index 000000000..99776659c --- /dev/null +++ b/src/paks/node_exporter/update.sh @@ -0,0 +1,27 @@ +#!/bin/bash +############################################################################ +# # +# This file is part of the IPFire Firewall. # +# # +# IPFire is free software; you can redistribute it and/or modify # +# it under the terms of the GNU General Public License as published by # +# the Free Software Foundation; either version 2 of the License, or # +# (at your option) any later version. # +# # +# IPFire is distributed in the hope that it will be useful, # +# but WITHOUT ANY WARRANTY; without even the implied warranty of # +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # +# GNU General Public License for more details. # +# # +# You should have received a copy of the GNU General Public License # +# along with IPFire; if not, write to the Free Software # +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA # +# # +# Copyright (C) 2007-2020 IPFire-Team info@ipfire.org. # +# # +############################################################################ +# +. /opt/pakfire/lib/functions.sh +extract_backup_includes +./uninstall.sh
+./install.sh
2.30.2