sysutils/logstash: New port: Server-side data ingestion and transformation tool (8.x version)

Logstash is an open source, server-side data processing pipeline that
ingests data from a multitude of sources simultaneously, transforms it,
and then sends it to your favorite "stash."
This commit is contained in:
Jose Alonso Cardenas Marquez 2022-09-10 20:01:45 -05:00
parent 6163087783
commit 887999abeb
8 changed files with 262 additions and 0 deletions

View File

@ -662,6 +662,7 @@
SUBDIR += logstash-forwarder
SUBDIR += logstash6
SUBDIR += logstash7
SUBDIR += logstash8
SUBDIR += logtool
SUBDIR += logwatch
SUBDIR += loki

View File

@ -0,0 +1,88 @@
PORTNAME= logstash
PORTVERSION= 8.4.1
DISTVERSIONSUFFIX= -darwin-x86_64
CATEGORIES= sysutils java
MASTER_SITES= https://artifacts.elastic.co/downloads/logstash/
PKGNAMESUFFIX= 8
MAINTAINER= acm@FreeBSD.org
COMMENT= Server-side data ingestion and transformation tool (8.x version)
WWW= https://www.elastic.co/products/logstash
LICENSE= APACHE20
ONLY_FOR_ARCHS= aarch64 amd64
RUN_DEPENDS= ${LOCALBASE}/bin/bash:shells/bash
USES= cpe shebangfix
CPE_VENDOR= elastic
USE_JAVA= yes
JAVA_VERSION= 11+
JAVA_RUN= yes
USE_RC_SUBR= logstash
SHEBANG_FILES= bin/*
CONFLICTS= logstash6 logstash7
NO_BUILD= yes
SUB_FILES= pkg-message
SUB_LIST= JAVA_HOME=${JAVA_HOME} \
LOGSTASH_HOME=${LOGSTASH_HOME}
WRKSRC= ${WRKDIR}/${PORTNAME}-${DISTVERSION}
USERS= logstash
GROUPS= logstash
LOGSTASH_CONF_FILES= jvm.options log4j2.properties logstash.yml \
pipelines.yml startup.options
LOGSTASH_HOME?= ${PREFIX}/${PORTNAME}
LOGSTASH_JRUBY_BIN_FILES= ast gem irb jgem jirb jirb_swing jruby \
jruby.bash jruby.sh jrubyc rake rdoc ri
LOGSTASH_JRUBY_SUBDIR= vendor/jruby/bin
post-patch:
${REINPLACE_CMD} 's|%%ETCDIR%%|${ETCDIR}|g' ${WRKSRC}/config/logstash.yml
${FIND} ${WRKSRC} -name '*.orig' -delete
do-install:
${FIND} ${WRKSRC} -name '*.bat' -delete
${MKDIR} ${STAGEDIR}${ETCDIR}
${INSTALL_DATA} ${FILESDIR}/logstash.conf.sample ${STAGEDIR}${ETCDIR}
.for x in ${LOGSTASH_CONF_FILES}
${INSTALL_DATA} ${WRKSRC}/config/${x} ${STAGEDIR}${ETCDIR}/${x}.sample
.endfor
${RM} -rf ${WRKSRC}/config
(cd ${WRKSRC} && ${COPYTREE_SHARE} . ${STAGEDIR}${LOGSTASH_HOME})
${CHMOD} ${BINMODE} ${STAGEDIR}${LOGSTASH_HOME}/bin/*
.for x in ${LOGSTASH_JRUBY_BIN_FILES}
${CHMOD} ${BINMODE} ${STAGEDIR}${LOGSTASH_HOME}/${LOGSTASH_JRUBY_SUBDIR}/${x}
.endfor
${FIND} ${STAGEDIR}${LOGSTASH_HOME}/vendor/bundle/jruby/2.6.0/gems \
${STAGEDIR}${LOGSTASH_HOME}/vendor/jruby/lib/ruby/gems/shared/gems \
-type d -empty -delete
${INSTALL} -lrs ${STAGEDIR}${ETCDIR} ${STAGEDIR}${LOGSTASH_HOME}/config
${RM} -rf ${STAGEDIR}${LOGSTASH_HOME}/vendor/jruby/lib/jni
${MKDIR} ${STAGEDIR}${LOGSTASH_HOME}/vendor/jruby/lib/jni
(cd ${WRKSRC}/vendor/jruby/lib/jni && \
${COPYTREE_SHARE} ${ARCH:S/amd64/x86_64/}-FreeBSD \
${STAGEDIR}${LOGSTASH_HOME}/vendor/jruby/lib/jni)
post-install:
${ECHO} "@sample ${ETCDIR}/logstash.conf.sample" >> ${TMPPLIST}
.for x in ${LOGSTASH_CONF_FILES}
${ECHO} "@sample ${ETCDIR}/${x}.sample" >> ${TMPPLIST}
.endfor
${ECHO} "@dir logstash/vendor/bundle/jruby/2.6.0/build_info" >> ${TMPPLIST}
${ECHO} "@dir logstash/vendor/bundle/jruby/2.6.0/cache" >> ${TMPPLIST}
${ECHO} "@dir logstash/vendor/bundle/jruby/2.6.0/doc" >> ${TMPPLIST}
${ECHO} "@dir logstash/vendor/bundle/jruby/2.6.0/extensions" >> ${TMPPLIST}
${ECHO} "@dir logstash/vendor/jruby/lib/ruby/gems/shared/cache" >> ${TMPPLIST}
${FIND} -s ${STAGEDIR}${PREFIX}/logstash -not -type d | ${SORT} | \
${SED} -e 's#^${STAGEDIR}${PREFIX}/##' >> ${TMPPLIST}
${ECHO} "@dir(logstash,logstash,) logstash/data" >> ${TMPPLIST}
.include <bsd.port.mk>

View File

@ -0,0 +1,3 @@
TIMESTAMP = 1662857451
SHA256 (logstash-8.4.1-darwin-x86_64.tar.gz) = 30691b89a014451fbd8bc0735716e5826d56ef549ab1fc2b7e1b1b8097b16f13
SIZE (logstash-8.4.1-darwin-x86_64.tar.gz) = 327204972

View File

@ -0,0 +1,17 @@
# Sample Logstash configuration for creating a simple
# Beats -> Logstash -> Elasticsearch pipeline.
input {
beats {
port => 5044
}
}
output {
elasticsearch {
hosts => ["http://localhost:9200"]
index => "%{[@metadata][beat]}-%{[@metadata][version]}-%{+YYYY.MM.dd}"
#user => "elastic"
#password => "changeme"
}
}

View File

@ -0,0 +1,121 @@
#!/bin/sh
# Configuration settings for logstash in /etc/rc.conf:
#
# PROVIDE: logstash
# REQUIRE: DAEMON
# BEFORE: LOGIN
# KEYWORD: shutdown
#
# logstash_enable (bool):
# Default value: "NO"
# Flag that determines whether Logstash is enabled.
#
# logstash_home (string):
# Default value: "/usr/local/logstash"
# Logstash installation directory.
#
# logstash_config (string):
# Default value: /usr/local/etc/${name}
# Logstash configuration path.
#
# logstash_log (bool):
# Set to "NO" by default.
# Set it to "YES" to enable logstash logging to file
# Default output to /var/log/logstash.log
#
# logstash_log_file (string):
# Default value: "${logdir}/${name}.log"
# Log file path.
#
# logstash_java_home (string):
# Default value: "/usr/local/openjdk8"
# Root directory of the desired Java SDK.
# The JAVA_HOME environment variable is set with the contents of this
# variable.
#
# logstash_java_opts (string):
# Default value: ""
# Options to pass to the Java Virtual Machine.
# The JAVA_OPTS environment variable is set with the contents of this
# variable.
#
# logstash_opts (string):
# Default value: ""
# Additional command line flags for logstash, eg. "-r"
#
. /etc/rc.subr
name=logstash
rcvar=logstash_enable
load_rc_config ${name}
logdir="/var/log"
: ${logstash_enable="NO"}
: ${logstash_user="logstash"}
: ${logstash_group="logstash"}
: ${logstash_home="%%LOGSTASH_HOME%%"}
: ${logstash_config="%%ETCDIR%%"}
: ${logstash_log="YES"}
: ${logstash_log_dir="${logdir}/${name}"}
: ${logstash_java_home="%%JAVA_HOME%%"}
: ${logstash_java_opts=""}
: ${logstash_opts=""}
pidfile=/var/run/${name}/${name}.pid
extra_commands="configtest reload"
start_precmd="logstash_precmd"
configtest_cmd=configtest
logstash_cmd="${logstash_home}/bin/logstash"
procname="${logstash_java_home}/bin/java"
logstash_chdir=${logstash_home}
logstash_log_options=""
if checkyesno logstash_log; then
logstash_log_options=" -l ${logstash_log_dir}"
fi
logstash_args="--path.settings ${logstash_config} ${logstash_log_options} ${logstash_opts}"
JAVA_OPTS="${logstash_java_opts}"
JAVA_HOME="${logstash_java_home}"
export JAVA_OPTS
export JAVA_HOME
command="/usr/sbin/daemon"
command_args="-f -p ${pidfile} ${logstash_cmd} ${logstash_args}"
required_files="${logstash_home} ${logstash_java_home} ${logstash_cmd} ${logstash_config}"
# Include /usr/local/bin in path because Logstash startup scripts
# assume bash is in path.
PATH=/usr/local/bin:$PATH
logstash_precmd()
{
/usr/bin/install -d -o ${logstash_user} -g ${logstash_group} -m 755 ${pidfile%/*}
/usr/bin/install -d -o ${logstash_user} -g ${logstash_group} -m 755 ${logstash_log_dir}
/usr/bin/install -d -o ${logstash_user} -g ${logstash_group} -m 755 /var/db/logstash
/usr/bin/install -d -o ${logstash_user} -g ${logstash_group} -m 755 /var/run/logstash
if [ -d ${logstash_home}/data/queue ]; then
chown ${logstash_user}:${logstash_group} ${logstash_home}/data/queue
fi
}
configtest()
{
echo "${name} configtest:"
echo "WARNING: this does not check validity of Grok patterns!"
echo "WARNING: this does not check validity of Grok patterns!"
echo "WARNING: this does not check validity of Grok patterns!"
${logstash_cmd} --path.settings ${logstash_config} --config.test_and_exit
}
run_rc_command "$1"

View File

@ -0,0 +1,11 @@
--- config/logstash.yml.orig 2018-03-09 15:21:48 UTC
+++ config/logstash.yml
@@ -61,7 +61,7 @@
#
# Where to fetch the pipeline configuration for the main pipeline
#
-# path.config:
+path.config: %%ETCDIR%%/logstash.conf
#
# Pipeline configuration string for the main pipeline
#

View File

@ -0,0 +1,18 @@
[
{ type: install
message: <<EOM
Logstash 8 was installed
1) To start logstash as an agent during startup, add
logstash_enable="YES"
to your /etc/rc.conf.
2) Extra options can be found in startup script.
3) WARNING: In order for logstash to work properly,
you need /proc filesystem mounted.
EOM
}
]

View File

@ -0,0 +1,3 @@
Logstash is an open source, server-side data processing pipeline that
ingests data from a multitude of sources simultaneously, transforms it,
and then sends it to your favorite "stash."