Skip to content

Commit

Permalink
feat: add redis metrics support
Browse files Browse the repository at this point in the history
  • Loading branch information
pcfreak30 committed Dec 29, 2024
1 parent 1832dd4 commit 687df0c
Show file tree
Hide file tree
Showing 2 changed files with 55 additions and 13 deletions.
25 changes: 13 additions & 12 deletions Dockerfile
Original file line number Diff line number Diff line change
@@ -1,8 +1,15 @@
# Define base image version
ARG VALKEY_VERSION=8-alpine
ARG METRICS_EXPORTER_VERSION=develop
ARG METRICS_REGISTRAR_VERSION=develop

FROM ghcr.io/lumeweb/akash-metrics-exporter:${METRICS_EXPORTER_VERSION} AS metrics-exporter
FROM ghcr.io/lumeweb/akash-metrics-registrar:${METRICS_REGISTRAR_VERSION} AS metrics-registrar

# Build redis_exporter
FROM golang:1.21-alpine AS redis-exporter
RUN CGO_ENABLED=0 go install github.com/oliver006/redis_exporter@latest

# Extend from valgrind
FROM valkey/valkey:${VALKEY_VERSION}

Expand All @@ -26,21 +33,15 @@ RUN wget https://dl.min.io/client/mc/release/linux-amd64/mc \
RUN wget https://github.com/aptible/supercronic/releases/download/v${SUPERCRONIC_VERSION}/supercronic-linux-amd64 -O /usr/local/bin/supercronic \
&& chmod +x /usr/local/bin/supercronic

# Environment variables for S3 backup configuration
ENV ENABLE_BACKUP=false
ENV S3_ENDPOINT=""
ENV S3_ACCESS_KEY=""
ENV S3_SECRET_KEY=""
ENV S3_BUCKET=""
ENV BACKUP_RETENTION_DAYS=7
ENV BACKUP_PREFIX="valkey-backup"
ENV BACKUP_SCHEDULE="0 0 * * *"
# Copy binaries from build stages
COPY --from=metrics-exporter /usr/bin/metrics-exporter /usr/local/bin/akash-metrics-exporter
COPY --from=redis-exporter /go/bin/redis_exporter /usr/local/bin/
COPY --from=metrics-registrar /usr/bin/metrics-registrar /usr/local/bin/akash-metrics-registrar

# Copy our scripts
COPY backup.sh /usr/local/bin/
COPY entrypoint.sh /entrypoint.sh
COPY --from=metrics-exporter /usr/bin/metrics-exporter /usr/bin/akash-metrics-exporter

ENTRYPOINT ["/entrypoint.sh"]
EXPOSE 6379
CMD ["valkey-server"]

CMD ["valkey-server"]
43 changes: 42 additions & 1 deletion entrypoint.sh
Original file line number Diff line number Diff line change
Expand Up @@ -75,7 +75,48 @@ if [ "$BACKUP_ENABLED" = "true" ]; then
supercronic /etc/crontab &
fi

akash-metrics-exporter &
# Start metrics components if METRICS_PASSWORD is set
if [ -n "$METRICS_PASSWORD" ]; then
# Start redis_exporter with authentication
redis_exporter --redis.addr="redis://127.0.0.1:${VALKEY_PORT}" \
--redis.password="$METRICS_PASSWORD" \
--web.listen-address=":9121" &

# Detect environment type from deployment name
env_type="prod"
case "${AKASH_DEPLOYMENT_SEQUENCE}" in
*dev*) env_type="dev" ;;
*stage* | *staging*) env_type="stage" ;;
*test*) env_type="test" ;;
esac

# Process service name to inject metrics before environment suffix
service_name="${METRICS_SERVICE_NAME:-valkey}"
case "$service_name" in
*-prod)
metrics_service_name="$(echo "$service_name" | sed 's/-prod$/-metrics-prod/')" ;;
*-dev)
metrics_service_name="$(echo "$service_name" | sed 's/-dev$/-metrics-dev/')" ;;
*-stage)
metrics_service_name="$(echo "$service_name" | sed 's/-stage$/-metrics-stage/')" ;;
*-test)
metrics_service_name="$(echo "$service_name" | sed 's/-test$/-metrics-test/')" ;;
*)
metrics_service_name="${service_name}-metrics-${env_type}" ;;
esac

# Start Akash metrics registrar
akash-metrics-registrar \
--target-host="localhost" \
--target-port=9121 \
--target-path="/metrics" \
--proxy-port=9090 \
--service-name="${metrics_service_name}" \
--metrics-password="${METRICS_PASSWORD}" &

# Start metrics-exporter
akash-metrics-exporter &
fi

# Delegate to the original entrypoint script with our generated config
exec /usr/local/bin/docker-entrypoint.sh valkey-server "$CONFIG_FILE"

0 comments on commit 687df0c

Please sign in to comment.