diff --git a/.gitignore b/.gitignore index 97884b0..24fa675 100644 --- a/.gitignore +++ b/.gitignore @@ -4,4 +4,5 @@ /alertmanager.yml /tmp /*.pem -/secret \ No newline at end of file +/secret +*.out diff --git a/Dockerfile b/Dockerfile index 8fe968f..efa213c 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,4 +1,4 @@ -FROM golang:1.9.2 AS build +FROM golang:1.12.6 AS build ADD . /src WORKDIR /src RUN go get -t github.com/stretchr/testify/suite @@ -8,7 +8,7 @@ RUN CGO_ENABLED=0 GOOS=linux go build -v -o docker-flow-monitor -FROM prom/prometheus:v2.2.0 +FROM prom/prometheus:v2.10.0 ENV GLOBAL_SCRAPE_INTERVAL=10s \ ARG_CONFIG_FILE=/etc/prometheus/prometheus.yml \ diff --git a/Dockerfile.test b/Dockerfile.test new file mode 100644 index 0000000..b0c0bb5 --- /dev/null +++ b/Dockerfile.test @@ -0,0 +1,6 @@ +FROM golang:1.12.6 AS build +ADD . /src +WORKDIR /src +RUN go get -t github.com/stretchr/testify/suite +RUN go get -d -v -t +RUN go test --cover -coverprofile=coverage.out -v ./... --run UnitTest -p 1 diff --git a/Jenkinsfile b/Jenkinsfile index e520fc8..211cd26 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -43,8 +43,7 @@ pipeline { label "prod" } steps { - sh "docker service update --image dockerflow/docker-flow-monitor:2-${currentBuild.displayName} monitor_monitor" - sh "docker service update --image dockerflow/docker-flow-monitor-docs:2-${currentBuild.displayName} monitor_docs" + sh "helm upgrade -i docker-flow-monitor helm/docker-flow-monitor --namespace df --set image.tag=2-${currentBuild.displayName}" } } } diff --git a/docs/auto-scaling.md b/docs/auto-scaling.md index c77be4f..8477935 100644 --- a/docs/auto-scaling.md +++ b/docs/auto-scaling.md @@ -148,7 +148,7 @@ The full definition of the stack that we just deployed can be found in [docker-f command: --config.file=/run/secrets/alert_manager_config --storage.path=/alertmanager swarm-listener: - image: vfarcic/docker-flow-swarm-listener + image: dockerflow/docker-flow-swarm-listener ... environment: - DF_NOTIFY_CREATE_SERVICE_URL=http://monitor:8080/v1/docker-flow-monitor/reconfigure diff --git a/docs/config.md b/docs/config.md index 0ed8310..d9de3ec 100644 --- a/docs/config.md +++ b/docs/config.md @@ -130,7 +130,7 @@ The simplest way to add scrape configs is to use Docker [secrets](https://docs.d ## Scrape Label Configuration With Service and Node Labels -When using a version of [Docker Flow Swarm Listener](https://github.com/vfarcic/docker-flow-swarm-listener), DFSL, newer than `18.03.20-39`, you can configure DFSL to send node information to `Docker Flow Monitor`, DFM. This can be done by setting `DF_INCLUDE_NODE_IP_INFO` to `true` in the DFSL environment. DFM will automatically display the node hostnames as a label for each prometheus target. The `DF_SCRAPE_TARGET_LABELS` env variable allows for additional labels to be displayed. +When using a version of [Docker Flow Swarm Listener](https://github.com/docker-flow/docker-flow-swarm-listener), DFSL, newer than `18.03.20-39`, you can configure DFSL to send node information to `Docker Flow Monitor`, DFM. This can be done by setting `DF_INCLUDE_NODE_IP_INFO` to `true` in the DFSL environment. DFM will automatically display the node hostnames as a label for each prometheus target. The `DF_SCRAPE_TARGET_LABELS` env variable allows for additional labels to be displayed. In addition to service labels, DFM can be configured to import node and engine labels prefixed with `com.df.` as prometheus labels for our targets. First, configure DFSL to push node events to DFM by setting the following environment variables in DFSL: @@ -151,7 +151,7 @@ For example, the stack file, [stacks/docker-flow-monitor-flexible-labels.yml](ht services: ... swarm-listener: - image: vfarcic/docker-flow-swarm-listener + image: dockerflow/docker-flow-swarm-listener environment: - DF_NOTIFY_CREATE_SERVICE_URL=http://monitor:8080/v1/docker-flow-monitor/reconfigure - DF_NOTIFY_REMOVE_SERVICE_URL=http://monitor:8080/v1/docker-flow-monitor/remove diff --git a/docs/tutorial-flexible-labeling.md b/docs/tutorial-flexible-labeling.md index 796ba29..57107db 100644 --- a/docs/tutorial-flexible-labeling.md +++ b/docs/tutorial-flexible-labeling.md @@ -52,7 +52,7 @@ To get the nodes information, DFSL is configured to send node events to DFM by s - DF_GET_NODES_URL=http://swarm-listener:8080/v1/docker-flow-swarm-listener/get-nodes ... swarm-listener: - image: vfarcic/docker-flow-swarm-listener + image: dockerflow/docker-flow-swarm-listener environment: ... - DF_NOTIFY_CREATE_NODE_URL=http://monitor:8080/v1/docker-flow-monitor/node/reconfigure diff --git a/docs/tutorial.md b/docs/tutorial.md index 527799d..519011d 100644 --- a/docs/tutorial.md +++ b/docs/tutorial.md @@ -67,7 +67,7 @@ Finally, the last service in the stack is `swarm-listener`. The definition is as ``` swarm-listener: - image: vfarcic/docker-flow-swarm-listener + image: dockerflow/docker-flow-swarm-listener networks: - monitor volumes: diff --git a/helm/docker-flow-monitor/Chart.yaml b/helm/docker-flow-monitor/Chart.yaml new file mode 100644 index 0000000..bab08b0 --- /dev/null +++ b/helm/docker-flow-monitor/Chart.yaml @@ -0,0 +1,14 @@ +name: docker-flow-monitor +version: 0.0.1 +apiVersion: v1 +description: Docker Flow Monitor +keywords: +- docker +- swarm +- docker-flow +home: https://monitor.dockerflow.com +sources: +- https://github.com/docker-flow/docker-flow-monitor +maintainers: +- name: Viktor Farcic + email: viktor@farcic.com diff --git a/helm/docker-flow-monitor/README.md b/helm/docker-flow-monitor/README.md new file mode 100644 index 0000000..73a7374 --- /dev/null +++ b/helm/docker-flow-monitor/README.md @@ -0,0 +1 @@ +# Docker Flow Monitor \ No newline at end of file diff --git a/helm/docker-flow-monitor/templates/NOTES.txt b/helm/docker-flow-monitor/templates/NOTES.txt new file mode 100644 index 0000000..e69de29 diff --git a/helm/docker-flow-monitor/templates/_helpers.tpl b/helm/docker-flow-monitor/templates/_helpers.tpl new file mode 100644 index 0000000..7a3e5fd --- /dev/null +++ b/helm/docker-flow-monitor/templates/_helpers.tpl @@ -0,0 +1,21 @@ +{{/* vim: set filetype=mustache: */}} +{{/* +Expand the name of the chart. +*/}} +{{- define "helm.name" -}} +{{- default .Chart.Name .Values.nameOverride | trunc 63 | trimSuffix "-" -}} +{{- end -}} + +{{/* +Create a default fully qualified app name. +We truncate at 63 chars because some Kubernetes name fields are limited to this (by the DNS naming spec). +If release name contains chart name it will be used as a full name. +*/}} +{{- define "helm.fullname" -}} +{{- $name := default .Chart.Name .Values.nameOverride -}} +{{- if contains $name .Release.Name -}} +{{- .Release.Name | trunc 63 | trimSuffix "-" -}} +{{- else -}} +{{- printf "%s-%s" .Release.Name $name | trunc 63 | trimSuffix "-" -}} +{{- end -}} +{{- end -}} diff --git a/helm/docker-flow-monitor/templates/deployment.yaml b/helm/docker-flow-monitor/templates/deployment.yaml new file mode 100644 index 0000000..1259b03 --- /dev/null +++ b/helm/docker-flow-monitor/templates/deployment.yaml @@ -0,0 +1,34 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + name: {{ template "helm.fullname" . }} + labels: + app: {{ template "helm.name" . }} + chart: {{ .Chart.Name }}-{{ .Chart.Version | replace "+" "_" }} + release: {{ .Release.Name }} + heritage: {{ .Release.Service }} +spec: + selector: + matchLabels: + app: {{ template "helm.name" . }} + release: {{ .Release.Name }} + template: + metadata: + labels: + app: {{ template "helm.name" . }} + release: {{ .Release.Name }} + spec: + containers: + - name: ui + image: dockerflow/docker-flow-monitor-docs:{{ .Values.image.tag }} + readinessProbe: + httpGet: + path: / + port: 80 + periodSeconds: 1 + livenessProbe: + httpGet: + path: / + port: 80 + resources: +{{ toYaml .Values.resources | indent 10 }} diff --git a/helm/docker-flow-monitor/templates/ing.yaml b/helm/docker-flow-monitor/templates/ing.yaml new file mode 100644 index 0000000..0505b20 --- /dev/null +++ b/helm/docker-flow-monitor/templates/ing.yaml @@ -0,0 +1,33 @@ +{{- $serviceName := include "helm.fullname" . -}} +apiVersion: extensions/v1beta1 +kind: Ingress +metadata: + name: {{ template "helm.fullname" . }} + labels: + app: {{ template "helm.name" . }} + chart: {{ .Chart.Name }}-{{ .Chart.Version | replace "+" "_" }} + release: {{ .Release.Name }} + heritage: {{ .Release.Service }} + annotations: + kubernetes.io/ingress.class: "nginx" + certmanager.k8s.io/issuer: "letsencrypt-prod" + certmanager.k8s.io/acme-challenge-type: http01 +spec: + rules: + {{- range .Values.ingress.host }} + {{- $url := splitList "/" . }} + - host: {{ first $url }} + http: + paths: + - path: /{{ rest $url | join "/" }} + backend: + serviceName: {{ $serviceName }} + servicePort: 80 + {{- end -}} + {{- range .Values.ingress.host }} + {{- $url := splitList "/" . }} + tls: + - hosts: + - {{ first $url }} + secretName: le-{{ $serviceName }} + {{- end -}} diff --git a/helm/docker-flow-monitor/templates/issuer.yaml b/helm/docker-flow-monitor/templates/issuer.yaml new file mode 100644 index 0000000..46497d5 --- /dev/null +++ b/helm/docker-flow-monitor/templates/issuer.yaml @@ -0,0 +1,11 @@ +apiVersion: certmanager.k8s.io/v1alpha1 +kind: Issuer +metadata: + name: letsencrypt-prod +spec: + acme: + server: https://acme-v02.api.letsencrypt.org/directory + email: viktor@farcic.com + privateKeySecretRef: + name: letsencrypt-prod + http01: {} \ No newline at end of file diff --git a/helm/docker-flow-monitor/templates/svc.yaml b/helm/docker-flow-monitor/templates/svc.yaml new file mode 100644 index 0000000..c6504f7 --- /dev/null +++ b/helm/docker-flow-monitor/templates/svc.yaml @@ -0,0 +1,16 @@ +apiVersion: v1 +kind: Service +metadata: + name: {{ template "helm.fullname" . }} + labels: + app: {{ template "helm.name" . }} + chart: {{ .Chart.Name }}-{{ .Chart.Version | replace "+" "_" }} + release: {{ .Release.Name }} + heritage: {{ .Release.Service }} +spec: + ports: + - port: 80 + type: NodePort + selector: + app: {{ template "helm.name" . }} + release: {{ .Release.Name }} \ No newline at end of file diff --git a/helm/docker-flow-monitor/values.yaml b/helm/docker-flow-monitor/values.yaml new file mode 100644 index 0000000..e1d45dd --- /dev/null +++ b/helm/docker-flow-monitor/values.yaml @@ -0,0 +1,12 @@ +image: + tag: latest +ingress: + host: + - monitor.dockerflow.com +resources: + limits: + cpu: 15m + memory: 15Mi + requests: + cpu: 5m + memory: 5Mi diff --git a/k8s/docker-flow-monitor/templates/deployment.yaml b/k8s/docker-flow-monitor/templates/deployment.yaml new file mode 100644 index 0000000..bef31be --- /dev/null +++ b/k8s/docker-flow-monitor/templates/deployment.yaml @@ -0,0 +1,42 @@ +--- +# Source: docker-flow-monitor/templates/deployment.yaml +apiVersion: apps/v1 +kind: Deployment +metadata: + name: moonitor-docker-flow-monitor + labels: + app: docker-flow-monitor + chart: docker-flow-monitor-0.0.1 + release: moonitor + heritage: Tiller +spec: + selector: + matchLabels: + app: docker-flow-monitor + release: moonitor + template: + metadata: + labels: + app: docker-flow-monitor + release: moonitor + spec: + containers: + - name: ui + image: dockerflow/docker-flow-monitor-docs:latest + readinessProbe: + httpGet: + path: / + port: 80 + periodSeconds: 1 + livenessProbe: + httpGet: + path: / + port: 80 + resources: + limits: + cpu: 15m + memory: 15Mi + requests: + cpu: 5m + memory: 5Mi + diff --git a/k8s/docker-flow-monitor/templates/ing.yaml b/k8s/docker-flow-monitor/templates/ing.yaml new file mode 100644 index 0000000..8245a3d --- /dev/null +++ b/k8s/docker-flow-monitor/templates/ing.yaml @@ -0,0 +1,28 @@ +--- +# Source: docker-flow-monitor/templates/ing.yaml +apiVersion: extensions/v1beta1 +kind: Ingress +metadata: + name: moonitor-docker-flow-monitor + labels: + app: docker-flow-monitor + chart: docker-flow-monitor-0.0.1 + release: moonitor + heritage: Tiller + annotations: + kubernetes.io/ingress.class: "nginx" + certmanager.k8s.io/issuer: "letsencrypt-prod" + certmanager.k8s.io/acme-challenge-type: http01 +spec: + rules: + - host: monitor.dockerflow.com + http: + paths: + - path: / + backend: + serviceName: moonitor-docker-flow-monitor + servicePort: 80 + tls: + - hosts: + - monitor.dockerflow.com + secretName: le-moonitor-docker-flow-monitor \ No newline at end of file diff --git a/k8s/docker-flow-monitor/templates/issuer.yaml b/k8s/docker-flow-monitor/templates/issuer.yaml new file mode 100644 index 0000000..35d29d6 --- /dev/null +++ b/k8s/docker-flow-monitor/templates/issuer.yaml @@ -0,0 +1,13 @@ +--- +# Source: docker-flow-monitor/templates/issuer.yaml +apiVersion: certmanager.k8s.io/v1alpha1 +kind: Issuer +metadata: + name: letsencrypt-prod +spec: + acme: + server: https://acme-v02.api.letsencrypt.org/directory + email: viktor@farcic.com + privateKeySecretRef: + name: letsencrypt-prod + http01: {} \ No newline at end of file diff --git a/k8s/docker-flow-monitor/templates/svc.yaml b/k8s/docker-flow-monitor/templates/svc.yaml new file mode 100644 index 0000000..fac8790 --- /dev/null +++ b/k8s/docker-flow-monitor/templates/svc.yaml @@ -0,0 +1,18 @@ +--- +# Source: docker-flow-monitor/templates/svc.yaml +apiVersion: v1 +kind: Service +metadata: + name: moonitor-docker-flow-monitor + labels: + app: docker-flow-monitor + chart: docker-flow-monitor-0.0.1 + release: moonitor + heritage: Tiller +spec: + ports: + - port: 80 + type: NodePort + selector: + app: docker-flow-monitor + release: moonitor \ No newline at end of file diff --git a/prometheus/config.go b/prometheus/config.go index f56f1e4..8d7a5c8 100644 --- a/prometheus/config.go +++ b/prometheus/config.go @@ -33,10 +33,12 @@ func WriteConfig(configPath string, scrapes map[string]Scrape, c.InsertScrapesFromDir(configsDir) } + c.RuleFiles = []string{"/run/secrets/*.rules"} if len(alerts) > 0 { logPrintf("Writing to alert.rules") afero.WriteFile(FS, alertRulesPath, []byte(GetAlertConfig(alerts)), 0644) - c.RuleFiles = []string{"alert.rules"} + // c.RuleFiles = []string{"alert.rules"} + c.RuleFiles = append(c.RuleFiles, "alert.rules") } alertmanagerURLs := os.Getenv("ARG_ALERTMANAGER_URL") @@ -66,7 +68,6 @@ func WriteConfig(configPath string, scrapes map[string]Scrape, logPrintf("Writing to prometheus.yml") configYAML, _ := yaml.Marshal(c) afero.WriteFile(FS, configPath, configYAML, 0644) - } // InsertEnv inserts envKey/envValue into config diff --git a/prometheus/config_test.go b/prometheus/config_test.go index fecaa49..14bd899 100644 --- a/prometheus/config_test.go +++ b/prometheus/config_test.go @@ -848,7 +848,7 @@ func (s *ConfigTestSuite) Test_WriteConfig_WriteAlerts() { } c := &Config{} - c.RuleFiles = []string{"alert.rules"} + c.RuleFiles = []string{"/run/secrets/*.rules", "alert.rules"} cYAML, _ := yaml.Marshal(c) expectedAlerts := GetAlertConfig(alerts) diff --git a/server/server.go b/server/server.go index 2594e5d..c8c07d4 100644 --- a/server/server.go +++ b/server/server.go @@ -197,51 +197,55 @@ func (s *serve) RemoveNodeHandler(w http.ResponseWriter, req *http.Request) { func (s *serve) InitialConfig() error { if len(os.Getenv("LISTENER_ADDRESS")) > 0 { - logPrintf("Requesting services from Docker Flow Swarm Listener") - addr := os.Getenv("LISTENER_ADDRESS") - if !strings.HasPrefix(addr, "http") { - addr = fmt.Sprintf("http://%s:8080", addr) - } - - addr = fmt.Sprintf("%s/v1/docker-flow-swarm-listener/get-services", addr) - timeout := time.Duration(listenerTimeout) - client := http.Client{Timeout: timeout} - resp, err := client.Get(addr) - if err != nil { - return err - } - body, _ := ioutil.ReadAll(resp.Body) - logPrintf("Processing: %s", string(body)) - data := []map[string]string{} - json.Unmarshal(body, &data) - for _, row := range data { - if scrape, err := s.getScrapeFromMap(row); err == nil { - s.scrapes[scrape.ServiceName] = scrape + addrs := strings.Split(os.Getenv("LISTENER_ADDRESS"), ",") + for _, addr := range addrs { + addr = strings.TrimSpace(addr) + + if !strings.HasPrefix(addr, "http") { + addr = fmt.Sprintf("http://%s:8080", addr) } - if alert, err := s.getAlertFromMap(row, ""); err == nil { - s.alerts[alert.AlertNameFormatted] = alert + + logPrintf("Requesting services from %s", addr) + + addr = fmt.Sprintf("%s/v1/docker-flow-swarm-listener/get-services", addr) + timeout := time.Duration(listenerTimeout) + client := http.Client{Timeout: timeout} + resp, err := client.Get(addr) + if err != nil { + return err } - for i := 1; i <= 10; i++ { - suffix := fmt.Sprintf(".%d", i) - if alert, err := s.getAlertFromMap(row, suffix); err == nil { + body, _ := ioutil.ReadAll(resp.Body) + logPrintf("Processing: %s", string(body)) + data := []map[string]string{} + json.Unmarshal(body, &data) + for _, row := range data { + if scrape, err := s.getScrapeFromMap(row); err == nil { + s.scrapes[scrape.ServiceName] = scrape + } + if alert, err := s.getAlertFromMap(row, ""); err == nil { s.alerts[alert.AlertNameFormatted] = alert - } else { - break + } + for i := 1; i <= 10; i++ { + suffix := fmt.Sprintf(".%d", i) + if alert, err := s.getAlertFromMap(row, suffix); err == nil { + s.alerts[alert.AlertNameFormatted] = alert + } else { + break + } } } - } - scrapeVariablesFromEnv := s.getScrapeVariablesFromEnv() - if len(scrapeVariablesFromEnv) > 0 { - scrape, err := s.parseScrapeFromEnvMap(scrapeVariablesFromEnv) - if err != nil { - return err - } - for _, row := range scrape { - s.scrapes[row.ServiceName] = row + scrapeVariablesFromEnv := s.getScrapeVariablesFromEnv() + if len(scrapeVariablesFromEnv) > 0 { + scrape, err := s.parseScrapeFromEnvMap(scrapeVariablesFromEnv) + if err != nil { + return err + } + for _, row := range scrape { + s.scrapes[row.ServiceName] = row + } } } - } // Get Nodes diff --git a/server/server_test.go b/server/server_test.go index 8ab276f..2a78b3c 100644 --- a/server/server_test.go +++ b/server/server_test.go @@ -137,6 +137,8 @@ alerting: - targets: - alert-manager:9093 scheme: http +rule_files: +- /run/secrets/*.rules ` fsOrig := prometheus.FS defer func() { prometheus.FS = fsOrig }() @@ -952,6 +954,7 @@ alerting: - alert-manager:9093 scheme: http rule_files: +- /run/secrets/*.rules - alert.rules scrape_configs: - job_name: my-service @@ -995,6 +998,7 @@ alerting: - alert-manager:9093 scheme: http rule_files: +- /run/secrets/*.rules - alert.rules scrape_configs: - job_name: my-service @@ -1271,6 +1275,8 @@ alerting: - targets: - alert-manager:9093 scheme: http +rule_files: +- /run/secrets/*.rules scrape_configs: - job_name: my-service metrics_path: /metrics @@ -1301,6 +1307,8 @@ alerting: - targets: - alert-manager:9093 scheme: http +rule_files: +- /run/secrets/*.rules ` addr = "/v1/docker-flow-monitor?serviceName=my-service" req, _ = http.NewRequest("DELETE", addr, nil) @@ -1450,6 +1458,8 @@ alerting: - targets: - alert-manager:9093 scheme: http +rule_files: +- /run/secrets/*.rules ` actualConfig, _ := afero.ReadFile(prometheus.FS, "/etc/prometheus/prometheus.yml") diff --git a/stack.yml b/stack.yml index e515e13..411aec0 100644 --- a/stack.yml +++ b/stack.yml @@ -40,7 +40,7 @@ services: command: --config.file=/run/secrets/alert_manager_config --storage.path=/alertmanager swarm-listener: - image: vfarcic/docker-flow-swarm-listener + image: dockerflow/docker-flow-swarm-listener networks: - monitor volumes: diff --git a/stacks/docker-flow-monitor-aws.yml b/stacks/docker-flow-monitor-aws.yml index 09f54e6..0287bd5 100644 --- a/stacks/docker-flow-monitor-aws.yml +++ b/stacks/docker-flow-monitor-aws.yml @@ -39,7 +39,7 @@ services: command: --config.file=/run/secrets/alert_manager_config --storage.path=/alertmanager swarm-listener: - image: vfarcic/docker-flow-swarm-listener + image: dockerflow/docker-flow-swarm-listener networks: - monitor volumes: diff --git a/stacks/docker-flow-monitor-mem.yml b/stacks/docker-flow-monitor-mem.yml index 8b45ae3..551cf7d 100644 --- a/stacks/docker-flow-monitor-mem.yml +++ b/stacks/docker-flow-monitor-mem.yml @@ -26,7 +26,7 @@ services: memory: 800M swarm-listener: - image: vfarcic/docker-flow-swarm-listener + image: dockerflow/docker-flow-swarm-listener networks: - monitor volumes: @@ -47,4 +47,4 @@ networks: monitor: external: true proxy: - external: true \ No newline at end of file + external: true diff --git a/stacks/docker-flow-monitor-proxy.yml b/stacks/docker-flow-monitor-proxy.yml index 6252a01..1e312d5 100644 --- a/stacks/docker-flow-monitor-proxy.yml +++ b/stacks/docker-flow-monitor-proxy.yml @@ -3,7 +3,7 @@ version: "3" services: swarm-listener: - image: vfarcic/docker-flow-swarm-listener + image: dockerflow/docker-flow-swarm-listener networks: - monitor volumes: diff --git a/stacks/docker-flow-monitor-scaler.yml b/stacks/docker-flow-monitor-scaler.yml index 41b2a2e..f5c25bb 100644 --- a/stacks/docker-flow-monitor-scaler.yml +++ b/stacks/docker-flow-monitor-scaler.yml @@ -35,7 +35,7 @@ services: command: --config.file=/run/secrets/alert_manager_config --storage.path=/alertmanager swarm-listener: - image: vfarcic/docker-flow-swarm-listener + image: dockerflow/docker-flow-swarm-listener networks: - monitor volumes: diff --git a/stacks/docker-flow-monitor-slack-9093.yml b/stacks/docker-flow-monitor-slack-9093.yml index a0bf523..47bdaa8 100644 --- a/stacks/docker-flow-monitor-slack-9093.yml +++ b/stacks/docker-flow-monitor-slack-9093.yml @@ -37,7 +37,7 @@ services: command: --config.file=/run/secrets/alert_manager_config --storage.path=/alertmanager swarm-listener: - image: vfarcic/docker-flow-swarm-listener + image: dockerflow/docker-flow-swarm-listener networks: - monitor volumes: diff --git a/stacks/docker-flow-monitor-slack.yml b/stacks/docker-flow-monitor-slack.yml index 69bdcb2..ef4aa85 100644 --- a/stacks/docker-flow-monitor-slack.yml +++ b/stacks/docker-flow-monitor-slack.yml @@ -35,7 +35,7 @@ services: command: --config.file=/run/secrets/alert_manager_config --storage.path=/alertmanager swarm-listener: - image: vfarcic/docker-flow-swarm-listener + image: dockerflow/docker-flow-swarm-listener networks: - monitor volumes: diff --git a/stacks/docker-flow-monitor-tutorial.yml b/stacks/docker-flow-monitor-tutorial.yml index 4637d69..c2264e6 100644 --- a/stacks/docker-flow-monitor-tutorial.yml +++ b/stacks/docker-flow-monitor-tutorial.yml @@ -19,7 +19,7 @@ services: - monitor swarm-listener: - image: vfarcic/docker-flow-swarm-listener + image: dockerflow/docker-flow-swarm-listener networks: - monitor volumes: diff --git a/stacks/docker-flow-monitor-user.yml b/stacks/docker-flow-monitor-user.yml index 766152c..adc7a14 100644 --- a/stacks/docker-flow-monitor-user.yml +++ b/stacks/docker-flow-monitor-user.yml @@ -37,7 +37,7 @@ services: command: --config.file=/run/secrets/alert_manager_config --storage.path=/alertmanager swarm-listener: - image: vfarcic/docker-flow-swarm-listener + image: dockerflow/docker-flow-swarm-listener networks: - monitor volumes: diff --git a/stacks/docker-flow-proxy-aws.yml b/stacks/docker-flow-proxy-aws.yml index c6e61c9..4c60f02 100644 --- a/stacks/docker-flow-proxy-aws.yml +++ b/stacks/docker-flow-proxy-aws.yml @@ -3,7 +3,7 @@ version: "3.2" services: proxy: - image: vfarcic/docker-flow-proxy:${TAG:-latest} + image: dockerflow/docker-flow-proxy:${TAG:-latest} ports: - 80:80 - 443:443 @@ -25,7 +25,7 @@ services: memory: 20M swarm-listener: - image: vfarcic/docker-flow-swarm-listener + image: dockerflow/docker-flow-swarm-listener networks: - proxy volumes: diff --git a/stacks/docker-flow-proxy-mem.yml b/stacks/docker-flow-proxy-mem.yml index 4582383..33dd888 100644 --- a/stacks/docker-flow-proxy-mem.yml +++ b/stacks/docker-flow-proxy-mem.yml @@ -8,7 +8,7 @@ networks: services: proxy: - image: vfarcic/docker-flow-proxy:${TAG:-latest} + image: dockerflow/docker-flow-proxy:${TAG:-latest} ports: - 80:80 - 443:443 @@ -28,7 +28,7 @@ services: memory: 20M swarm-listener: - image: vfarcic/docker-flow-swarm-listener + image: dockerflow/docker-flow-swarm-listener networks: - proxy volumes: diff --git a/stacks/docker-flow-proxy.yml b/stacks/docker-flow-proxy.yml index 89ca54d..9d44ff5 100644 --- a/stacks/docker-flow-proxy.yml +++ b/stacks/docker-flow-proxy.yml @@ -8,7 +8,7 @@ networks: services: proxy: - image: vfarcic/docker-flow-proxy:${TAG:-latest} + image: dockerflow/docker-flow-proxy:${TAG:-latest} ports: - 80:80 - 443:443 @@ -22,7 +22,7 @@ services: - STATS_PASS=admin swarm-listener: - image: vfarcic/docker-flow-swarm-listener + image: dockerflow/docker-flow-swarm-listener networks: - proxy volumes: