flume的监控方式有好几种,具体可以参看官方文档第一次尝试过使用jmx的方式,虽然可以从VM看到MBean对象,但是找到怎么针对不同的agent设置不同的Prometheus导出器,也没有进一步研究,选择了更简单的json方式。
本次监控选定的方案:json+flume_exporter,后端是Prometheus+influxDB+Grafana
第一步:暴露指标
每个agent启动的时候,添加启动参数:-Dflume.monitoring.type=http -Dflume.monitoring.port=96001
这里的端口请随意指定,启动之后便可以使用http访问该端口,即可看到返回的json格式的数据。
第二步:配置exporter
有了指标之后,可以自行写代码接收,我这里使用网友开源的flume_exporter
flume_exporter的使用需要使用两个配置文件,github上有,metrics.yml可是设置需要导出哪些指标,这些指标的名称跟MBean对象的命名是一样的。
config.yml可以配置需要监控的agent。我这里有10个agent需要监控,所以配置是这样的(端口随意指定)
agents:
- name: "flume-agents"
enabled: true
# multiple urls can be separated by ,
urls:
- "http://localhost:9601/metrics"
- "http://localhost:9602/metrics"
- "http://localhost:9603/metrics"
- "http://localhost:9604/metrics"
- "http://localhost:9605/metrics"
- "http://localhost:9606/metrics"
- "http://localhost:9607/metrics"
- "http://localhost:9608/metrics"
- "http://localhost:9609/metrics"
- "http://localhost:9610/metrics"
从config.yml文件中是无法为每个agent命名不同的名字的,比如我尝试过如下设置
# Example usage:
# Flume JSON Reporting metrics
agents:
- name: "flume-agents"
enabled: true
# multiple urls can be separated by ,
urls:
# - "http://localhost:9601/metrics"
- "http://localhost:9602/metrics"
- "http://localhost:9603/metrics"
- "http://localhost:9604/metrics"
- "http://localhost:9605/metrics"
- "http://localhost:9606/metrics"
- "http://localhost:9607/metrics"
- "http://localhost:9608/metrics"
- "http://localhost:9609/metrics"
- "http://localhost:9610/metrics"
- name: "mytestlogs"
enabled: true
urls: ["http://localhost:9601/metrics"]
它所产生的指标label与第一个配置是一样的,源码中也没看到其他可以用于指定标签的东西,所以不能从这里改了。
启动:
./flume_exporter --metric-file=./metrics.yml --config-file=./config.yml
此时访问http://192.16.22.13:9360/metrics就可以看到所有的指标。
第三步:加入Prometheus
由于无法在第二步中为每个agent设置别名,所以拿到监控数据之后也无法对他们进行区分,所以我们需要在Prometheus的配置中进行修正,正好标签host="localhost:端口号"可以为我所用,所以prometheus.yml中涉及到的配置如下:
scrape_configs:
- job_name: mx-discovery
file_sd_configs:
- files:
- '/etc/prometheus/fileconfig/mx-nodes.json'
metric_relabel_configs:
- source_labels: [host]
regex: 'localhost:9601'
replacement: mytestname1
target_label: logs
action: replace
- source_labels: [host]
regex: 'localhost:9602'
replacement: mytestname2
target_label: logs
action: replace
其实配置中的action: replace是可以不要的。
这里我使用的是文件发现的方式,所以mx-nodes.json文件中这样写的
{
"targets": ["192.16.22.13:9360"],
"labels": {
"alias": "bc-u-app-2",
"job": "flume"
}
}
如上设置之后,从Prometheus查询出来的指标就包含了可以用于区分不同agent的label了。
第四步:绘图
绘图使用到的指标如下
指标项说明(以下三张表来自https://www.cnblogs.com/fengzzi/p/10033739.html,侵删)
source监控项
objectName(会随实际情况而变化) | 指标项 | 说明 |
---|---|---|
org.apache.flume.source:type=r1 | OpenConnectionCount | 目前与客户端或sink保持连接的总数量 |
org.apache.flume.source:type=r1 | AppendBatchAcceptedCount | 成功提交到channel的批次的总数量 |
org.apache.flume.source:type=r1 | AppendBatchReceivedCount | 接收到事件批次的总数量 |
org.apache.flume.source:type=r1 | AppendAcceptedCount | 逐条录入的次数 |
org.apache.flume.source:type=r1 | AppendReceivedCount | 每批只有一个事件的事件总数量 |
org.apache.flume.source:type=r1 | EventAcceptedCount | 成功写出到channel的事件总数量 |
org.apache.flume.source:type=r1 | EventReceivedCount | 目前为止source已经接收到的事件总数量 |
org.apache.flume.source:type=r1 | StartTime | source启动时的毫秒值时间 |
org.apache.flume.source:type=r1 | StopTime | source停止时的毫秒值时间,为0表示一直在运行 |
channel监控项
objectName(会随实际情况而变化) | 指标项 | 说明 |
---|---|---|
org.apache.flume.channel:type=c1 | EventPutAttemptCount | Source尝试写入Channe的事件总次数 |
org.apache.flume.channel:type=c1 | EventPutSuccessCount | 成功写入channel且提交的事件总次数 |
org.apache.flume.channel:type=c1 | EventTakeAttemptCount | sink尝试从channel拉取事件的总次数。 |
org.apache.flume.channel:type=c1 | EventTakeSuccessCount | sink成功从channel读取事件的总数量 |
org.apache.flume.channel:type=c1 | ChannelSize | 目前channel中事件的总数量 |
org.apache.flume.channel:type=c1 | ChannelCapacity | channel的容量 |
org.apache.flume.channel:type=c1 | ChannelFillPercentage | channel已填入的百分比 |
org.apache.flume.channel:type=c1 | StartTime | channel启动时的毫秒值时间 |
org.apache.flume.channel:type=c1 | StopTime | channel停止时的毫秒值时间,为0表示一直在运行 |
sink监控项
objectName(会随实际情况而变化) | 指标项 | 说明 |
---|---|---|
org.apache.flume.sink:type=k1 | ConnectionCreatedCount | 创建的连接数量 |
org.apache.flume.sink:type=k1 | ConnectionClosedCount | 关闭的连接数量 |
org.apache.flume.sink:type=k1 | ConnectionFailedCount | 由于错误关闭的连接数量 |
org.apache.flume.sink:type=k1 | BatchEmptyCount | 批量处理event的个数为0的数量-表示source写入数据的速度比sink处理数据的速度慢 |
org.apache.flume.sink:type=k1 | BatchUnderflowCount | 批量处理event的个数小于批处理大小的数量 |
org.apache.flume.sink:type=k1 | BatchCompleteCount | 批量处理event的个数等于批处理大小的数量 |
org.apache.flume.sink:type=k1 | EventDrainAttemptCount | sink尝试写出到存储的事件总数量 |
org.apache.flume.sink:type=k1 | EventDrainSuccessCount | sink成功写出到存储的事件总数量 |
org.apache.flume.sink:type=k1 | StartTime | channel启动时的毫秒值时间 |
org.apache.flume.sink:type=k1 | StopTime | channel停止时的毫秒值时间,为0表示一直在运行 |
网友评论