学习 Druid(十二):使用 Prometheus 监控 Druid 集群
2014 年 6 月 26 日
更新至 Druid 0.15.1 版本
截止目前,Druid 官方并不支持 Prometheus,且使用 Prometheus 监控 Druid 集群面临以下几个问题:
- Druid 使用 Push 的方式发送指标,而 Prometheus 使用 Pull 的方式;
- Druid 指标格式为 JSON,而 Prometheus 使用专有的指标格式。
为了解决:point_up_2:的难题,需要动手编写 druid-exporter,从而将 Druid 各个服务的指标提供给 Prometheus。
整体架构如下图所示:
Druid 监控
默认,Druid 并未开启指标采集和发送。编辑 runtime.properties 文件:
druid.monitoring.emissionPeriod=PT1M druid.monitoring.monitors=[] druid.emitter=http druid.emitter.http.recipientBaseUrl=http://:
配置项 druid.monitoring.emissionPeriod 指标发送周期;
配置项 druid.monitoring.monitors 进程监控列表;
配置项 druid.emitter 指标发送方式,使用 HTTP POST;
配置项 druid.emitter.http.recipientBaseUrl 指标发送 URL。
常用的监控有:
-
org.apache.druid.client.cache.CacheMonitor
缓存相关指标,适用于 Broker 和 Historical; -
org.apache.druid.server.metrics.QueryCountStatsMonitor
查询相关指标,适用于 Broker 和 Historical; -
org.apache.druid.server.metrics.HistoricalMetricsMonitor
适用于 Historical; -
org.apache.druid.java.util.metrics.SysMonitor
系统相关指标,使用 SIGAR library 监控系统活动和状态; -
org.apache.druid.java.util.metrics.JvmMonitor
JVM 相关指标; -
org.apache.druid.java.util.metrics.JvmCpuMonitor
JVM CPU 相关指标; -
org.apache.druid.java.util.metrics.JvmThreadsMonitor
JVM 线程相关指标。
监控不是 Druid 的主要功能,官方对监控维护不够及时,缺少了 MiddleManager 和 Peon 相关的指标。
非常遗憾。☹️
Druid Exporter
Python 语言开发的 druid-exporter ,由于版本过久,需要一些定制开发。
Prometheus
编辑 prometheus.yml 文件,添加 druid-exporter,:point_down:是一个模板:
global: scrape_interval: 1m evaluation_interval: 1m rule_files: - rules/druid.yaml alerting: alertmanagers: - static_configs: - targets: - : scrape_configs: - job_name: druid-coordinator static_configs: - targets: [] - job_name: druid-broker static_configs: - targets: [] - job_name: druid-historical static_configs: - targets: [] - job_name: druid-middlemanager static_configs: - targets:[]
编辑 rules/druid.yaml 文件,添加告警规则,:point_down:是一个模板:
groups: - name: druid rules: - alert: CoordinatorOverlordDown expr: up{job="druid-coordinator"} == 0 for: 5m labels: app: druid service: CoordinatorOverlord - alert: BrokerDown expr: up{job="druid-broker"} == 0 for: 5m labels: app: druid service: Broker - alert: MiddleManagerDown expr: up{job="druid-middlemanager"} == 0 for: 5m labels: app: druid service: MiddleManager - alert: HistoricalDown expr: up{job="druid-historical"} == 0 for: 5m labels: app: druid service: Historical
参考
- 《Druid 实时大数据分析:原理与实践》
- Configuration reference – Apache Druid
- Metrics – Apache Druid
- Configuration | Prometheus