【问题标题】:Auto-scrape realm metrics from Keycloak with Prometheus-Operator使用 Prometheus-Operator 从 Keycloak 自动抓取领域指标
【发布时间】:2021-10-28 09:05:14
【问题描述】:

我使用bitnami/keycloak Helm 图表 (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),方法是设置一个将其下载到共享卷的 init 容器。

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

提供程序在常规面向公众 http 端口而不是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 可以自动检测我的所有领域并抓取它们的端点?

提前致谢!

【问题讨论】:

  • 恕我直言,您不需要抓取每个领域指标端点 - 请参阅自述文件:The endpoint lives under <url>/auth/realms/<realm>/metrics. It will return data for all realms, no matter which realm you use in the URL (you can just default to /auth/realms/master/metrics). 所以 main master 领域足以监控所有领域。
  • 有趣。我多次查看自述文件。应该更仔细地阅读句子。始终将其理解为“这是您从(每个领域)获取数据的端点”。刚刚检查过,是的,master 端点也从我的其他领域返回数据。非常感谢!

标签: keycloak monitoring metrics prometheus-operator


【解决方案1】:

正如@jan-garaj 所评论的,无需查询所有端点。全部返回所有领域的累积数据。所以只抓取一个领域(例如主领域)的端点就足够了。

非常感谢!

【讨论】:

    【解决方案2】:

    它可能对某人有所帮助,即 bitnami 图像,因此掌舵图已经包含 metrics-spi-provider。因此不需要任何进一步的安装操作,但必须在值中启用指标。

    【讨论】:

    • 您能否为此链接一些文档?从什么时候开始包含这个? Keycloak 14 还没有。有一个指标端点,但它不提供任何领域指标。
    • 我在图表中也找不到任何提及。它仍然说 如果同一个 pod 中需要额外的容器(例如额外的指标或日志导出器),可以使用 sidecars 配置参数来定义它们。
    • 没有文档 afaik。您必须启用指标并创建一个 servicemonitor。然后它应该工作。我在没有额外容器的情况下运行,或者像你上面所做的那样。我正在使用最新版本的图表和图像。
    • 好的,有趣。你得到领域指标了吗?不仅是 Wildfly 指标?您使用的是哪个 Keycloak 版本?下次升级时会试试这个。
    • 我正在获取领域指标并使用提供的仪表板here。钥匙斗篷 16.1.0
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-13
    • 2021-02-12
    • 1970-01-01
    • 1970-01-01
    • 2021-05-07
    相关资源
    最近更新 更多