Skip to content

Commit

Permalink
[prometheus-modbus-exporter] full (prometheus-community#3531)
Browse files Browse the repository at this point in the history
* [prometheus-modbus-exporter] full

Signed-off-by: openenergyprojects <[email protected]>

* [prometheus-modbus-exporter] update readme

Signed-off-by: openenergyprojects <[email protected]>

* [prometheus-modbus-exporter] remove stable repo from readme

Signed-off-by: openenergyprojects <[email protected]>

* [prometheus-modbus-exporter] disable serviceMonitor when crd is not installed, even for self

Signed-off-by: openenergyprojects <[email protected]>

---------

Signed-off-by: openenergyprojects <[email protected]>
  • Loading branch information
openenergyprojects authored and Matiasmct committed Aug 25, 2023
1 parent 17ee96b commit cff6842
Show file tree
Hide file tree
Showing 12 changed files with 527 additions and 0 deletions.
1 change: 1 addition & 0 deletions .github/CODEOWNERS
Validating CODEOWNERS rules …
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@
/charts/prometheus-fastly-exporter/ @arslanbekov
/charts/prometheus-json-exporter/ @schmiddim @xiu @zanhsieh
/charts/prometheus-kafka-exporter/ @gkarthiks @golgoth31 @zeritti
/charts/prometheus-modbus-exporter/ @openenergyprojects
/charts/prometheus-mongodb-exporter/ @steven-sheehy @zeritti
/charts/prometheus-mysql-exporter/ @juanchimienti @monotek
/charts/prometheus-nats-exporter/ @caarlos0 @okgolove
Expand Down
19 changes: 19 additions & 0 deletions charts/prometheus-modbus-exporter/Chart.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
apiVersion: v2
name: prometheus-modbus-exporter
description: A Helm chart for prometheus-modbus-exporter

keywords:
- modbus
- modbus_exporter
- metric
- monitoring
- prometheus

type: application

version: 0.1.0
appVersion: "0.4.0"

maintainers:
- name: openenergyprojects
email: [email protected]
80 changes: 80 additions & 0 deletions charts/prometheus-modbus-exporter/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,80 @@
# prometheus-modbus-exporter

Prometheus exporter for scraping metrics via modbus based protocol.

## Intro

This chart bootstraps a [modbus_exporter](https://github.com/RichiH/modbus_exporter) deployment on a [Kubernetes](http://kubernetes.io) cluster using the [Helm](https://helm.sh) package manager.

The serviceMonitor objects are created for Prometheus Operator.

## Configuration

The configuration of the modbus_exporter can be provided either via helm's custom values, or via an already existing (independently managed) configMap.
Either way, every time the configuration is getting updated, the modbus_exporter is getting restarted in order to fetch it. This is done using sidecar reloader: <https://github.com/Pluies/config-reloader-sidecar>.

## Tests

This setup has been tested with both real unit (Janitza Power Analizer UMG series) as well as using an simulator <https://www.modbustools.com/download.html>.
Other simulators (fully free) exist as well:

1. the one included as part of the test (fake server) in the <https://github.com/RichiH/modbus_exporter/blob/main/tests/fake_server/main.go>, which uses <https://github.com/tbrandon/mbserver> (golang).
2. Many others, like pymodslave, based on py module: <https://github.com/ljean/modbus-tk>, which has its own demo simulator as well.

## Notes

There are 4 types of read registries, hence 4 read function codes (1,2,3,4).
Don't forget to prefix (first digit) your registry with the required function.
Your address should be always 6 digits.
E.g. for holding registry 22, the address is: 300022 (where the 3 denotes the holding registry function).
More on Modbus function codes: <https://ozeki.hu/p_5873-modbus-function-codes.html>

## Prerequisites

- Kubernetes 1.10+ with Beta APIs enabled
- Helm 3+

## Get Repository Info

```console
helm repo add prometheus-community https://prometheus-community.github.io/helm-charts
helm repo update
```

_See [helm repository](https://helm.sh/docs/helm/helm_repo/) for command documentation._

## Install Chart

```console
helm install [RELEASE_NAME] prometheus-community/prometheus-modbus-exporter
```

_See [configuration](## Configuring) below._

_See [helm install](https://helm.sh/docs/helm/helm_install/) for command documentation._

## Uninstall Chart

```console
helm uninstall [RELEASE_NAME]
```

This removes all the Kubernetes components associated with the chart and deletes the release.

_See [helm uninstall](https://helm.sh/docs/helm/helm_uninstall/) for command documentation._

## Upgrading Chart

```console
helm upgrade [RELEASE_NAME] [CHART] --install
```

## Configuring

See [Customizing the Chart Before Installing](https://helm.sh/docs/intro/using_helm/#customizing-the-chart-before-installing). To see all configurable options with detailed comments, visit the chart's [values.yaml](./values.yaml), or run these configuration commands:

```console
helm show values prometheus-community/prometheus-modbus-exporter
```

For more information please refer to the [modbus_exporter](https://github.com/RichiH/modbus_exporter) documentation.
3 changes: 3 additions & 0 deletions charts/prometheus-modbus-exporter/templates/NOTES.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
For any help, see:
- https://github.com/RichiH/modbus_exporter
- https://github.com/prometheus-community/helm-charts/issues
62 changes: 62 additions & 0 deletions charts/prometheus-modbus-exporter/templates/_helpers.tpl
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
{{/*
Expand the name of the chart.
*/}}
{{- define "prometheus-modbus-exporter.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 "prometheus-modbus-exporter.fullname" -}}
{{- if .Values.fullnameOverride }}
{{- .Values.fullnameOverride | trunc 63 | trimSuffix "-" }}
{{- else }}
{{- $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 }}
{{- end }}

{{/*
Create chart name and version as used by the chart label.
*/}}
{{- define "prometheus-modbus-exporter.chart" -}}
{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" }}
{{- end }}

{{/*
Common labels
*/}}
{{- define "prometheus-modbus-exporter.labels" -}}
helm.sh/chart: {{ include "prometheus-modbus-exporter.chart" . }}
{{ include "prometheus-modbus-exporter.selectorLabels" . }}
{{- if .Chart.AppVersion }}
app.kubernetes.io/version: {{ .Chart.AppVersion | quote }}
{{- end }}
app.kubernetes.io/managed-by: {{ .Release.Service }}
{{- end }}

{{/*
Selector labels
*/}}
{{- define "prometheus-modbus-exporter.selectorLabels" -}}
app.kubernetes.io/name: {{ include "prometheus-modbus-exporter.name" . }}
app.kubernetes.io/instance: {{ .Release.Name }}
{{- end }}

{{/*
Create the name of the service account to use
*/}}
{{- define "prometheus-modbus-exporter.serviceAccountName" -}}
{{- if .Values.serviceAccount.create }}
{{- default (include "prometheus-modbus-exporter.fullname" .) .Values.serviceAccount.name }}
{{- else }}
{{- default "default" .Values.serviceAccount.name }}
{{- end }}
{{- end }}
13 changes: 13 additions & 0 deletions charts/prometheus-modbus-exporter/templates/configmap.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
{{- if not .Values.configMapFile -}}
{{- $fullName := include "prometheus-modbus-exporter.fullname" . -}}
apiVersion: v1
kind: ConfigMap
metadata:
name: {{ $fullName }}
labels:
{{- include "prometheus-modbus-exporter.labels" . | nindent 4 }}
data:
modbus.yml: |
modules:
{{- toYaml .Values.modules | nindent 4 }}
{{- end }}
88 changes: 88 additions & 0 deletions charts/prometheus-modbus-exporter/templates/deployment.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,88 @@
apiVersion: apps/v1
kind: Deployment
metadata:
name: {{ include "prometheus-modbus-exporter.fullname" . }}
labels:
{{- include "prometheus-modbus-exporter.labels" . | nindent 4 }}
spec:
replicas: 1
selector:
matchLabels:
{{- include "prometheus-modbus-exporter.selectorLabels" . | nindent 6 }}
template:
metadata:
{{- with .Values.podAnnotations }}
annotations:
{{- toYaml . | nindent 8 }}
{{- end }}
labels:
{{- include "prometheus-modbus-exporter.selectorLabels" . | nindent 8 }}
spec:
{{- with .Values.imagePullSecrets }}
imagePullSecrets:
{{- toYaml . | nindent 8 }}
{{- end }}
serviceAccountName: {{ include "prometheus-modbus-exporter.serviceAccountName" . }}
securityContext:
{{- toYaml .Values.podSecurityContext | nindent 8 }}
shareProcessNamespace: true # required for config-reloader-sidecar
containers:
- name: {{ include "prometheus-modbus-exporter.fullname" . }}
command: ["/bin/modbus_exporter"]
args:
- "--config.file=/etc/modbus_exporter/modbus.yml"
- "--log.level={{ .Values.log.level }}"
- "--log.format={{ .Values.log.format }}"
securityContext:
{{- toYaml .Values.securityContext | nindent 12 }}
image: "{{ .Values.image.repository }}:{{ .Values.image.tag | default .Chart.AppVersion }}"
imagePullPolicy: {{ .Values.image.pullPolicy }}
ports:
- name: metrics
containerPort: {{ .Values.service.port }}
protocol: TCP
livenessProbe:
httpGet:
path: /metrics
port: 9602
readinessProbe:
httpGet:
path: /metrics
port: 9602
resources:
{{- toYaml .Values.resources | nindent 12 }}
volumeMounts:
- name: configfile
mountPath: /etc/modbus_exporter/
{{ if .Values.configReloaderSidecar.enable }}
- name: {{ include "prometheus-modbus-exporter.fullname" . }}-config-reloader-sidecar
image: "{{ .Values.configReloaderSidecar.image.repository }}:{{ .Values.configReloaderSidecar.image.tag }}"
env:
- name: CONFIG_DIR
value: /etc/modbus_exporter/
- name: PROCESS_NAME
value: modbus_exporter
volumeMounts:
- name: configfile
mountPath: /etc/modbus_exporter/
{{- end -}}
{{- with .Values.nodeSelector }}
nodeSelector:
{{- toYaml . | nindent 8 }}
{{- end }}
{{- with .Values.affinity }}
affinity:
{{- toYaml . | nindent 8 }}
{{- end }}
{{- with .Values.tolerations }}
tolerations:
{{- toYaml . | nindent 8 }}
{{- end }}
volumes:
- name: configfile
configMap:
{{- if not .Values.configMapFile }}
name: {{ include "prometheus-modbus-exporter.fullname" . }}
{{- else }}
name: {{ .Values.configMapFile }}
{{- end }}
15 changes: 15 additions & 0 deletions charts/prometheus-modbus-exporter/templates/service.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
apiVersion: v1
kind: Service
metadata:
name: {{ include "prometheus-modbus-exporter.fullname" . }}
labels:
{{- include "prometheus-modbus-exporter.labels" . | nindent 4 }}
spec:
type: {{ .Values.service.type }}
ports:
- port: {{ .Values.service.port }}
targetPort: 9602
protocol: TCP
name: metrics
selector:
{{- include "prometheus-modbus-exporter.selectorLabels" . | nindent 4 }}
12 changes: 12 additions & 0 deletions charts/prometheus-modbus-exporter/templates/serviceaccount.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
{{- if .Values.serviceAccount.create -}}
apiVersion: v1
kind: ServiceAccount
metadata:
name: {{ include "prometheus-modbus-exporter.serviceAccountName" . }}
labels:
{{- include "prometheus-modbus-exporter.labels" . | nindent 4 }}
{{- with .Values.serviceAccount.annotations }}
annotations:
{{- toYaml . | nindent 4 }}
{{- end }}
{{- end }}
52 changes: 52 additions & 0 deletions charts/prometheus-modbus-exporter/templates/servicemonitor.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
{{- $fullName := include "prometheus-modbus-exporter.fullname" . -}}
{{- $endpointsCommonConfig := .Values.serviceMonitor.endpointsCommonConfig -}}
{{- if and .Values.serviceMonitor.enabled ( .Capabilities.APIVersions.Has "monitoring.coreos.com/v1/ServiceMonitor" ) }}
apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
name: {{ $fullName }}
labels:
{{- include "prometheus-modbus-exporter.labels" . | nindent 4 }}
{{- with .Values.serviceMonitor.labels }}
{{- toYaml . | nindent 4 }}
{{- end }}
{{- with .Values.serviceMonitor.annotations }}
annotations:
{{ toYaml . | nindent 4 }}
{{- end }}
spec:
selector:
matchLabels:
{{- include "prometheus-modbus-exporter.labels" . | nindent 6 }}
endpoints:
{{- range .Values.serviceMonitor.endpointsConfig }}
- port: metrics
path: "/modbus"
{{ toYaml . | indent 4 }}
{{/*path: "/modbus&target=1.2.3.4:502" */}}
{{ toYaml $endpointsCommonConfig | nindent 4 }}
{{- end }}
{{- end }}
---
{{- if and .Values.serviceMonitorExporterItself.enabled ( .Capabilities.APIVersions.Has "monitoring.coreos.com/v1/ServiceMonitor" ) }}
apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
name: {{ $fullName }}-self-monitor
labels:
{{- include "prometheus-modbus-exporter.labels" . | nindent 4 }}
{{- with .Values.serviceMonitorExporterItself.labels }}
{{ toYaml . | nindent 4 }}
{{- end }}
{{- with .Values.serviceMonitorExporterItself.annotations }}
annotations:
{{ toYaml . | nindent 4 }}
{{- end }}
spec:
selector:
matchLabels:
{{- include "prometheus-modbus-exporter.labels" . | nindent 6 }}
endpoints:
- port: metrics
path: "/metrics"
{{- end }}
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
{{/*
apiVersion: v1
kind: Pod
metadata:
name: "{{ include "prometheus-modbus-exporter.fullname" . }}-test-connection"
labels:
{{- include "prometheus-modbus-exporter.labels" . | nindent 4 }}
annotations:
"helm.sh/hook": test
spec:
containers:
- name: wget
image: busybox
command: ['wget']
args: ['{{ include "prometheus-modbus-exporter.fullname" . }}:{{ .Values.service.port }}']
restartPolicy: Never
*/}}
Loading

0 comments on commit cff6842

Please sign in to comment.