From cbc634d294a29f149b500d5a81b78efe99aeaf9d Mon Sep 17 00:00:00 2001 From: Danilo Egea Gondolfo Date: Sun, 20 Apr 2025 12:18:44 +0100 Subject: [PATCH] net-mgmt/prometheus3: Add new port Add Prometheus 3.3.0, released on 2025-04-15, to the Ports tree. Prometheus is a systems and service monitoring system. This port is heavily based on net-mgmt/prometheus2. Release notes: https://github.com/prometheus/prometheus/releases/tag/v3.3.0 Migration guide: https://prometheus.io/docs/prometheus/latest/migration/ --- net-mgmt/Makefile | 1 + net-mgmt/prometheus3/Makefile | 79 ++++++++++++ net-mgmt/prometheus3/distinfo | 7 ++ net-mgmt/prometheus3/files/prometheus.in | 151 +++++++++++++++++++++++ net-mgmt/prometheus3/pkg-descr | 17 +++ net-mgmt/prometheus3/pkg-plist | 34 +++++ 6 files changed, 289 insertions(+) create mode 100644 net-mgmt/prometheus3/Makefile create mode 100644 net-mgmt/prometheus3/distinfo create mode 100644 net-mgmt/prometheus3/files/prometheus.in create mode 100644 net-mgmt/prometheus3/pkg-descr create mode 100644 net-mgmt/prometheus3/pkg-plist diff --git a/net-mgmt/Makefile b/net-mgmt/Makefile index e65bd85147be..e18442d75df0 100644 --- a/net-mgmt/Makefile +++ b/net-mgmt/Makefile @@ -312,6 +312,7 @@ SUBDIR += prometheus-collectd-exporter SUBDIR += prometheus1 SUBDIR += prometheus2 + SUBDIR += prometheus3 SUBDIR += promscale SUBDIR += promxy SUBDIR += pushgateway diff --git a/net-mgmt/prometheus3/Makefile b/net-mgmt/prometheus3/Makefile new file mode 100644 index 000000000000..55b836c6b8ea --- /dev/null +++ b/net-mgmt/prometheus3/Makefile @@ -0,0 +1,79 @@ +PORTNAME= prometheus +DISTVERSIONPREFIX= v +DISTVERSION= 3.3.0 +CATEGORIES= net-mgmt +MASTER_SITES= https://raw.githubusercontent.com/${GH_ACCOUNT}/${GH_PROJECT}/${DISTVERSIONFULL}/:gomod \ + https://github.com/${GH_ACCOUNT}/${GH_PROJECT}/releases/download/${DISTVERSIONFULL}/:ui +PKGNAMESUFFIX= 3 +DISTFILES= go.mod:gomod ${PORTNAME}-web-ui-${DISTVERSION}.tar.gz:ui + +MAINTAINER= danilo@FreeBSD.org +COMMENT= Systems monitoring and alerting toolkit +WWW= https://prometheus.io/ + +LICENSE= APACHE20 +LICENSE_FILE= ${WRKSRC}/LICENSE + +PATCH_DEPENDS= bash:shells/bash + +USES= cpe go:1.23,modules + +CONFLICTS_INSTALL= prometheus1 prometheus + +USE_GITHUB= yes +USE_RC_SUBR= prometheus + +GO_MODULE= github.com/prometheus/prometheus +GO_TARGET= ./cmd/prometheus ./cmd/promtool +GO_BUILDFLAGS= -a -v -ldflags "${LD_FLAG_STRING}" -tags netgo,builtinassets + +SUB_LIST+= PROMETHEUS_CONSOLE_LIBRARIES_DIR=${PROMETHEUS_CONSOLE_LIBRARIES_DIR} \ + PROMETHEUS_CONSOLES_DIR=${PROMETHEUS_CONSOLES_DIR} \ + PROMETHEUS_DB_DIR=${PROMETHEUS_DB_DIR} \ + PROMETHEUS_GROUP=${PROMETHEUS_GROUP} \ + PROMETHEUS_USER=${PROMETHEUS_USER} + +USERS= ${PROMETHEUS_USER} +GROUPS= ${PROMETHEUS_GROUP} + +PLIST_SUB+= PROMETHEUS_CONSOLE_LIBRARIES_DIR=${PROMETHEUS_CONSOLE_LIBRARIES_DIR} \ + PROMETHEUS_CONSOLES_DIR=${PROMETHEUS_CONSOLES_DIR} \ + PROMETHEUS_GROUP=${PROMETHEUS_GROUP} \ + PROMETHEUS_USER=${PROMETHEUS_USER} + +OPTIONS_DEFINE= DOCS + +BUILD_USER?= ${USER} +LD_FLAG_STRING= -s ${LD_FLAG_X_PREFIX}.Version=${PORTVERSION} \ + ${LD_FLAG_X_PREFIX}.Revision=${PORTREVISION} \ + ${LD_FLAG_X_PREFIX}.Branch=release-${PORTVERSION:R} \ + ${LD_FLAG_X_PREFIX}.BuildUser=${BUILD_USER} \ + ${LD_FLAG_X_PREFIX}.BuildDate=$$(date +'%Y%m%d-%H:%M:%S') +LD_FLAG_X_PREFIX= -X github.com/prometheus/common/version + +PROMETHEUS_CONSOLES_DIR?= ${DATADIR}/consoles +PROMETHEUS_CONSOLE_LIBRARIES_DIR?= ${DATADIR}/console_libraries +PROMETHEUS_DB_DIR?= /var/db/${PORTNAME} +PROMETHEUS_GROUP?= prometheus +PROMETHEUS_USER?= prometheus + +.include + +post-patch: + @${RM} -rf ${WRKSRC}/web/ui/static + @${CP} -a ${WRKDIR}/static ${WRKSRC}/web/ui/static + @( cd ${WRKSRC} && ${WRKSRC}/scripts/compress_assets.sh ) + +post-install: + ${MKDIR} ${STAGEDIR}${DESTDIR}${PROMETHEUS_CONSOLES_DIR} + ${MKDIR} ${STAGEDIR}${DESTDIR}${PROMETHEUS_CONSOLE_LIBRARIES_DIR} + ${INSTALL_DATA} \ + ${WRKSRC}/documentation/examples/prometheus.yml \ + ${STAGEDIR}${LOCALBASE}/etc/prometheus.yml.sample + +post-install-DOCS-on: + @${MKDIR} ${STAGEDIR}${DOCSDIR} + @( cd ${WRKSRC}/docs \ + && ${COPYTREE_SHARE} . ${STAGEDIR}${DOCSDIR} ) + +.include diff --git a/net-mgmt/prometheus3/distinfo b/net-mgmt/prometheus3/distinfo new file mode 100644 index 000000000000..bbb6926a2396 --- /dev/null +++ b/net-mgmt/prometheus3/distinfo @@ -0,0 +1,7 @@ +TIMESTAMP = 1745143828 +SHA256 (go/net-mgmt_prometheus3/prometheus-prometheus-v3.3.0_GH0/go.mod) = d10eb1ccf4285c63642ef10f2c811073b8945fdc8bdb0fc7a668de4aaf85ff58 +SIZE (go/net-mgmt_prometheus3/prometheus-prometheus-v3.3.0_GH0/go.mod) = 10745 +SHA256 (go/net-mgmt_prometheus3/prometheus-prometheus-v3.3.0_GH0/prometheus-web-ui-3.3.0.tar.gz) = 845f1e2c869e7f8679646ca3a97d56c9dfc30f8064e7bd4e0d0d756fe9c74d30 +SIZE (go/net-mgmt_prometheus3/prometheus-prometheus-v3.3.0_GH0/prometheus-web-ui-3.3.0.tar.gz) = 3487058 +SHA256 (go/net-mgmt_prometheus3/prometheus-prometheus-v3.3.0_GH0/prometheus-prometheus-v3.3.0_GH0.tar.gz) = 5562c10a41781f1378cf962a117e7d70a2cfc6e4be7f4cada2474dd534f6512a +SIZE (go/net-mgmt_prometheus3/prometheus-prometheus-v3.3.0_GH0/prometheus-prometheus-v3.3.0_GH0.tar.gz) = 5045708 diff --git a/net-mgmt/prometheus3/files/prometheus.in b/net-mgmt/prometheus3/files/prometheus.in new file mode 100644 index 000000000000..1e7bcac72274 --- /dev/null +++ b/net-mgmt/prometheus3/files/prometheus.in @@ -0,0 +1,151 @@ +#!/bin/sh + +# PROVIDE: prometheus +# REQUIRE: LOGIN +# KEYWORD: shutdown +# +# Add the following lines to /etc/rc.conf.local or /etc/rc.conf +# to enable this service: +# +# prometheus_enable (bool) +# Set it to YES to enable prometheus +# Set to NO by default +# prometheus_user (string) +# Set user that prometheus will run under +# Default is "%%PROMETHEUS_USER%%" +# prometheus_group (string) +# Set group that own prometheus files +# Default is "%%PROMETHEUS_GROUP%%" +# prometheus_config (string) +# Set full path to config file +# Default is "%%PREFIX%%/etc/prometheus.yml" +# prometheus_pidfile (string) +# Set full path to pid file +# Default is "/var/run/prometheus.pid" +# prometheus_syslog_output_enable (bool) +# Set it to NO to disable syslog output +# Set to YES by default +# prometheus_syslog_output_tag (str) +# Set syslog tag if syslog enabled +# Default is "prometheus" +# prometheus_syslog_output_priority (string) +# Set syslog priority if syslog enabled +# Default is "info" +# prometheus_syslog_output_facility (string) +# Set syslog facility if syslog enabled +# Default is "daemon" +# prometheus_agent_mode (bool) +# Set to "YES" to enable Prometheus Agent Mode +# Default is "NO" +# prometheus_consoles (string) +# Set dir that contains Prometheus consoles +# Default is "%%PROMETHEUS_CONSOLES_DIR%%" +# prometheus_console_libraries (string) +# Set dir containing Prometheus console libraries +# Default is "%%PROMETHEUS_CONSOLE_LIBRARIES_DIR%%" +# prometheus_data_dir (string) +# Set dir to run prometheus in +# Default is "%%PROMETHEUS_DB_DIR%%" +# prometheus_loglevel (string) +# Set one of [debug, info, warn, error] +# Default is "info" +# prometheus_logformat (string) +# Set one of [logfmt, json] +# Default is "logfmt" +# prometheus_env (string) +# Set environment variables used with prometheus +# Default is "" +# prometheus_args (string) +# Set additional command line arguments +# Default is "" + +. /etc/rc.subr + +name=prometheus +rcvar=prometheus_enable + +load_rc_config $name + +: ${prometheus_enable:="NO"} +: ${prometheus_user:="%%PROMETHEUS_USER%%"} +: ${prometheus_group:="%%PROMETHEUS_GROUP%%"} +: ${prometheus_config:="%%PREFIX%%/etc/prometheus.yml"} +: ${prometheus_pidfile:="/var/run/prometheus.pid"} +: ${prometheus_syslog_output_enable:="YES"} +: ${prometheus_agent_mode:="NO"} +: ${prometheus_consoles_dir:="%%PROMETHEUS_CONSOLES_DIR%%"} +: ${prometheus_console_libraries_dir:="%%PROMETHEUS_CONSOLE_LIBRARIES_DIR%%"} +: ${prometheus_data_dir:="%%PROMETHEUS_DB_DIR%%"} +: ${prometheus_loglevel:="info"} +: ${prometheus_logformat:="logfmt"} + +if checkyesno prometheus_syslog_output_enable; then + if [ -n "${prometheus_syslog_output_tag}" ]; then + prometheus_syslog_output_flags="-T ${prometheus_syslog_output_tag}" + else + prometheus_syslog_output_flags="-T ${name}" + fi + if [ -n "${prometheus_syslog_output_priority}" ]; then + prometheus_syslog_output_flags="${prometheus_syslog_output_flags} -s ${prometheus_syslog_output_priority}" + fi + if [ -n "${prometheus_syslog_output_facility}" ]; then + prometheus_syslog_output_flags="${prometheus_syslog_output_flags} -l ${prometheus_syslog_output_facility}" + fi +fi + +if checkyesno prometheus_agent_mode; then + prometheus_storage_flags="--agent --storage.agent.path=${prometheus_data_dir}" +else + prometheus_storage_flags="--storage.tsdb.path=${prometheus_data_dir}" +fi + +pidfile="${prometheus_pidfile}" +required_files="${prometheus_config}" + +procname="%%PREFIX%%/bin/prometheus" +command="/usr/sbin/daemon" +command_args="-f ${prometheus_syslog_output_flags} -p ${pidfile} -t ${name} \ + /usr/bin/env ${prometheus_env} ${procname} \ + --config.file=${prometheus_config} \ + --web.console.templates=${prometheus_consoles_dir} \ + --web.console.libraries=${prometheus_console_libraries_dir} \ + --log.level=${prometheus_loglevel} \ + --log.format=${prometheus_logformat} \ + ${prometheus_storage_flags} \ + ${prometheus_args}" + +start_precmd="prometheus_start_precmd" +extra_commands="reload" + +# This checks for the existence of a prometheus 1.x data at the +# $prometheus_data_dir location. If one is found, Prometheus will not start. +prometheus_check_data_version() +{ + local _version + local _version_file="${prometheus_data_dir}/VERSION" + + if [ -f "${_version_file}" ]; then + read _version < "${_version_file}" + + if [ "${_version}" = "1" ]; then + return 1 + fi + fi +} + +prometheus_start_precmd() +{ + if [ ! -e "${pidfile}" ]; then + install -m 0600 -o "${prometheus_user}" -g "${prometheus_group}" /dev/null "${pidfile}" + fi + if [ ! -d "${prometheus_data_dir}" ]; then + install -d -m 750 -o "${prometheus_user}" -g "${prometheus_group}" "${prometheus_data_dir}" + else + # Ensure it's not a prometheus 1.x data + if [ ! prometheus_check_data_version ]; then + err 1 "Found \"net-mgmt/prometheus1\" data, refusing to start." + fi + fi +} + +run_rc_command "$1" diff --git a/net-mgmt/prometheus3/pkg-descr b/net-mgmt/prometheus3/pkg-descr new file mode 100644 index 000000000000..5c33b0261b8b --- /dev/null +++ b/net-mgmt/prometheus3/pkg-descr @@ -0,0 +1,17 @@ +Prometheus is a systems and service monitoring system. It collects metrics +from configured targets at given intervals, evaluates rule expressions, +displays the results, and can trigger alerts if some condition is observed +to be true. + +Prometheus' main distinguishing features as compared to other monitoring +systems are: + +- a multi-dimensional data model (timeseries defined by metric name and + set of key/value dimensions) +- a flexible query language to leverage this dimensionality +- no dependency on distributed storage; single server nodes are autonomous +- timeseries collection happens via a pull model over HTTP +- pushing timeseries is supported via an intermediary gateway +- targets are discovered via service discovery or static configuration +- multiple modes of graphing and dashboarding support +- support for hierarchical and horizontal federation diff --git a/net-mgmt/prometheus3/pkg-plist b/net-mgmt/prometheus3/pkg-plist new file mode 100644 index 000000000000..a5a5f82c33c0 --- /dev/null +++ b/net-mgmt/prometheus3/pkg-plist @@ -0,0 +1,34 @@ +bin/prometheus +bin/promtool +%%PORTDOCS%%%%DOCSDIR%%/command-line/index.md +%%PORTDOCS%%%%DOCSDIR%%/command-line/%%PROMETHEUS_USER%%.md +%%PORTDOCS%%%%DOCSDIR%%/command-line/promtool.md +%%PORTDOCS%%%%DOCSDIR%%/configuration/alerting_rules.md +%%PORTDOCS%%%%DOCSDIR%%/configuration/configuration.md +%%PORTDOCS%%%%DOCSDIR%%/configuration/https.md +%%PORTDOCS%%%%DOCSDIR%%/configuration/index.md +%%PORTDOCS%%%%DOCSDIR%%/configuration/recording_rules.md +%%PORTDOCS%%%%DOCSDIR%%/configuration/template_examples.md +%%PORTDOCS%%%%DOCSDIR%%/configuration/template_reference.md +%%PORTDOCS%%%%DOCSDIR%%/configuration/unit_testing_rules.md +%%PORTDOCS%%%%DOCSDIR%%/feature_flags.md +%%PORTDOCS%%%%DOCSDIR%%/federation.md +%%PORTDOCS%%%%DOCSDIR%%/getting_started.md +%%PORTDOCS%%%%DOCSDIR%%/http_sd.md +%%PORTDOCS%%%%DOCSDIR%%/images/remote_integrations.png +%%PORTDOCS%%%%DOCSDIR%%/index.md +%%PORTDOCS%%%%DOCSDIR%%/installation.md +%%PORTDOCS%%%%DOCSDIR%%/management_api.md +%%PORTDOCS%%%%DOCSDIR%%/migration.md +%%PORTDOCS%%%%DOCSDIR%%/querying/api.md +%%PORTDOCS%%%%DOCSDIR%%/querying/basics.md +%%PORTDOCS%%%%DOCSDIR%%/querying/examples.md +%%PORTDOCS%%%%DOCSDIR%%/querying/functions.md +%%PORTDOCS%%%%DOCSDIR%%/querying/index.md +%%PORTDOCS%%%%DOCSDIR%%/querying/operators.md +%%PORTDOCS%%%%DOCSDIR%%/querying/remote_read_api.md +%%PORTDOCS%%%%DOCSDIR%%/stability.md +%%PORTDOCS%%%%DOCSDIR%%/storage.md +@sample etc/prometheus.yml.sample +@dir %%DATADIR%%/console_libraries +@dir %%DATADIR%%/consoles