From cfe22338a95c8470e365d40fdfd916920073543d Mon Sep 17 00:00:00 2001 From: Alessandro Sottile Date: Fri, 22 Jan 2021 20:02:35 +0100 Subject: [PATCH 01/11] add dockerfile --- Dockerfile | 13 +++++++++++++ 1 file changed, 13 insertions(+) create mode 100644 Dockerfile diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..4ddb8fd --- /dev/null +++ b/Dockerfile @@ -0,0 +1,13 @@ +FROM golang:rc-alpine3.13 AS builder +RUN go get github.com/sberk42/fritzbox_exporter/ + +FROM alpine:latest +ARG USERNAME PASSWORD GWURL +ENV USERNAME ${USERNAME} && \ +PASSWORD ${PASSWORD} && \ +GWURL ${GWURL} +WORKDIR /root/ +COPY --from=builder /go/bin/fritzbox_exporter . +COPY metrics.json metrics-lua.json ./ +EXPOSE 9042 +ENTRYPOINT ./fritzbox_exporter -gateway-url ${GWURL} -password ${PASSWORD} -username ${USERNAME} -listen-address 0.0.0.0:9042 From e2d5bbfcd938440511365e206c6223e6d2dd51b2 Mon Sep 17 00:00:00 2001 From: Lukas Wolfsteiner Date: Mon, 15 Feb 2021 02:33:58 +0100 Subject: [PATCH 02/11] Remove unneeded build arguments --- Dockerfile | 1 - 1 file changed, 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index 4ddb8fd..df22c03 100644 --- a/Dockerfile +++ b/Dockerfile @@ -2,7 +2,6 @@ FROM golang:rc-alpine3.13 AS builder RUN go get github.com/sberk42/fritzbox_exporter/ FROM alpine:latest -ARG USERNAME PASSWORD GWURL ENV USERNAME ${USERNAME} && \ PASSWORD ${PASSWORD} && \ GWURL ${GWURL} From 009e3fcbe36f6d52f53a82f72acbd5641d09d260 Mon Sep 17 00:00:00 2001 From: Lukas Wolfsteiner Date: Mon, 15 Feb 2021 03:03:49 +0100 Subject: [PATCH 03/11] Simplify environment variable declarations --- Dockerfile | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Dockerfile b/Dockerfile index df22c03..47ab31b 100644 --- a/Dockerfile +++ b/Dockerfile @@ -2,9 +2,9 @@ FROM golang:rc-alpine3.13 AS builder RUN go get github.com/sberk42/fritzbox_exporter/ FROM alpine:latest -ENV USERNAME ${USERNAME} && \ -PASSWORD ${PASSWORD} && \ -GWURL ${GWURL} +ENV USERNAME="username" +ENV PASSWORD="password" +ENV GATEWAY_URL="http://fritz.box:49000" WORKDIR /root/ COPY --from=builder /go/bin/fritzbox_exporter . COPY metrics.json metrics-lua.json ./ From 9e1b95bad060e83c371c4a7e617739f400fc061d Mon Sep 17 00:00:00 2001 From: Lukas Wolfsteiner Date: Mon, 15 Feb 2021 03:05:47 +0100 Subject: [PATCH 04/11] Allow LISTEN_ADDRESS environment variable --- Dockerfile | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/Dockerfile b/Dockerfile index 47ab31b..be8954d 100644 --- a/Dockerfile +++ b/Dockerfile @@ -2,11 +2,14 @@ FROM golang:rc-alpine3.13 AS builder RUN go get github.com/sberk42/fritzbox_exporter/ FROM alpine:latest -ENV USERNAME="username" -ENV PASSWORD="password" -ENV GATEWAY_URL="http://fritz.box:49000" +ENV USERNAME username +ENV PASSWORD password +ENV GATEWAY_URL http://fritz.box:49000 +ENV LISTEN_ADDRESS 0.0.0.0:9042 WORKDIR /root/ COPY --from=builder /go/bin/fritzbox_exporter . COPY metrics.json metrics-lua.json ./ EXPOSE 9042 -ENTRYPOINT ./fritzbox_exporter -gateway-url ${GWURL} -password ${PASSWORD} -username ${USERNAME} -listen-address 0.0.0.0:9042 +ENTRYPOINT [ "./fritzbox_exporter" ] +CMD ./fritzbox_exporter -username $USERNAME -password $PASSWORD +ENTRYPOINT ./fritzbox_exporter -gateway-url ${GWURL} -password ${PASSWORD} -username ${USERNAME} -listen-address ${LISTEN_ADDRESS} From 238b68fbd35d8b14781d99f71e06009ed9e70eec Mon Sep 17 00:00:00 2001 From: Lukas Wolfsteiner Date: Mon, 15 Feb 2021 03:07:31 +0100 Subject: [PATCH 05/11] Define ENTRYPOINT according to exec format --- Dockerfile | 2 -- 1 file changed, 2 deletions(-) diff --git a/Dockerfile b/Dockerfile index be8954d..a529b27 100644 --- a/Dockerfile +++ b/Dockerfile @@ -11,5 +11,3 @@ COPY --from=builder /go/bin/fritzbox_exporter . COPY metrics.json metrics-lua.json ./ EXPOSE 9042 ENTRYPOINT [ "./fritzbox_exporter" ] -CMD ./fritzbox_exporter -username $USERNAME -password $PASSWORD -ENTRYPOINT ./fritzbox_exporter -gateway-url ${GWURL} -password ${PASSWORD} -username ${USERNAME} -listen-address ${LISTEN_ADDRESS} From 0d2642e30464d8e86f57c0a56391fa40bc3fe501 Mon Sep 17 00:00:00 2001 From: Lukas Wolfsteiner Date: Mon, 15 Feb 2021 03:07:57 +0100 Subject: [PATCH 06/11] Add CMD tag for simplified execution --- Dockerfile | 1 + 1 file changed, 1 insertion(+) diff --git a/Dockerfile b/Dockerfile index a529b27..797b3e0 100644 --- a/Dockerfile +++ b/Dockerfile @@ -11,3 +11,4 @@ COPY --from=builder /go/bin/fritzbox_exporter . COPY metrics.json metrics-lua.json ./ EXPOSE 9042 ENTRYPOINT [ "./fritzbox_exporter" ] +CMD ./fritzbox_exporter -username $USERNAME -password $PASSWORD -gateway-url ${GATEWAY_URL} -listen-address ${LISTEN_ADDRESS} From 15f05f7a1fe656b5bc974aa5c6b08baa0fb9d036 Mon Sep 17 00:00:00 2001 From: Lukas Wolfsteiner Date: Mon, 15 Feb 2021 03:10:42 +0100 Subject: [PATCH 07/11] Add docker-compose.yml --- docker-compose.yml | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) create mode 100644 docker-compose.yml diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..7d0315a --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,18 @@ +version: '3' +services: + fritzbox-prometheus-exporter: + hostname: fritzbox-prometheus-exporter + build: + context: . + dockerfile: Dockerfile + container_name: fritzbox-prometheus-exporter + ports: + - "9042:9042" + #expose: + # - "9042" + restart: unless-stopped + environment: + USERNAME: your_fritzbox_username + PASSWORD: your_fritzbox_password + GATEWAY_URL: http://192.168.0.1:49000 + LISTEN_ADDRESS: 0.0.0.0:9042 From 6986685424527ca1c60ea0371e7b61b3d429817b Mon Sep 17 00:00:00 2001 From: Lukas Wolfsteiner Date: Mon, 15 Feb 2021 03:39:44 +0100 Subject: [PATCH 08/11] Add docs for running using docker/docker-compose --- README.md | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/README.md b/README.md index 191fb8f..dd7f304 100644 --- a/README.md +++ b/README.md @@ -35,6 +35,28 @@ Other changes: In the configuration of the Fritzbox the option "Statusinformationen über UPnP übertragen" in the dialog "Heimnetz > Heimnetzübersicht > Netzwerkeinstellungen" has to be enabled. +### Using docker + +First you have to build the container: `docker build --tag fritzbox-prometheus-exporter:latest .` + +Then start the container: + +```bash +$ docker run -e 'USERNAME=your_fritzbox_username' \ + -e 'PASSWORD=your_fritzbox_password' \ + -e 'GATEWAY_URL="http://192.168.0.1:49000"' \ + -e 'LISTEN_ADDRESS="0.0.0.0:9042"' \ + fritzbox-prometheus-exporter:latest +``` + +### Using docker-compose + +Set your environment variables within the [docker-compose.yml](docker-compose.yml) file. + +Then start up the container using `docker-compose up -d`. + +### Using the binary + Usage: $GOPATH/bin/fritzbox_exporter -h From 2e7bb045342bb1e2110a5b1460e14d896aca2b67 Mon Sep 17 00:00:00 2001 From: "Sottile, Alessandro, Vodafone Italy" Date: Sun, 21 Feb 2021 09:35:03 +0100 Subject: [PATCH 09/11] add k8s deployment and service --- k8s-fritzbox.yaml | 75 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 75 insertions(+) create mode 100644 k8s-fritzbox.yaml diff --git a/k8s-fritzbox.yaml b/k8s-fritzbox.yaml new file mode 100644 index 0000000..438aded --- /dev/null +++ b/k8s-fritzbox.yaml @@ -0,0 +1,75 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + labels: + app: fritzbox-exporter + name: fritzbox-exporter + namespace: metrics-app +spec: + progressDeadlineSeconds: 600 + replicas: 1 + revisionHistoryLimit: 10 + selector: + matchLabels: + app: fritzbox-exporter + strategy: + rollingUpdate: + maxSurge: 25% + maxUnavailable: 25% + type: RollingUpdate + template: + metadata: + labels: + app: fritzbox-exporter + name: fritzbox-exporter + spec: + containers: + - env: + - name: GWURL + value: 'http://ip-fritzbox:49000' + - name: USERNAME + value: 'username' + - name: PASSWORD + value: 'password' + image: alexxanddr/fritzbox-exporter:latest + imagePullPolicy: Always + name: fritzbox-exporter + resources: {} + securityContext: + privileged: false + terminationMessagePath: /dev/termination-log + terminationMessagePolicy: File + dnsPolicy: ClusterFirst + hostAliases: + - hostnames: + - fritz.box + ip: 'ip-fritzbox' + restartPolicy: Always + schedulerName: default-scheduler + securityContext: {} + terminationGracePeriodSeconds: 30 +--- +apiVersion: v1 +kind: Service +metadata: + annotations: + prometheus.io/path: /metrics + prometheus.io/port: "9042" + prometheus.io/scrape: "true" + labels: + app: fritzbox-exporter + name: fritzbox-exporter + namespace: metrics-app +spec: + clusterIP: + ports: + - name: tcp + port: 9042 + protocol: TCP + targetPort: 9042 + selector: + app: fritzbox-exporter + sessionAffinity: None + type: ClusterIP +status: + loadBalancer: {} From 306716b1b806e77b76f1701d3a1710d91d9fb964 Mon Sep 17 00:00:00 2001 From: Lukas Wolfsteiner Date: Fri, 26 Feb 2021 19:32:33 +0100 Subject: [PATCH 10/11] Add comment regarding "no such host" issues when using docker-compose --- docker-compose.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/docker-compose.yml b/docker-compose.yml index 7d0315a..e1e1bf1 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -6,6 +6,9 @@ services: context: . dockerfile: Dockerfile container_name: fritzbox-prometheus-exporter + # for dns issues like "dial tcp: lookup fritz.box on 127.0.0.11:53: no such host" + # uncomment and fill the following line: + # dns: YOUR_FRITZBOX_IP ports: - "9042:9042" #expose: From 74e9d4e3f157189372dca5538c54bef09ba8c0db Mon Sep 17 00:00:00 2001 From: Lukas Wolfsteiner Date: Fri, 26 Feb 2021 19:35:55 +0100 Subject: [PATCH 11/11] Add comment regarding "no such host" issues when using `docker run` --- README.md | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/README.md b/README.md index dd7f304..6560ccf 100644 --- a/README.md +++ b/README.md @@ -49,6 +49,17 @@ $ docker run -e 'USERNAME=your_fritzbox_username' \ fritzbox-prometheus-exporter:latest ``` +I've you're getting `no such host` issues, define your FritzBox as DNS server for your docker container like this: + +```bash +$ docker run --dns YOUR_FRITZBOX_IP \ + -e 'USERNAME=your_fritzbox_username' \ + -e 'PASSWORD=your_fritzbox_password' \ + -e 'GATEWAY_URL="http://192.168.0.1:49000"' \ + -e 'LISTEN_ADDRESS="0.0.0.0:9042"' \ + fritzbox-prometheus-exporter:latest +``` + ### Using docker-compose Set your environment variables within the [docker-compose.yml](docker-compose.yml) file.