druid.io实践4---druid监控

druid监控指标可以通过graphite-emitter插件很方便地直接发送到Graphite,再配合其他的展示和报警工具。

这里提供一个Graphite+Grafana+Seyren这三个开源框架的组合来监控druid的思路。
image

Druid监控指标发送到Graphite

Graphite是Python编写的、面向监控的工具, 是一个时间序列数据库,可以将数据可视化为图表的工具。

添加依赖

添加至extensions

1
druid.extensions.loadList=[..., "graphite-emitter"]

修改配置

修改druid节点启动配置_common/common.runtime.properties:

1
2
3
4
5
6
7
druid.monitoring.monitors=["com.metamx.metrics.JvmMonitor"]
druid.emitter=composing
druid.emitter.composing.emitters=["logging","graphite"]
druid.emitter.graphite.hostname=graphite.xxx.com
druid.emitter.graphite.port=2004
druid.emitter.graphite.eventConverter={"type":"whiteList", "namespacePrefix": "druid-graphite", "ignoreHostname":false, "ignoreServiceName":false, "mapPath":"/home/druid-conf/common-0.9.1.1/whiteList"}
druid.emitter.logging.logLevel=info

druid的metrics结构为:

1
<namespacePrefix>.[<druid service name>].[<druid hostname>].<dimensions values ordered by dimension's name>.<metric>

注意

graphite端口需要注意,druid发送的是pickled之后的数据。graphite的pickled protocal默认是2004端口,plaintext protocal才是2003端口。

否则graphite会遇见下述错误:
less /disk1/xxx/graphite-virtualenv/carbon-relay.out | grep druid

1
2
22/01/2017 15:02:29 :: [listener] invalid line (tta(S'druid-graphite.druid/broker.jvm/gc/time') received from client xx.xxx.xx.xx:38901, ignoring
22/01/2017 15:02:29 :: [listener] invalid line (tta(S'druid-graphite.druid/broker.xxxx.groupBy.query/node/ttfb') received from client xx.xxx.xx.xx:38901, ignoring

Event Converter具体说明

Event Converter用户可配置的:

  • namespacePrefix:前缀
  • ignoreHostname:是否忽略hostname
  • ignoreServiceName:是否忽略servicename
  • mapPath:

经过上述配置之后,graphite目录结构为:
druid-graphite/serviceName/host/xxxx/xxxx

Grafana展示

Grafana提供了一种强大的优雅的方式来创建,展示,分享dashboards,支持Graphite数据源。

以broker节点的监控为例,以下的$node为节点变量,broker有两个节点,$node会有两个值。

内存

transformNull(druid-graphite.druid.broker.$node.jvm.mem.*, 0)
image

图中两条线为其中一个broker的内存情况,黄色的线为mem.used,淡蓝色的线为mem.max

查询时间

druid-graphite.druid.broker.$node.$datasource.{groupBy,topN,timeseries}.query.time
image

查询时间占比

druid-graphite.druid.broker.$node.$datasource.$queryType.query.time
image

Seyren报警

报警使用的基于Graphite数据的开源项目seyren,提供邮件和短信等手段的报警。

举例

监控broker是否活着,可以监控内存使用情况。当broker挂了的话,内存使用会将为0,会进行报警

image

配置短信和邮件报警
image

参考

博客:Druid的Graphite监控配置
官方文档:Graphite Emitter

文章目录
  1. 1. Druid监控指标发送到Graphite
    1. 1.1. 添加依赖
    2. 1.2. 修改配置
    3. 1.3. 注意
    4. 1.4. Event Converter具体说明
  2. 2. Grafana展示
    1. 2.1. 内存
    2. 2.2. 查询时间
    3. 2.3. 查询时间占比
  3. 3. Seyren报警
    1. 3.1. 举例
  4. 4. 参考
|