Skip to content

Commit

Permalink
mediamtx: Add cronjob to publish mediamtx metrics to server (#3298)
Browse files Browse the repository at this point in the history
* mediamtx: Add cronjob to publish mediamtx metrics to server

* dockerfile.mediamtx: Replace `ENTRYPOINT` with `CMD`

* mediamtx: Fix cron environment issues
  • Loading branch information
hjpotter92 authored Dec 6, 2024
1 parent b971acc commit 0e1c676
Show file tree
Hide file tree
Showing 3 changed files with 34 additions and 19 deletions.
32 changes: 20 additions & 12 deletions docker/Dockerfile.mediamtx
Original file line number Diff line number Diff line change
@@ -1,23 +1,31 @@
FROM ubuntu:24.04

# we need curl in the image as it's later used in the runOnReady command
RUN apt-get update \
&& apt-get install -y \
RUN apt update \
&& apt install -yqq \
ca-certificates \
curl \
&& apt-get clean \
&& rm -rf /var/lib/apt/lists/*
cron \
&& apt clean \
&& rm -rf /var/lib/apt/lists/* /etc/cron.*

COPY --chmod=0644 crontab /etc/crontab

# Setup cron job for publishing metrics
RUN mkdir -p /var/log/ \
&& crontab /etc/crontab \
&& touch /var/log/cron.log

COPY --chmod=0755 mediamtx-metrics.bash /opt/mediamtx-metrics.bash

ENV MEDIAMTX_VERSION="1.9.3"

ADD "https://github.com/bluenviron/mediamtx/releases/download/v${MEDIAMTX_VERSION}/mediamtx_v${MEDIAMTX_VERSION}_linux_amd64.tar.gz" /opt/mediamtx.tar.gz
ADD "https://github.com/bluenviron/mediamtx/releases/download/v${MEDIAMTX_VERSION}/mediamtx_v${MEDIAMTX_VERSION}_linux_amd64.tar.gz" /opt/mediamtx/mediamtx.tar.gz

RUN tar xzf /opt/mediamtx.tar.gz -C /opt/ \
RUN tar xzf /opt/mediamtx/mediamtx.tar.gz -C /opt/mediamtx/ \
&& mkdir -p /usr/local/bin /etc/mediamtx/ \
&& mv /opt/mediamtx /usr/local/bin/mediamtx \
&& mv /opt/mediamtx.yml /etc/mediamtx/mediamtx.yml \
&& rm -rf /opt/

COPY mediamtx-entry.bash /
&& mv /opt/mediamtx/mediamtx /usr/local/bin/mediamtx \
&& mv /opt/mediamtx/mediamtx.yml /etc/mediamtx/mediamtx.yml \
&& rm -rf /opt/mediamtx/

ENTRYPOINT ["/mediamtx-entry.bash"]
CMD [ "/bin/bash", "-c", "declare -p >> /etc/environment && cron && /usr/local/bin/mediamtx" ]
4 changes: 4 additions & 0 deletions docker/crontab
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
SHELL=/bin/bash
BASH_ENV=/etc/environment

*/5 * * * * /opt/mediamtx-metrics.bash >> /var/log/cron.log 2>&1
17 changes: 10 additions & 7 deletions docker/mediamtx-entry.bash → docker/mediamtx-metrics.bash
Original file line number Diff line number Diff line change
Expand Up @@ -5,15 +5,18 @@
set -euo pipefail

if [ -v LP_PUBLISH_MEDIAMTX_METRICS ]; then
if [ -z "$LP_PUBLISH_MEDIAMTX_METRICS_ENDPOINT" ]; then
echo >&2 "No endpoint specified for publishing mediamtx metrics."
fi
cat <<EOF |
METRIC_DATA=$(
cat <<EOF
# HELP version Current software version as a tag, always 1
# TYPE version gauge
version{app="MediaMTX",version="$MEDIAMTX_VERSION",region="$MEDIAMTX_REGION",ecosystem="$MEDIAMTX_ECOSYSTEM"} 1
EOF
curl -X POST --data-binary @- "$LP_PUBLISH_MEDIAMTX_METRICS_ENDPOINT"
fi
)
echo "$METRIC_DATA"

exec "${@:-/usr/local/bin/mediamtx}"
if [ -z "$LP_PUBLISH_MEDIAMTX_METRICS_ENDPOINT" ]; then
echo >&2 "No endpoint specified for publishing mediamtx metrics."
exit 1
fi
echo "$METRIC_DATA" | curl -X POST --data-binary @- "$LP_PUBLISH_MEDIAMTX_METRICS_ENDPOINT"
fi

0 comments on commit 0e1c676

Please sign in to comment.