r-t-chan/keycloak-zabbix-monitoring

GitHub: r-t-chan/keycloak-zabbix-monitoring

通过 Zabbix 原生 Prometheus 预处理功能抓取 Keycloak 指标端点,实现身份认证服务的统一监控与 Google Chat 告警通知。

Stars: 1 | Forks: 0

# 通过 Prometheus/OpenMetrics 使用 Zabbix 监控 Keycloak Zabbix 模板和告警路由,用于通过 Prometheus/OpenMetrics 端点监控 Keycloak 部署 —— 涵盖 container/JVM 健康、身份验证失败和服务间错误,并将告警发送至 Google Chat。 ## 为什么选择 Zabbix 来处理 Prometheus 指标? 我们已经使用 Zabbix 进行基础设施监控。与其仅仅为了 Keycloak 单独搭建一套 Prometheus + Alertmanager 技术栈,不如利用 Zabbix 原生的 **Prometheus check** 预处理功能,让一个 HTTP item 抓取指标端点并为 dependent item 提供数据 —— 从而将身份监控与其他所有监控保留在同一位置,并使用相同的告警路由。 ## 工作原理 ``` flowchart LR kc["Keycloak\n/metrics endpoint"] master["Zabbix HTTP agent item\n(master — scrapes every 1m)"] dep["Dependent items\nPrometheus pattern preprocessing"] trig["Triggers\n(failed logins, error rates,\nendpoint availability)"] gchat["Google Chat space\n(webhook media type)"] kc --> master --> dep --> trig --> gchat ``` 1. 一个 **HTTP agent master item** 每分钟抓取一次完整的指标输出。 2. **Dependent item** 使用 Zabbix 的 Prometheus pattern 预处理提取各个序列 —— 无需对 Keycloak 发起额外请求。 3. **Triggers** 会在真正关键的情况发生时触发:登录失败激增、服务间错误率上升以及指标端点失效。 4. 一个 **webhook media type** 将告警发布到 Google Chat 空间中。 ## 告警内容 | 信号 | 重要性 | |--------|----------------| | 登录失败激增(按 realm) | 凭证填充 / 暴力破解尝试会首先在这里体现出来 | | 服务间身份验证错误 | 客户端密钥轮换或配置错误会悄无声息地破坏机器身份验证 —— 用户不会报告此问题 | | 认证端点上的 HTTP 5xx 比率 | Keycloak 性能下降会导致每个下游服务的登录功能随之一同失效 | | 指标端点无法访问 | 监控系统本身也是一个值得监控的依赖项 | JVM 堆作为原始字节数据收集,用于容量趋势分析;百分比阈值 trigger 需要 max-heap 序列,该序列因 Keycloak 版本而异,因此请添加一个以匹配您的部署环境。 ## 文件 - [`zabbix/template_keycloak_metrics.yaml`](zabbix/template_keycloak_metrics.yaml) — 可导入模板:master 抓取 item、dependent item、triggers - [`zabbix/media_google_chat_webhook.js`](zabbix/media_google_chat_webhook.js) — 用于 Google Chat 的 webhook media type 脚本 ## 适配您的 Keycloak 版本 - **Keycloak (Quarkus,现代版本)**:使用 `KC_METRICS_ENABLED=true` 启用指标;您将获得 `http_server_requests_seconds_*`、JVM 指标以及(在较新版本中)用户事件指标。 - **带有 aerogear metrics SPI 的旧版 Keycloak (WildFly)**:公开带有 realm/provider 标签的 `keycloak_failed_login_attempts`、`keycloak_logins`、`keycloak_response_errors` —— 模板中的示例 item 使用了这些名称。 无论哪种方式,模式都是相同的:调整 dependent item 中的 Prometheus patterns,以匹配您的部署所公开的序列。运行 `curl -s https:///metrics | grep -i login` 以查看您拥有的指标。 ## 设置 1. 将模板 YAML 导入 Zabbix (6.0+)。 2. 将其链接到运行 Keycloak 的主机;设置 `{$KEYCLOAK.METRICS.URL}` 宏。 3. 创建一个 Google Chat 空间 webhook,并添加带有该 webhook URL 的 media type 脚本。 4. 根据您的基准调整 trigger 阈值 —— 默认值是刻意设置的保守起始点。
标签:Google Chat, Keycloak, Zabbix, 告警通知, 数据可视化, 自定义脚本, 运维监控