From 5b20ead8b3a8be5cf770d5cb7b32d8a45f652ce1 Mon Sep 17 00:00:00 2001 From: Marc BENSLAHDINE Date: Sun, 3 Apr 2022 01:20:36 +0200 Subject: [PATCH 1/9] use variables to manage exporter args --- Dockerfile | 28 ++++++++++++++++++++++------ entrypoint.sh | 12 ++++++++++++ 2 files changed, 34 insertions(+), 6 deletions(-) create mode 100644 entrypoint.sh diff --git a/Dockerfile b/Dockerfile index 2db52cf..696d105 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,13 +1,29 @@ -FROM golang as builder -COPY . /go/src/github.com/vierbergenlars/bareos_exporter +FROM golang:1.18.0 as builder + +RUN apt-get update \ + && apt-get install -y upx + WORKDIR /go/src/github.com/vierbergenlars/bareos_exporter +COPY . . + RUN go get -v . RUN CGO_ENABLED=0 GOOS=linux go build -a -installsuffix cgo -o bareos_exporter . +RUN upx bareos_exporter -FROM busybox:latest - +FROM busybox:1.34.1 WORKDIR /bareos_exporter COPY --from=builder /go/src/github.com/vierbergenlars/bareos_exporter/bareos_exporter bareos_exporter +COPY entrypoint.sh /entrypoint.sh +RUN chmod u+x /entrypoint.sh + +ENV PORT 9625 +ENV DB_TYPE postgres +ENV DB_HOST localhost +ENV DB_PORT 5432 +ENV DB_NAME bareos +ENV DB_USER bareos +ENV SSL_MODE disable +ENV WAIT_FOR_DB 0 -ENTRYPOINT ["./bareos_exporter"] -EXPOSE $port +EXPOSE $PORT +ENTRYPOINT ["/entrypoint.sh"] diff --git a/entrypoint.sh b/entrypoint.sh new file mode 100644 index 0000000..7ee29d5 --- /dev/null +++ b/entrypoint.sh @@ -0,0 +1,12 @@ +#!/bin/env sh +#set -x + +#Wait for DB init +sleep ${WAIT_FOR_DB} + +# Run Dockerfile CMD +if [ -z "$@" ]; then + exec ./bareos_exporter -port ${PORT} -dsn "postgres://host=${DB_HOST} dbname=${DB_NAME} sslmode=${SSL_MODE} user=${DB_USER} password=${DB_PASSWORD}" +else + exec "$@" +fi From 3e2d51b2c463e5c60b75ff3ebc198e8fecdc874e Mon Sep 17 00:00:00 2001 From: Marc BENSLAHDINE Date: Sun, 3 Apr 2022 01:53:32 +0200 Subject: [PATCH 2/9] add mysql config --- Dockerfile | 2 ++ entrypoint.sh | 8 ++++++-- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/Dockerfile b/Dockerfile index 696d105..0585a03 100644 --- a/Dockerfile +++ b/Dockerfile @@ -23,6 +23,8 @@ ENV DB_PORT 5432 ENV DB_NAME bareos ENV DB_USER bareos ENV SSL_MODE disable +ENV ENDPOINT /metrics +ENV JOB_DAYS 7 ENV WAIT_FOR_DB 0 EXPOSE $PORT diff --git a/entrypoint.sh b/entrypoint.sh index 7ee29d5..4d8f1ae 100644 --- a/entrypoint.sh +++ b/entrypoint.sh @@ -1,12 +1,16 @@ #!/bin/env sh #set -x -#Wait for DB init +# Wait for DB (default 0) sleep ${WAIT_FOR_DB} # Run Dockerfile CMD if [ -z "$@" ]; then - exec ./bareos_exporter -port ${PORT} -dsn "postgres://host=${DB_HOST} dbname=${DB_NAME} sslmode=${SSL_MODE} user=${DB_USER} password=${DB_PASSWORD}" + if [ "${DB_TYPE}" == 'posgtres' ]; then + exec ./bareos_exporter -endpoint ${ENDPOINT} -job-discovery-days ${JOB_DAYS} -port ${PORT} -dsn "${DB_TYPE}://host=${DB_HOST} dbname=${DB_NAME} sslmode=${SSL_MODE} user=${DB_USER} password=${DB_PASSWORD} port=${DB_PORT} ${EXTRA_OPTS}" + else + exec ./bareos_exporter -endpoint ${ENDPOINT} -job-discovery-days ${JOB_DAYS} -port ${PORT} -dsn "${DB_TYPE}://${DB_USER}:${DB_PASSWORD}@tcp(${DB_HOST}:${DB_PORT})/${DB_NAME}" + fi else exec "$@" fi From 7a2ff33aa10bb64ff5f77fc04e0790cb94f9c21a Mon Sep 17 00:00:00 2001 From: Marc BENSLAHDINE Date: Sun, 3 Apr 2022 01:57:27 +0200 Subject: [PATCH 3/9] fix db_type --- entrypoint.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/entrypoint.sh b/entrypoint.sh index 4d8f1ae..7c661b7 100644 --- a/entrypoint.sh +++ b/entrypoint.sh @@ -6,7 +6,7 @@ sleep ${WAIT_FOR_DB} # Run Dockerfile CMD if [ -z "$@" ]; then - if [ "${DB_TYPE}" == 'posgtres' ]; then + if [ "${DB_TYPE}" == 'postgres' ]; then exec ./bareos_exporter -endpoint ${ENDPOINT} -job-discovery-days ${JOB_DAYS} -port ${PORT} -dsn "${DB_TYPE}://host=${DB_HOST} dbname=${DB_NAME} sslmode=${SSL_MODE} user=${DB_USER} password=${DB_PASSWORD} port=${DB_PORT} ${EXTRA_OPTS}" else exec ./bareos_exporter -endpoint ${ENDPOINT} -job-discovery-days ${JOB_DAYS} -port ${PORT} -dsn "${DB_TYPE}://${DB_USER}:${DB_PASSWORD}@tcp(${DB_HOST}:${DB_PORT})/${DB_NAME}" From 5515283c2124d0ed89811525676de7064a9da904 Mon Sep 17 00:00:00 2001 From: Marc BENSLAHDINE Date: Sun, 3 Apr 2022 11:12:24 +0200 Subject: [PATCH 4/9] add parsetime for mysql dsn --- entrypoint.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/entrypoint.sh b/entrypoint.sh index 7c661b7..3d6cec4 100644 --- a/entrypoint.sh +++ b/entrypoint.sh @@ -9,7 +9,7 @@ if [ -z "$@" ]; then if [ "${DB_TYPE}" == 'postgres' ]; then exec ./bareos_exporter -endpoint ${ENDPOINT} -job-discovery-days ${JOB_DAYS} -port ${PORT} -dsn "${DB_TYPE}://host=${DB_HOST} dbname=${DB_NAME} sslmode=${SSL_MODE} user=${DB_USER} password=${DB_PASSWORD} port=${DB_PORT} ${EXTRA_OPTS}" else - exec ./bareos_exporter -endpoint ${ENDPOINT} -job-discovery-days ${JOB_DAYS} -port ${PORT} -dsn "${DB_TYPE}://${DB_USER}:${DB_PASSWORD}@tcp(${DB_HOST}:${DB_PORT})/${DB_NAME}" + exec ./bareos_exporter -endpoint ${ENDPOINT} -job-discovery-days ${JOB_DAYS} -port ${PORT} -dsn "${DB_TYPE}://${DB_USER}:${DB_PASSWORD}@tcp(${DB_HOST}:${DB_PORT})/${DB_NAME}?parseTime=true" fi else exec "$@" From 94f88914b89a7f487f497fb6250b83cb3d9cb08e Mon Sep 17 00:00:00 2001 From: Marc BENSLAHDINE Date: Sun, 3 Apr 2022 11:51:01 +0200 Subject: [PATCH 5/9] update usage info --- README.md | 33 +++++++++++++++++++++++++++++---- 1 file changed, 29 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 9a06bf7..97233d6 100644 --- a/README.md +++ b/README.md @@ -6,12 +6,37 @@ ## [`Dockerfile`](./Dockerfile) ## Usage with [docker](https://hub.docker.com/r/vierbergenlnars/bareos_exporter) -1. Create a file containing your mysql password and mount it inside `/bareos_exporter/pw/auth` -2. **(optional)** [Overwrite](https://docs.docker.com/engine/reference/run/#env-environment-variables) default args using ENV variables -3. Run docker image as follows + +1. Create a .env file containing at least your database password using `DB_PASSWORD` variable. +2. Run docker image as follows + +Using default variables (expected DB_PASSWORD) +```bash +docker run --name bareos_exporter -p 9625:9625 -d vierbergenlars/bareos_exporter:latest +``` + +Using custom variables ```bash -docker run --name bareos_exporter -p 9625:9625 -d vierbergenlars/bareos_exporter:latest -dsn mysql://user:password@host/dbname +docker run --name bareos_exporter -p 9625:9625 -e DB_TYPE=mysql -e DB_NAME=bareos-dir -d vierbergenlars/bareos_exporter:latest ``` + +Using custom Docker CMD +```bash +docker run --name bareos_exporter -p 9625:9625 -d vierbergenlars/bareos_exporter:latest ./bareos_exporter -dsn 'mysql://login:password@tcp(host:port)/dbname?parseTime=true' +``` + +### Default variables + +`DB_TYPE` postgres +`DB_HOST` localhost +`DB_PORT` 5432 (postgres) +`DB_USER` bareos +`DB_NAME` bareos +`SSL_MODE` disable +`ENDPOINT` /metrics +`JOB_DAYS` 7 +`WAIT_FOR_DB` 0 + ## Metrics ### Aggregated metrics for all jobs From 155f5462595f21877f1b5ac727f5e36db0a7cfaa Mon Sep 17 00:00:00 2001 From: Marc BENSLAHDINE Date: Sun, 3 Apr 2022 11:52:38 +0200 Subject: [PATCH 6/9] update usage info --- README.md | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/README.md b/README.md index 97233d6..6ac5285 100644 --- a/README.md +++ b/README.md @@ -27,15 +27,15 @@ docker run --name bareos_exporter -p 9625:9625 -d vierbergenlars/bareos_exporter ### Default variables -`DB_TYPE` postgres -`DB_HOST` localhost -`DB_PORT` 5432 (postgres) -`DB_USER` bareos -`DB_NAME` bareos -`SSL_MODE` disable -`ENDPOINT` /metrics -`JOB_DAYS` 7 -`WAIT_FOR_DB` 0 +* `DB_TYPE` postgres +* `DB_HOST` localhost +* `DB_PORT` 5432 (postgres) +* `DB_USER` bareos +* `DB_NAME` bareos +* `SSL_MODE` disable +* `ENDPOINT` /metrics +* `JOB_DAYS` 7 +* `WAIT_FOR_DB` 0 ## Metrics From d713ba634b434c2730a149f2348e617305d5d974 Mon Sep 17 00:00:00 2001 From: Marc BENSLAHDINE Date: Sun, 3 Apr 2022 12:35:10 +0200 Subject: [PATCH 7/9] add default CMD --- Dockerfile | 1 + entrypoint.sh | 4 ++-- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/Dockerfile b/Dockerfile index 0585a03..fc17938 100644 --- a/Dockerfile +++ b/Dockerfile @@ -29,3 +29,4 @@ ENV WAIT_FOR_DB 0 EXPOSE $PORT ENTRYPOINT ["/entrypoint.sh"] +CMD ["./bareos_exporter"] diff --git a/entrypoint.sh b/entrypoint.sh index 3d6cec4..4ee224e 100644 --- a/entrypoint.sh +++ b/entrypoint.sh @@ -5,12 +5,12 @@ sleep ${WAIT_FOR_DB} # Run Dockerfile CMD -if [ -z "$@" ]; then +if [ "$#" -eq 1 -a "$1" == './bareos_exporter' ]; then if [ "${DB_TYPE}" == 'postgres' ]; then exec ./bareos_exporter -endpoint ${ENDPOINT} -job-discovery-days ${JOB_DAYS} -port ${PORT} -dsn "${DB_TYPE}://host=${DB_HOST} dbname=${DB_NAME} sslmode=${SSL_MODE} user=${DB_USER} password=${DB_PASSWORD} port=${DB_PORT} ${EXTRA_OPTS}" else exec ./bareos_exporter -endpoint ${ENDPOINT} -job-discovery-days ${JOB_DAYS} -port ${PORT} -dsn "${DB_TYPE}://${DB_USER}:${DB_PASSWORD}@tcp(${DB_HOST}:${DB_PORT})/${DB_NAME}?parseTime=true" fi else - exec "$@" + exec "$@" fi From f5bfd33ed8ef325b5343d235e3c44ad7a607a015 Mon Sep 17 00:00:00 2001 From: Marc BENSLAHDINE Date: Sun, 3 Apr 2022 23:53:58 +0200 Subject: [PATCH 8/9] improvement --- README.md | 22 ++++++++++------------ entrypoint.sh | 16 ++++++++++++---- 2 files changed, 22 insertions(+), 16 deletions(-) diff --git a/README.md b/README.md index 6ac5285..2ac0125 100644 --- a/README.md +++ b/README.md @@ -10,33 +10,31 @@ 1. Create a .env file containing at least your database password using `DB_PASSWORD` variable. 2. Run docker image as follows -Using default variables (expected DB_PASSWORD) -```bash -docker run --name bareos_exporter -p 9625:9625 -d vierbergenlars/bareos_exporter:latest -``` +### Using environment variables -Using custom variables ```bash docker run --name bareos_exporter -p 9625:9625 -e DB_TYPE=mysql -e DB_NAME=bareos-dir -d vierbergenlars/bareos_exporter:latest ``` -Using custom Docker CMD -```bash -docker run --name bareos_exporter -p 9625:9625 -d vierbergenlars/bareos_exporter:latest ./bareos_exporter -dsn 'mysql://login:password@tcp(host:port)/dbname?parseTime=true' -``` - -### Default variables +Default variables: +* `PORT` 9625 (exporter) * `DB_TYPE` postgres * `DB_HOST` localhost * `DB_PORT` 5432 (postgres) * `DB_USER` bareos * `DB_NAME` bareos -* `SSL_MODE` disable +* `SSL_MODE` disable (postgres only) * `ENDPOINT` /metrics * `JOB_DAYS` 7 * `WAIT_FOR_DB` 0 +### Using custom Docker CMD + +```bash +docker run --name bareos_exporter -p 9625:9625 -d vierbergenlars/bareos_exporter:latest -dsn 'mysql://login:password@tcp(host:port)/dbname?parseTime=true' +``` + ## Metrics ### Aggregated metrics for all jobs diff --git a/entrypoint.sh b/entrypoint.sh index 4ee224e..8044acc 100644 --- a/entrypoint.sh +++ b/entrypoint.sh @@ -5,12 +5,20 @@ sleep ${WAIT_FOR_DB} # Run Dockerfile CMD -if [ "$#" -eq 1 -a "$1" == './bareos_exporter' ]; then +if [ "$1" == './bareos_exporter' ]; then + if [ -z "${DB_TYPE}" ]; then + echo 'Error: DB_TYPE is empty' + exit 1 + fi + if [ -z "${DB_PASSWORD}" ]; then + echo 'Warning: DB_PASSWORD is empty' + fi if [ "${DB_TYPE}" == 'postgres' ]; then - exec ./bareos_exporter -endpoint ${ENDPOINT} -job-discovery-days ${JOB_DAYS} -port ${PORT} -dsn "${DB_TYPE}://host=${DB_HOST} dbname=${DB_NAME} sslmode=${SSL_MODE} user=${DB_USER} password=${DB_PASSWORD} port=${DB_PORT} ${EXTRA_OPTS}" - else + exec ./bareos_exporter -endpoint ${ENDPOINT} -job-discovery-days ${JOB_DAYS} -port ${PORT} -dsn "${DB_TYPE}://host=${DB_HOST} dbname=${DB_NAME} sslmode=${SSL_MODE} user=${DB_USER} password=${DB_PASSWORD} port=${DB_PORT}" + fi + if [ "${DB_TYPE}" == 'mysql' ]; then exec ./bareos_exporter -endpoint ${ENDPOINT} -job-discovery-days ${JOB_DAYS} -port ${PORT} -dsn "${DB_TYPE}://${DB_USER}:${DB_PASSWORD}@tcp(${DB_HOST}:${DB_PORT})/${DB_NAME}?parseTime=true" fi else - exec "$@" + exec ./bareos_exporter "$@" fi From 1132fd4c54a1518ef1588629866e742b99853ba4 Mon Sep 17 00:00:00 2001 From: Marc BENSLAHDINE Date: Mon, 4 Apr 2022 00:08:39 +0200 Subject: [PATCH 9/9] add troubleshooting --- README.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/README.md b/README.md index 2ac0125..77ea576 100644 --- a/README.md +++ b/README.md @@ -35,6 +35,12 @@ Default variables: docker run --name bareos_exporter -p 9625:9625 -d vierbergenlars/bareos_exporter:latest -dsn 'mysql://login:password@tcp(host:port)/dbname?parseTime=true' ``` +### Troubleshooting + +```bash +docker run --name bareos_exporter -t -i --rm --entrypoint=/bin/sh vierbergenlars/bareos_exporter:latest +``` + ## Metrics ### Aggregated metrics for all jobs