多租户更改
This commit is contained in:
@@ -0,0 +1,37 @@
|
||||
FROM alpine:3.14
|
||||
|
||||
ARG VERSION=0.16.4
|
||||
ENV VERSION=$VERSION
|
||||
|
||||
LABEL maintainer="Tinode Team <info@tinode.co>"
|
||||
LABEL name="TinodeMetricExporter"
|
||||
LABEL version=$VERSION
|
||||
|
||||
ENV SERVE_FOR=""
|
||||
ENV WAIT_FOR=""
|
||||
|
||||
ENV TINODE_ADDR=http://localhost/stats/expvar/
|
||||
ENV INSTANCE="exporter-instance"
|
||||
|
||||
ENV INFLUXDB_VERSION=1.7
|
||||
ENV INFLUXDB_ORGANIZATION="org"
|
||||
ENV INFLUXDB_PUSH_INTERVAL=60
|
||||
ENV INFLUXDB_PUSH_ADDRESS=""
|
||||
ENV INFLUXDB_AUTH_TOKEN=""
|
||||
|
||||
ENV PROM_NAMESPACE="tinode"
|
||||
ENV PROM_METRICS_PATH="/metrics"
|
||||
|
||||
WORKDIR /opt/tinode
|
||||
|
||||
RUN apk add --no-cache bash
|
||||
|
||||
# Fetch exporter build from Github.
|
||||
ADD https://github.com/tinode/chat/releases/download/v$VERSION/exporter.linux-amd64 ./exporter
|
||||
|
||||
COPY entrypoint.sh .
|
||||
RUN chmod +x exporter && chmod +x entrypoint.sh
|
||||
|
||||
ENTRYPOINT ./entrypoint.sh
|
||||
|
||||
EXPOSE 6222
|
||||
|
||||
Regular → Executable
+74
@@ -0,0 +1,74 @@
|
||||
#!/bin/bash
|
||||
|
||||
# Check if environment variables (provided as argument list) are set.
|
||||
function check_vars() {
|
||||
local varnames=( "$@" )
|
||||
for varname in "${varnames[@]}"
|
||||
do
|
||||
eval value=\$${varname}
|
||||
if [ -z "$value" ] ; then
|
||||
echo "$varname env var must be specified."
|
||||
exit 1
|
||||
fi
|
||||
done
|
||||
}
|
||||
|
||||
# Make sure the system uses /etc/hosts when resolving domain names
|
||||
# (needed for docker-compose's `extra_hosts` param to work correctly).
|
||||
# See https://github.com/gliderlabs/docker-alpine/issues/367,
|
||||
# https://github.com/golang/go/issues/35305 for details.
|
||||
echo "hosts: files dns" > /etc/nsswitch.conf
|
||||
|
||||
# Accept http requests at.
|
||||
LISTEN_AT=":6222"
|
||||
|
||||
# Required env vars.
|
||||
common_vars=( TINODE_ADDR INSTANCE SERVE_FOR )
|
||||
|
||||
influx_varnames=( INFLUXDB_VERSION INFLUXDB_ORGANIZATION INFLUXDB_PUSH_INTERVAL \
|
||||
INFLUXDB_PUSH_ADDRESS INFLUXDB_AUTH_TOKEN )
|
||||
|
||||
prometheus_varnames=( PROM_NAMESPACE PROM_METRICS_PATH )
|
||||
|
||||
check_vars "${common_vars[@]}"
|
||||
|
||||
# Common arguments.
|
||||
args=("--tinode_addr=${TINODE_ADDR}" "--instance=${INSTANCE}" "--listen_at=${LISTEN_AT}" "--serve_for=${SERVE_FOR}")
|
||||
|
||||
# Platform-specific arguments.
|
||||
case "$SERVE_FOR" in
|
||||
"prometheus")
|
||||
check_vars "${prometheus_varnames[@]}"
|
||||
args+=("--prom_namespace=${PROM_NAMESPACE}" "--prom_metrics_path=${PROM_METRICS_PATH}")
|
||||
if [ ! -z "$PROM_TIMEOUT" ]; then
|
||||
args+=("--prom_timeout=${PROM_TIMEOUT}")
|
||||
fi
|
||||
;;
|
||||
"influxdb")
|
||||
check_vars "${influxdb_varnames[@]}"
|
||||
args+=("--influx_db_version=${INFLUXDB_VERSION}" \
|
||||
"--influx_organization=${INFLUXDB_ORGANIZATION}" \
|
||||
"--influx_push_interval=${INFLUXDB_PUSH_INTERVAL}" \
|
||||
"--influx_push_addr=${INFLUXDB_PUSH_ADDRESS}" \
|
||||
"--influx_auth_token=${INFLUXDB_AUTH_TOKEN}")
|
||||
if [ ! -z "$INFLUXDB_BUCKET" ]; then
|
||||
args+=("--influx_bucket=${INFLUXDB_BUCKET}")
|
||||
fi
|
||||
;;
|
||||
*)
|
||||
echo "\$SERVE_FOR must be set to either 'prometheus' or 'influxdb'"
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
|
||||
# Wait for Tinode server if needed.
|
||||
if [ ! -z "$WAIT_FOR" ] ; then
|
||||
IFS=':' read -ra TND <<< "$WAIT_FOR"
|
||||
if [ ${#TND[@]} -ne 2 ]; then
|
||||
echo "\$WAIT_FOR (${WAIT_FOR}) env var should be in form HOST:PORT"
|
||||
exit 1
|
||||
fi
|
||||
until nc -z -v -w5 ${TND[0]} ${TND[1]}; do echo "waiting for ${WAIT_FOR}..."; sleep 5; done
|
||||
fi
|
||||
|
||||
./exporter "${args[@]}"
|
||||
|
||||
Reference in New Issue
Block a user