1
0
mirror of https://git.freebsd.org/ports.git synced 2026-06-02 11:08:52 +00:00

sysutils/mtail: New Port

mtail is a tool for extracting metrics from application logs to be
exported into a timeseries database or timeseries calculator for
alerting and dashboarding.

It fills a monitoring niche by being the glue between applications that
do not export their own internal state (other than via logs) and
existing monitoring systems, such that system operators do not need to
patch those applications to instrument them or writing custom extraction
code for every such application.
This commit is contained in:
Mark Felder
2026-01-01 00:38:40 +00:00
parent 2a5aca791a
commit 9702a3744f
10 changed files with 221 additions and 2 deletions
+1 -1
View File
@@ -325,7 +325,7 @@ hydroxide:*:381:
_tlsrpt:*:382:
cascade:*:383:
omada:*:384:
# free: 385
mtail:*:385:
# free: 386
# free: 387
# free: 388
+1 -1
View File
@@ -331,7 +331,7 @@ hydroxide:*:381:381::0:0:Hydroxide Daemon:/var/db/hydroxide:/usr/sbin/nologin
_tlsrpt:*:382:382::0:0:TLSRPT Daemon:/nonexistent:/usr/sbin/nologin
cascade:*:383:383::0:0:Cascade Daemon:/var/db/cascade:/usr/sbin/nologin
omada:*:384:384::0:0:Omada Wireless Controller:/nonexistent:/usr/sbin/nologin
# free: 385
mtail:*:385:385::0:0:mtail:/nonexistent:/usr/sbin/nologin
# free: 386
# free: 387
# free: 388
+1
View File
@@ -754,6 +754,7 @@
SUBDIR += msiklm
SUBDIR += msktutil
SUBDIR += mstflint
SUBDIR += mtail
SUBDIR += mtm
SUBDIR += mtxorbd
SUBDIR += mult
+44
View File
@@ -0,0 +1,44 @@
PORTNAME= mtail
DISTVERSION= 3.0.9
DISTVERSIONPREFIX= v
CATEGORIES= sysutils
MAINTAINER= feld@FreeBSD.org
COMMENT= Extract internal monitoring data from application logs
WWW= https://github.com/google/mtail
LICENSE= APACHE20
LICENSE_FILE= ${WRKSRC}/LICENSE
USES= go:modules
GO_TARGET= ./cmd/mtail ./cmd/mfmt
USE_GITHUB= yes
GH_ACCOUNT= google
USE_RC_SUBR= mtail
SUB_FILES+= pkg-message
SUB_LIST= USERS=${USERS} \
ETCDIR=${ETCDIR} \
DOCSDIR=${DOCSDIR} \
EXAMPLESDIR=${EXAMPLESDIR}
USERS= mtail
GROUPS= mtail
DOCS= docs/*.md
EXAMPLES= examples/*.mtail
OPTIONS_DEFINE= DOCS EXAMPLES
# make gomod-vendor > Makefile.gomod
.include "${.CURDIR}/Makefile.gomod"
post-install:
${MKDIR} ${STAGEDIR}${DOCSDIR}
${MKDIR} ${STAGEDIR}${EXAMPLESDIR}
${INSTALL_DATA} ${DOCS:S,^,${WRKSRC}/,} ${STAGEDIR}${DOCSDIR}/
${INSTALL_DATA} ${EXAMPLES:S,^,${WRKSRC}/,} ${STAGEDIR}${EXAMPLESDIR}/
.include <bsd.port.mk>
+23
View File
@@ -0,0 +1,23 @@
GH_TUPLE= \
beorn7:perks:v1.0.1:beorn7_perks/vendor/github.com/beorn7/perks \
census-ecosystem:opencensus-go-exporter-jaeger:v0.2.1:census_ecosystem_opencensus_go_exporter_jaeger/vendor/contrib.go.opencensus.io/exporter/jaeger \
census-instrumentation:opencensus-go:v0.24.0:census_instrumentation_opencensus_go/vendor/go.opencensus.io \
cespare:xxhash:v2.2.0:cespare_xxhash_v2/vendor/github.com/cespare/xxhash/v2 \
davecgh:go-spew:v1.1.1:davecgh_go_spew/vendor/github.com/davecgh/go-spew \
golang:glog:v1.2.2:golang_glog/vendor/github.com/golang/glog \
golang:groupcache:41bb18bfe9da:golang_groupcache/vendor/github.com/golang/groupcache \
golang:protobuf:v1.5.3:golang_protobuf/vendor/github.com/golang/protobuf \
golang:sync:v0.7.0:golang_sync/vendor/golang.org/x/sync \
golang:sys:v0.24.0:golang_sys/vendor/golang.org/x/sys \
google:go-cmp:v0.6.0:google_go_cmp/vendor/github.com/google/go-cmp \
google:go-genproto:daa745c078e1:google_go_genproto/vendor/google.golang.org/genproto \
googleapis:google-api-go-client:v0.105.0:googleapis_google_api_go_client/vendor/google.golang.org/api \
grpc:grpc-go:v1.56.3:grpc_grpc_go/vendor/google.golang.org/grpc \
munnerz:goautoneg:a7dc8b61c822:munnerz_goautoneg/vendor/github.com/munnerz/goautoneg \
pkg:errors:v0.9.1:pkg_errors/vendor/github.com/pkg/errors \
prometheus:client_golang:v1.19.1:prometheus_client_golang/vendor/github.com/prometheus/client_golang \
prometheus:client_model:v0.6.1:prometheus_client_model/vendor/github.com/prometheus/client_model \
prometheus:common:v0.55.0:prometheus_common/vendor/github.com/prometheus/common \
prometheus:procfs:v0.15.1:prometheus_procfs/vendor/github.com/prometheus/procfs \
protocolbuffers:protobuf-go:v1.34.2:protocolbuffers_protobuf_go/vendor/google.golang.org/protobuf \
uber:jaeger-client-go:v2.25.0:uber_jaeger_client_go/vendor/github.com/uber/jaeger-client-go
+47
View File
@@ -0,0 +1,47 @@
TIMESTAMP = 1767224635
SHA256 (google-mtail-v3.0.9_GH0.tar.gz) = 16c59fe81d2b192bd57b988b00ca16f943ed85746ed2081de44127d5c7d0a439
SIZE (google-mtail-v3.0.9_GH0.tar.gz) = 571625
SHA256 (beorn7-perks-v1.0.1_GH0.tar.gz) = 98db84bb0224a26094e6adba91b7ee7a1a7ace28cb648d818f8e779e6a19f825
SIZE (beorn7-perks-v1.0.1_GH0.tar.gz) = 10867
SHA256 (census-ecosystem-opencensus-go-exporter-jaeger-v0.2.1_GH0.tar.gz) = 95d6a2259b26232de5c973a015ffac2ce3f822ae837b6a6532f40700c779964a
SIZE (census-ecosystem-opencensus-go-exporter-jaeger-v0.2.1_GH0.tar.gz) = 23336
SHA256 (census-instrumentation-opencensus-go-v0.24.0_GH0.tar.gz) = 048708914541817193330ce052026deb0c617c9d953ac15ae601ab2bde5788d1
SIZE (census-instrumentation-opencensus-go-v0.24.0_GH0.tar.gz) = 176752
SHA256 (cespare-xxhash-v2.2.0_GH0.tar.gz) = b8c684b9e5e136510913727e6a845b28f8176e55db827b11f17769fba970fe13
SIZE (cespare-xxhash-v2.2.0_GH0.tar.gz) = 12334
SHA256 (davecgh-go-spew-v1.1.1_GH0.tar.gz) = 7d82b9bb7291adbe7498fe946920ab3e7fc9e6cbfc3b2294693fad00bf0dd17e
SIZE (davecgh-go-spew-v1.1.1_GH0.tar.gz) = 42152
SHA256 (golang-glog-v1.2.2_GH0.tar.gz) = 5aa6cb3b9204b24d4f26fa475c84d337fe1dc47dc365e10199b88d2e70ad893d
SIZE (golang-glog-v1.2.2_GH0.tar.gz) = 36753
SHA256 (golang-groupcache-41bb18bfe9da_GH0.tar.gz) = 1e89795970d6593affdafe1d09dcf947681ca1ea82528e8e4fb9974a77f2e394
SIZE (golang-groupcache-41bb18bfe9da_GH0.tar.gz) = 26101
SHA256 (golang-protobuf-v1.5.3_GH0.tar.gz) = 48457a6a9e8c78a7556ff5ff4a4c77d7df9bf70e882491ee0f3f1ff06db2bfaa
SIZE (golang-protobuf-v1.5.3_GH0.tar.gz) = 171822
SHA256 (golang-sync-v0.7.0_GH0.tar.gz) = 39bf56d2dc04d16baabbf5eb5d847a2ad68762b5efde7ca3a8fdb24bdcdd9461
SIZE (golang-sync-v0.7.0_GH0.tar.gz) = 18181
SHA256 (golang-sys-v0.24.0_GH0.tar.gz) = 3402ba7b578406df222693bac2b4011b5c9ab9180b0c123db1ed92da8ba11052
SIZE (golang-sys-v0.24.0_GH0.tar.gz) = 1501680
SHA256 (google-go-cmp-v0.6.0_GH0.tar.gz) = d14f7d57b0f6d25771bee3d7d5d038f532539e71bfc934772b1c0467ab90fa86
SIZE (google-go-cmp-v0.6.0_GH0.tar.gz) = 104784
SHA256 (google-go-genproto-daa745c078e1_GH0.tar.gz) = 87a8a728aa937071545b8080654a8d2e6f4088227cc53215aa1101f7add10697
SIZE (google-go-genproto-daa745c078e1_GH0.tar.gz) = 6013726
SHA256 (googleapis-google-api-go-client-v0.105.0_GH0.tar.gz) = 821b0fec67835fdf03166c4b7929226e7db26c6eb09feff0708ac6d71f026dec
SIZE (googleapis-google-api-go-client-v0.105.0_GH0.tar.gz) = 30246907
SHA256 (grpc-grpc-go-v1.56.3_GH0.tar.gz) = c3020aee3538563378c1b06e5a27f284bc6d615d7b9179017f7e7d0408bb0c4c
SIZE (grpc-grpc-go-v1.56.3_GH0.tar.gz) = 1944195
SHA256 (munnerz-goautoneg-a7dc8b61c822_GH0.tar.gz) = 3a455e3bcf8237ecee0385f97223ca821ec2547284e827e90f94a4984801ca1c
SIZE (munnerz-goautoneg-a7dc8b61c822_GH0.tar.gz) = 2810
SHA256 (pkg-errors-v0.9.1_GH0.tar.gz) = 56bfd893023daa498508bfe161de1be83299fcf15376035e7df79cbd7d6fa608
SIZE (pkg-errors-v0.9.1_GH0.tar.gz) = 13415
SHA256 (prometheus-client_golang-v1.19.1_GH0.tar.gz) = f707e66fc60a43ae135c493bfd16fd96d5033661d7af80e7c3a10a04212e72b0
SIZE (prometheus-client_golang-v1.19.1_GH0.tar.gz) = 1083469
SHA256 (prometheus-client_model-v0.6.1_GH0.tar.gz) = b9b690bc35d80061f255faa7df7621eae39fe157179ccd78ff6409c3b004f05e
SIZE (prometheus-client_model-v0.6.1_GH0.tar.gz) = 17373
SHA256 (prometheus-common-v0.55.0_GH0.tar.gz) = b9cabec7dadf615ae8bf86414d916f6680bc9e641d7631deaad71422b104ab6b
SIZE (prometheus-common-v0.55.0_GH0.tar.gz) = 147527
SHA256 (prometheus-procfs-v0.15.1_GH0.tar.gz) = ba96bb6d45f1fcbff820c7d844e6acdef4416bb0ff2d9e24656f5cbacb8e46b5
SIZE (prometheus-procfs-v0.15.1_GH0.tar.gz) = 243687
SHA256 (protocolbuffers-protobuf-go-v1.34.2_GH0.tar.gz) = a91d3129e38945b612b7a377364dae324ed3a489c3a805a412805a0cee76e7a2
SIZE (protocolbuffers-protobuf-go-v1.34.2_GH0.tar.gz) = 1522818
SHA256 (uber-jaeger-client-go-v2.25.0_GH0.tar.gz) = 92e34f0d49830c4a15c232a652a55128b0513d1c942195377a1dad4e3f382b99
SIZE (uber-jaeger-client-go-v2.25.0_GH0.tar.gz) = 207404
+30
View File
@@ -0,0 +1,30 @@
#!/bin/sh
# PROVIDE: mtail
# REQUIRE: DAEMON
# KEYWORD: shutdown
#
. /etc/rc.subr
name=mtail
rcvar=mtail_enable
load_rc_config $name
: ${mtail_enable:=NO}
: ${mtail_user:=%%USERS%%}
: ${mtail_args:=""}
pidfile="/var/run/${name}.pid"
procname="%%PREFIX%%/bin/mtail"
command="/usr/sbin/daemon"
command_args="-T ${name} -p ${pidfile} -u ${mtail_user} -f -H %%PREFIX%%/bin/mtail ${mtail_args}"
start_cmd=mtail_start
mtail_start()
{
echo "Starting ${name}."
${command} ${command_args}
}
run_rc_command "$1"
+31
View File
@@ -0,0 +1,31 @@
[
{ type: install
message: <<EOM
To use mtail you will need to provide the service flags you want to
enable via the mtail_args setting in rc.conf. Most important is that
you need to specify a path for -progs and a comma separated list for
-logs which indicates the log files to monitor. The progs directory will
contain the .mtail files which define the rules and patterns it uses to
generate metrics from your log files. You can find examples for some
common services in %%EXAMPLESDIR%%.
A working example for Apache might look like the following:
mkdir -p %%ETCDIR%%
cp %%EXAMPLESDIR%%/apache_common.mtail %%ETCDIR%%/
In rc.conf:
mtail_enable="YES"
mtail_args="-address 127.0.0.1 -port 3903 -progs %%ETCDIR%% -logs /var/log/httpd-access.log"
Now you can start the mtail service and it should begin providing the
Prometheus style metrics on http://127.0.0.1:3903/metrics.
The documentation explaining the syntax can be found in %%DOCSDIR%%.
You may find examples for other common services on the internet.
It is important to ensure the mtail service user can read the log files.
EOM
}
]
+9
View File
@@ -0,0 +1,9 @@
mtail is a tool for extracting metrics from application logs to be
exported into a timeseries database or timeseries calculator for
alerting and dashboarding.
It fills a monitoring niche by being the glue between applications that
do not export their own internal state (other than via logs) and
existing monitoring systems, such that system operators do not need to
patch those applications to instrument them or writing custom extraction
code for every such application.
+34
View File
@@ -0,0 +1,34 @@
bin/mfmt
bin/mtail
%%PORTDOCS%%%%DOCSDIR%%/Building.md
%%PORTDOCS%%%%DOCSDIR%%/Deploying.md
%%PORTDOCS%%%%DOCSDIR%%/Interoperability.md
%%PORTDOCS%%%%DOCSDIR%%/Language.md
%%PORTDOCS%%%%DOCSDIR%%/Metrics.md
%%PORTDOCS%%%%DOCSDIR%%/Programming-Guide.md
%%PORTDOCS%%%%DOCSDIR%%/Testing.md
%%PORTDOCS%%%%DOCSDIR%%/Troubleshooting.md
%%PORTDOCS%%%%DOCSDIR%%/debugging.md
%%PORTDOCS%%%%DOCSDIR%%/faq.md
%%PORTDOCS%%%%DOCSDIR%%/index.md
%%PORTDOCS%%%%DOCSDIR%%/reading-y-output.md
%%PORTDOCS%%%%DOCSDIR%%/references.md
%%PORTDOCS%%%%DOCSDIR%%/state.md
%%PORTDOCS%%%%DOCSDIR%%/style.md
%%PORTEXAMPLES%%%%EXAMPLESDIR%%/apache_combined.mtail
%%PORTEXAMPLES%%%%EXAMPLESDIR%%/apache_common.mtail
%%PORTEXAMPLES%%%%EXAMPLESDIR%%/apache_metrics.mtail
%%PORTEXAMPLES%%%%EXAMPLESDIR%%/dhcpd.mtail
%%PORTEXAMPLES%%%%EXAMPLESDIR%%/histogram.mtail
%%PORTEXAMPLES%%%%EXAMPLESDIR%%/lighttpd.mtail
%%PORTEXAMPLES%%%%EXAMPLESDIR%%/linecount.mtail
%%PORTEXAMPLES%%%%EXAMPLESDIR%%/mysql_slowqueries.mtail
%%PORTEXAMPLES%%%%EXAMPLESDIR%%/nocode.mtail
%%PORTEXAMPLES%%%%EXAMPLESDIR%%/ntpd.mtail
%%PORTEXAMPLES%%%%EXAMPLESDIR%%/ntpd_peerstats.mtail
%%PORTEXAMPLES%%%%EXAMPLESDIR%%/postfix.mtail
%%PORTEXAMPLES%%%%EXAMPLESDIR%%/rails.mtail
%%PORTEXAMPLES%%%%EXAMPLESDIR%%/rsyncd.mtail
%%PORTEXAMPLES%%%%EXAMPLESDIR%%/sftp.mtail
%%PORTEXAMPLES%%%%EXAMPLESDIR%%/timer.mtail
%%PORTEXAMPLES%%%%EXAMPLESDIR%%/vsftpd.mtail