使用 Prometheus-Operator 从 Keycloak 自动抓取领域指标
Auto-scrape realm metrics from Keycloak with Prometheus-Operator
我使用 bitnami/keycloak
Helm chart (https://bitnami.com/stack/keycloak/helm) 安装了 Keycloak。
因为我也在使用 Prometheus-Operator 进行监控,所以我启用了指标端点和服务监控器:
keycloak:
...
metrics:
enabled: true
serviceMonitor:
enabled: true
namespace: monitoring
additionalLabels:
release: my-prom-operator-release
因为我对实际领域指标更感兴趣,所以我安装了 keycloak-metrics-spi
提供程序 (https://github.com/aerogear/keycloak-metrics-spi),方法是设置一个将其下载到共享卷的初始化容器。
keycloak:
...
extraVolumeMounts:
- name: providers
mountPath: /opt/bitnami/keycloak/providers
extraVolumes:
- name: providers
emptyDir: {}
...
initContainers:
- name: metrics-spi-provider
image: SOME_IMAGE_WITH_WGET_INSTALLED
imagePullPolicy: Always
command:
- sh
args:
- -c
- |
KEYCLOAK_METRICS_SPI_VERSION=2.5.2
wget --no-check-certificate -O /providers/keycloak-metrics-spi-${KEYCLOAK_METRICS_SPI_VERSION}.jar \
https://github.com/aerogear/keycloak-metrics-spi/releases/download/${KEYCLOAK_METRICS_SPI_VERSION}/keycloak-metrics-spi-${KEYCLOAK_METRICS_SPI_VERSION}.jar
chmod +x /providers/keycloak-metrics-spi-${KEYCLOAK_METRICS_SPI_VERSION}.jar
touch /providers/keycloak-metrics-spi-${KEYCLOAK_METRICS_SPI_VERSION}.jar.dodeploy
volumeMounts:
- name: providers
mountPath: /providers
提供商在常规 public-facinghttp
端口而不是 http-management
端口上启用指标端点,这不是很好为了我。但是我可以在我的反向代理中阻止对它们的外部访问。
我缺少的是对这些端点的某种自动抓取。现在我创建了一个额外的模板,它为图表中预定义列表的每个元素创建了一个新的服务监视器:
values.yaml
keycloak:
...
metrics:
extraServiceMonitors:
- realmName: master
- realmName: my-realm
servicemonitor-metrics-spi.yaml
{{- range $serviceMonitor := .Values.keycloak.metrics.extraServiceMonitors }}
---
apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
name: {{ $.Release.Name }}-spi-{{ $serviceMonitor.realmName }}
...
spec:
endpoints:
- port: http
path: /auth/realms/{{ $serviceMonitor.realmName }}/metrics
...
{{- end }}
有更好的方法吗?这样 Prometheus 就可以自动检测我所有的领域并抓取它们的端点?
提前致谢!
正如@jan-garaj 所说,无需查询所有端点。所有return所有领域的累积数据。所以只需要抓取一个领域的端点(例如主领域)。
非常感谢!
它可能对某些人有帮助,bitnami 图像因此 helm chart 已经包含 metrics-spi-provider。因此不需要任何进一步的安装操作,但必须在值中启用指标。
我使用 bitnami/keycloak
Helm chart (https://bitnami.com/stack/keycloak/helm) 安装了 Keycloak。
因为我也在使用 Prometheus-Operator 进行监控,所以我启用了指标端点和服务监控器:
keycloak:
...
metrics:
enabled: true
serviceMonitor:
enabled: true
namespace: monitoring
additionalLabels:
release: my-prom-operator-release
因为我对实际领域指标更感兴趣,所以我安装了 keycloak-metrics-spi
提供程序 (https://github.com/aerogear/keycloak-metrics-spi),方法是设置一个将其下载到共享卷的初始化容器。
keycloak:
...
extraVolumeMounts:
- name: providers
mountPath: /opt/bitnami/keycloak/providers
extraVolumes:
- name: providers
emptyDir: {}
...
initContainers:
- name: metrics-spi-provider
image: SOME_IMAGE_WITH_WGET_INSTALLED
imagePullPolicy: Always
command:
- sh
args:
- -c
- |
KEYCLOAK_METRICS_SPI_VERSION=2.5.2
wget --no-check-certificate -O /providers/keycloak-metrics-spi-${KEYCLOAK_METRICS_SPI_VERSION}.jar \
https://github.com/aerogear/keycloak-metrics-spi/releases/download/${KEYCLOAK_METRICS_SPI_VERSION}/keycloak-metrics-spi-${KEYCLOAK_METRICS_SPI_VERSION}.jar
chmod +x /providers/keycloak-metrics-spi-${KEYCLOAK_METRICS_SPI_VERSION}.jar
touch /providers/keycloak-metrics-spi-${KEYCLOAK_METRICS_SPI_VERSION}.jar.dodeploy
volumeMounts:
- name: providers
mountPath: /providers
提供商在常规 public-facinghttp
端口而不是 http-management
端口上启用指标端点,这不是很好为了我。但是我可以在我的反向代理中阻止对它们的外部访问。
我缺少的是对这些端点的某种自动抓取。现在我创建了一个额外的模板,它为图表中预定义列表的每个元素创建了一个新的服务监视器:
values.yaml
keycloak:
...
metrics:
extraServiceMonitors:
- realmName: master
- realmName: my-realm
servicemonitor-metrics-spi.yaml
{{- range $serviceMonitor := .Values.keycloak.metrics.extraServiceMonitors }}
---
apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
name: {{ $.Release.Name }}-spi-{{ $serviceMonitor.realmName }}
...
spec:
endpoints:
- port: http
path: /auth/realms/{{ $serviceMonitor.realmName }}/metrics
...
{{- end }}
有更好的方法吗?这样 Prometheus 就可以自动检测我所有的领域并抓取它们的端点?
提前致谢!
正如@jan-garaj 所说,无需查询所有端点。所有return所有领域的累积数据。所以只需要抓取一个领域的端点(例如主领域)。
非常感谢!
它可能对某些人有帮助,bitnami 图像因此 helm chart 已经包含 metrics-spi-provider。因此不需要任何进一步的安装操作,但必须在值中启用指标。