基于http_reqstat和influxdb的Tengine监控方案

基于http_reqstat模块和zabbix的Tengine监控方法中,使用http_reqstat模块作为数据源,经过脚本计算之后插入zabbix做监控及报警。本文将基于influxdb改进监控,并利用时序数据库丰富的功能发掘http_reqstat数据的各种用途。

数据采集

由于influxdb有求导数的函数,可以直接将http_reqstat的原始数据插入influxdb,不需要像用zabbix那样先算好。使用telegraf,代码详见Github

数据展示

使用Grafana

模板变量

  • cluster SHOW TAG VALUES FROM "reqstat" WITH KEY = "cluster"
  • router SHOW TAG VALUES FROM "reqstat" WITH KEY = "server" WHERE cluster =~ /^$cluster/
  • app SHOW TAG VALUES FROM "reqstat" WITH KEY = "app" WHERE server =~ /$router/

查询语句

使用non_negative_derivative,例如2xx状态码的qps:

SELECT non_negative_derivative("http_2xx", 1s) AS "http_2xx" FROM "reqstat" WHERE "app" =~ /^$app$/ AND "cluster" =~ /^$cluster$/ AND "server" =~ /^$router$/ AND $timeFilter GROUP BY "cluster", "server", "app"

响应时间的处理特殊一些:

SELECT difference("rt") /difference("req_total") AS "rt", difference("ups_rt") /difference("ups_req") AS "ups_rt" FROM "reqstat" WHERE "app" =~ /^$app$/ AND "cluster" =~ /^$cluster$/ AND "server" =~ /^$router$/ AND $timeFilter GROUP BY "cluster", "server", "app"

效果

扩展应用

趋势数据

Grafana中查询方式不变

可用率统计

注意rate_dGROUP BY time(1d, -8h),,influxdb使用的是UTC时间,东8区需要提前8小时执行cq。

查询分钟可用率:

查询小时及天可用率:

Grafana报表展示


用influxdb数据源计算可用率可能会出现负值,可能因为网络等原因导致数据插入influxdb有延迟,出现req_total小于其他状态码qps的情况。目前只能在查询时限制条件去除这样的数据。基于日志处理的方式或许能更好的处理这种场景的需求。

报警

理论上可以用kapacitor来做,但是没有zabbix触发器那么直观。目前还没做。继续用zabbix的报警。

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注