Add rally-exporter chart
Change-Id: I5a7c70e5d9602dedbf550217b7f02ace294d84f2
This commit is contained in:
parent
ab319e6cbb
commit
63915ca596
11
charts/rally-exporter/Chart.yaml
Executable file
11
charts/rally-exporter/Chart.yaml
Executable file
@ -0,0 +1,11 @@
|
||||
---
|
||||
apiVersion: v1
|
||||
name: rally-exporter
|
||||
version: 0.1.1
|
||||
description: Rally exporter for Prometheus
|
||||
home: https://github.com/vexxhost/rally-exporter
|
||||
maintainers:
|
||||
- name: Mohammed Naser
|
||||
email: mnaser@vexxhost.com
|
||||
url: https://github.com/mnaser
|
||||
appVersion: 0.0.1
|
45
charts/rally-exporter/templates/_helpers.tpl
Executable file
45
charts/rally-exporter/templates/_helpers.tpl
Executable file
@ -0,0 +1,45 @@
|
||||
{{/* vim: set filetype=mustache: */}}
|
||||
{{/*
|
||||
Expand the name of the chart.
|
||||
*/}}
|
||||
{{- define "rally-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 "rally-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 -}}
|
||||
|
||||
{{/*
|
||||
Generate basic labels
|
||||
*/}}
|
||||
{{- define "rally-exporter.labels" }}
|
||||
app.kubernetes.io/name: {{ include "rally-exporter.fullname" . }}
|
||||
app.kubernetes.io/instance: {{ .Release.Name }}
|
||||
app.kubernetes.io/component: metrics
|
||||
app.kubernetes.io/part-of: rally
|
||||
{{- if .Values.commonLabels }}
|
||||
{{ toYaml .Values.commonLabels }}
|
||||
{{- end }}
|
||||
{{- end }}
|
||||
|
||||
{{/*
|
||||
Create chart name and version as used by the chart label.
|
||||
*/}}
|
||||
{{- define "rally-exporter.chart" -}}
|
||||
{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" -}}
|
||||
{{- end -}}
|
50
charts/rally-exporter/templates/deployment.yaml
Executable file
50
charts/rally-exporter/templates/deployment.yaml
Executable file
@ -0,0 +1,50 @@
|
||||
---
|
||||
apiVersion: apps/v1
|
||||
kind: Deployment
|
||||
metadata:
|
||||
namespace: {{ .Release.Namespace }}
|
||||
name: {{ include "rally-exporter.fullname" . }}
|
||||
labels:
|
||||
{{- include "rally-exporter.labels" . | indent 4 }}
|
||||
spec:
|
||||
selector:
|
||||
matchLabels:
|
||||
{{- include "rally-exporter.labels" . | indent 6 }}
|
||||
template:
|
||||
metadata:
|
||||
annotations:
|
||||
checksum/config: {{ include (print $.Template.BasePath "/secret.yaml") . | sha256sum }}
|
||||
labels:
|
||||
{{- include "rally-exporter.labels" . | indent 8 }}
|
||||
spec:
|
||||
containers:
|
||||
- name: rally-exporter
|
||||
image: vexxhost/rally-exporter:latest
|
||||
args:
|
||||
- default
|
||||
- /etc/rally/plan.yaml
|
||||
volumeMounts:
|
||||
- name: exporter-config
|
||||
mountPath: /etc/rally
|
||||
ports:
|
||||
- name: metrics
|
||||
containerPort: 9355
|
||||
env:
|
||||
- name: OS_CLIENT_CONFIG_FILE
|
||||
value: /etc/rally/clouds.yaml
|
||||
volumes:
|
||||
- name: exporter-config
|
||||
secret:
|
||||
secretName: {{ include "rally-exporter.fullname" . }}
|
||||
{{- with .Values.hostAliases }}
|
||||
hostAliases:
|
||||
{{ toYaml . | indent 8 }}
|
||||
{{- end }}
|
||||
{{- with .Values.tolerations }}
|
||||
tolerations:
|
||||
{{ toYaml . | indent 8 }}
|
||||
{{- end }}
|
||||
{{- with .Values.nodeSelector }}
|
||||
nodeSelector:
|
||||
{{ toYaml . | indent 8 }}
|
||||
{{- end }}
|
25
charts/rally-exporter/templates/podmonitor.yaml
Executable file
25
charts/rally-exporter/templates/podmonitor.yaml
Executable file
@ -0,0 +1,25 @@
|
||||
---
|
||||
apiVersion: monitoring.coreos.com/v1
|
||||
kind: PodMonitor
|
||||
metadata:
|
||||
name: {{ include "rally-exporter.fullname" . }}
|
||||
namespace: {{ .Release.Namespace }}
|
||||
labels:
|
||||
{{ include "rally-exporter.labels" . | indent 4 }}
|
||||
spec:
|
||||
podMetricsEndpoints:
|
||||
- interval: {{ .Values.podMonitor.interval }}
|
||||
scrapeTimeout: {{ .Values.podMonitor.scrapeTimeout }}
|
||||
port: metrics
|
||||
relabelings:
|
||||
- action: replace
|
||||
regex: (.*)
|
||||
replacement: default
|
||||
targetLabel: instance
|
||||
- action: labeldrop
|
||||
regex: '^(container|endpoint|namespace|pod)$'
|
||||
namespaceSelector:
|
||||
any: true
|
||||
selector:
|
||||
matchLabels:
|
||||
{{ include "rally-exporter.labels" . | indent 6 }}
|
165
charts/rally-exporter/templates/prometheusrule.yaml
Executable file
165
charts/rally-exporter/templates/prometheusrule.yaml
Executable file
@ -0,0 +1,165 @@
|
||||
---
|
||||
apiVersion: monitoring.coreos.com/v1
|
||||
kind: PrometheusRule
|
||||
metadata:
|
||||
name: {{ include "rally-exporter.fullname" . }}
|
||||
namespace: {{ .Release.Namespace }}
|
||||
labels:
|
||||
{{ include "rally-exporter.labels" . | indent 4 }}
|
||||
spec:
|
||||
groups:
|
||||
- name: rally
|
||||
rules:
|
||||
- alert: RallyTestFailed
|
||||
expr: |
|
||||
rally_task_passed != 1
|
||||
labels:
|
||||
severity: P5
|
||||
annotations:
|
||||
summary: "[Rally] {{`{{$labels.title}}`}} failed"
|
||||
description: >
|
||||
The Rally task {{`{{$labels.title}}`}} has failed in it's most
|
||||
recent run which means the cloud is currently seeing issues.
|
||||
- alert: RallyTestFailed
|
||||
for: 7m
|
||||
expr: |
|
||||
rally_task_passed != 1
|
||||
labels:
|
||||
severity: P4
|
||||
annotations:
|
||||
summary: "[Rally] {{`{{$labels.title}}`}} failed"
|
||||
description: >
|
||||
The Rally task {{`{{$labels.title}}`}} has failed in it's most
|
||||
recent run which means the cloud is currently seeing issues.
|
||||
- alert: RallyTestFailed
|
||||
for: 12m
|
||||
expr: |
|
||||
rally_task_passed != 1
|
||||
labels:
|
||||
severity: P3
|
||||
annotations:
|
||||
summary: "[Rally] {{`{{$labels.title}}`}} failed"
|
||||
description: >
|
||||
The Rally task {{`{{$labels.title}}`}} has failed in it's most
|
||||
recent run which means the cloud is currently seeing issues.
|
||||
- alert: RallyTestFailed
|
||||
for: 17m
|
||||
expr: |
|
||||
rally_task_passed != 1
|
||||
labels:
|
||||
severity: P2
|
||||
annotations:
|
||||
summary: "[Rally] {{`{{$labels.title}}`}} failed"
|
||||
description: >
|
||||
The Rally task {{`{{$labels.title}}`}} has failed in it's most
|
||||
recent run which means the cloud is currently seeing issues.
|
||||
|
||||
- alert: RallyNotReporting
|
||||
for: 5m
|
||||
expr: |
|
||||
absent(rally_task_passed)
|
||||
labels:
|
||||
severity: P4
|
||||
annotations:
|
||||
summary: "[Rally] Not reporting"
|
||||
description: >
|
||||
Rally is not reporting any details at all for the past 5 minutes
|
||||
which means that the service is down and it could likely be
|
||||
masking issues with the cloud.
|
||||
|
||||
- alert: RallyNotReporting
|
||||
for: 7m
|
||||
expr: |
|
||||
absent(rally_task_passed)
|
||||
labels:
|
||||
severity: P3
|
||||
annotations:
|
||||
summary: "[Rally] Not reporting"
|
||||
description: >
|
||||
Rally is not reporting any details at all for the past 7 minutes
|
||||
which means that the service is down and it could likely be
|
||||
masking issues with the cloud.
|
||||
|
||||
- alert: RallyNotRunning
|
||||
expr: |
|
||||
time() - rally_task_time > 900
|
||||
labels:
|
||||
severity: P3
|
||||
annotations:
|
||||
summary: "[Rally] {{`{{$labels.title}}`}} not running"
|
||||
description: >
|
||||
The most recent Rally run for the {{`{{$labels.title}}`}} task
|
||||
was {{`{{$value}}`}} seconds ago which implies that it is not
|
||||
running properly.
|
||||
|
||||
- alert: RallyInstanceStatus
|
||||
for: 15m
|
||||
expr: |
|
||||
count(openstack_nova_server_status{name=~"^s_rally.*"}) > 2
|
||||
labels:
|
||||
severity: P5
|
||||
annotations:
|
||||
summary: "[Rally] {{`{{$labels.title}}`}} failed to cleanup {{`{{$value}}`}} instances"
|
||||
description: >
|
||||
Rally has failed to cleanup {{`{{$value}}`}} instances which resulted
|
||||
to an ERROR state.
|
||||
|
||||
- alert: RallyInstanceStatus
|
||||
for: 15m
|
||||
expr: |
|
||||
count(openstack_nova_server_status{name=~"^s_rally.*"}) > 5
|
||||
labels:
|
||||
severity: P4
|
||||
annotations:
|
||||
summary: "[Rally] {{`{{$labels.title}}`}} failed to cleanup {{`{{$value}}`}} instances"
|
||||
description: >
|
||||
Rally has failed to cleanup {{`{{$value}}`}} instances which resulted
|
||||
to an ERROR state.
|
||||
|
||||
- alert: RallyInstanceStatus
|
||||
for: 15m
|
||||
expr: |
|
||||
count(openstack_nova_server_status{name=~"^s_rally.*"}) >= 10
|
||||
labels:
|
||||
severity: P3
|
||||
annotations:
|
||||
summary: "[Rally] {{`{{$labels.title}}`}} failed to cleanup {{`{{$value}}`}} instances"
|
||||
description: >
|
||||
Rally has failed to cleanup {{`{{$value}}`}} instances which resulted
|
||||
to an ERROR state.
|
||||
|
||||
- alert: RallyVolumeStatus
|
||||
for: 15m
|
||||
expr: |
|
||||
count(openstack_cinder_volume_status{name=~"^s_rally.*"}) > 2
|
||||
labels:
|
||||
severity: P5
|
||||
annotations:
|
||||
summary: "[Rally] {{`{{$labels.title}}`}} failed to cleanup {{`{{$value}}`}} volumes"
|
||||
description: >
|
||||
Rally has failed to cleanup {{`{{$value}}`}} volumes which resulted
|
||||
to an ERROR state.
|
||||
|
||||
- alert: RallyVolumeStatus
|
||||
for: 15m
|
||||
expr: |
|
||||
count(openstack_cinder_volume_status{name=~"^s_rally.*"}) > 5
|
||||
labels:
|
||||
severity: P4
|
||||
annotations:
|
||||
summary: "[Rally] {{`{{$labels.title}}`}} failed to cleanup {{`{{$value}}`}} volumes"
|
||||
description: >
|
||||
Rally has failed to cleanup {{`{{$value}}`}} volumes which resulted
|
||||
to an ERROR state.
|
||||
|
||||
- alert: RallyVolumeStatus
|
||||
for: 15m
|
||||
expr: |
|
||||
count(openstack_cinder_volume_status{name=~"^s_rally.*"}) >= 10
|
||||
labels:
|
||||
severity: P3
|
||||
annotations:
|
||||
summary: "[Rally] {{`{{$labels.title}}`}} failed to cleanup {{`{{$value}}`}} volumes"
|
||||
description: >
|
||||
Rally has failed to cleanup {{`{{$value}}`}} volumes which resulted
|
||||
to an ERROR state.
|
66
charts/rally-exporter/templates/secret.yaml
Executable file
66
charts/rally-exporter/templates/secret.yaml
Executable file
@ -0,0 +1,66 @@
|
||||
---
|
||||
apiVersion: v1
|
||||
kind: Secret
|
||||
metadata:
|
||||
namespace: {{ .Release.Namespace }}
|
||||
name: {{ include "rally-exporter.fullname" . }}
|
||||
labels:
|
||||
{{- include "rally-exporter.labels" . | indent 4 }}
|
||||
stringData:
|
||||
rally.conf: |
|
||||
[database]
|
||||
connection=sqlite:////home/rally/data/rally.db
|
||||
[openstack]
|
||||
nova_server_boot_timeout=90
|
||||
clouds.yaml: |
|
||||
clouds:
|
||||
default:
|
||||
auth:
|
||||
auth_url: {{ .Values.cloud.auth_url }}
|
||||
project_name: {{ .Values.cloud.project_name }}
|
||||
tenant_name: {{ .Values.cloud.project_name }}
|
||||
username: {{ .Values.cloud.username }}
|
||||
password: {{ .Values.cloud.password }}
|
||||
user_domain_name: {{ .Values.cloud.user_domain_name }}
|
||||
project_domain_name: {{ .Values.cloud.project_domain_name }}
|
||||
region_name: {{ .Values.cloud.region_name }}
|
||||
interface: {{ .Values.cloud.interface }}
|
||||
plan.yaml: |
|
||||
---
|
||||
version: 2
|
||||
title: OpenStack Cloud Validation
|
||||
description: |
|
||||
This task runs a few synethic tests to ensure that the cloud is in a
|
||||
functional state.
|
||||
subtasks:
|
||||
- title: keystone
|
||||
scenario:
|
||||
Authenticate.keystone: {}
|
||||
runner:
|
||||
constant:
|
||||
times: 1
|
||||
concurrency: 1
|
||||
sla:
|
||||
max_seconds_per_iteration: 5
|
||||
failure_rate:
|
||||
max: 0
|
||||
- title: nova
|
||||
scenario:
|
||||
NovaServers.boot_server_from_volume_and_delete:
|
||||
{{ if .Values.test.network }}
|
||||
nics:
|
||||
- net-name: {{ .Values.test.network }}
|
||||
{{- end }}
|
||||
volume_size: 20
|
||||
flavor:
|
||||
name: {{ .Values.test.flavor }}
|
||||
image:
|
||||
name: {{ .Values.test.image }}
|
||||
runner:
|
||||
constant:
|
||||
times: 1
|
||||
concurrency: 1
|
||||
sla:
|
||||
max_seconds_per_iteration: 90
|
||||
failure_rate:
|
||||
max: 0
|
18
charts/rally-exporter/values.yaml
Executable file
18
charts/rally-exporter/values.yaml
Executable file
@ -0,0 +1,18 @@
|
||||
---
|
||||
cloud:
|
||||
auth_url:
|
||||
region_name:
|
||||
interface: internal
|
||||
user_domain_name: Default
|
||||
project_domain_name: Default
|
||||
project_name: rally
|
||||
username: rally
|
||||
password:
|
||||
|
||||
test:
|
||||
flavor:
|
||||
image:
|
||||
|
||||
podMonitor:
|
||||
interval: 1m
|
||||
scrapeTimeout: 1m
|
Loading…
Reference in New Issue
Block a user