学习 Druid(十二):使用 Prometheus 监控 Druid 集群
source link: https://www.tuicool.com/articles/Q3Yn2eE
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
更新至 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_EXPORTER_HOST>:<DRUID_EXPORTER_PORT>
配置项 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: - <ALERT_MANAGER_HOST>:<ALERT_MANAGER_PORT> 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
Recommend
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK