Uncategorized

InfluxDB + Grafana Rails 监控系统

Grafana

什么是influxdb

InfluxDB 是一个开源分布式的时序、事件和指标数据库。使用 Go 语言编写,无需外部依赖。其设计目标是实现分布式和水平伸缩扩展。 它有三大特性:

  1. Time Series (时间序列):你可以使用与时间有关的相关函数(如最大,最小,求和等)
  2. Metrics(度量):你可以实时对大量数据进行计算
  3. Eevents(事件):它支持任意的事件数据

又有如下特点:

  • schemaless(无结构),可以是任意数量的列
  • Scalable
  • min, max, sum, count, mean, median 一系列函数,方便统计

什么是Grafana?

grafana 是一个开源的时序性统计和监控平台, 支持如 elasticsearchmysqlinfluxdbpostgresql 等多种可选择的数据源,并以功能强大的界面编辑器著称。

Grafana 权限等级

Grafana 权限分为三个等级:Viewer、Editor 和 Admin, Viewer能看见所有已存在的面板,但只能查看不能编辑,Editor 在可查看的同时也可编辑面板,至于Admin… 则拥有全部权限例如添加数据源、添加插件、增加 API KEY等等权限。

如何监控项目(Rails project)

influxdb 埋点
  1. 埋点前置知识点:(ActiveSupport::Notifications) 先了解一下 ActiveSupport::Notifications 要不然会有些迷茫。
  2. 具体配置
    1. config/initializers 中声明初始化文件,理论上什么名称都行,但还是别胡起了,就叫 influxdb.rb 吧。
    2. influxdb.rb 中具体配置:
require 'influxdb'

$influxdb = InfluxDB::Client.new("grafana", hosts: "127.0.0.1", port: 8086, retry: 4, username: 'root', password: 'root', time_precision: 'ms')

# 关注 ActionController 的 process_action 通知,会收到所有的请求
ActiveSupport::Notifications.subscribe('process_action.action_controller') do |*args|
  event = ActiveSupport::Notifications::Event.new(*args)

  info = {
    action:         "#{event.payload[:controller]}##{event.payload[:action]}",
    runtime:        event.duration,
    db_runtime:     event.payload[:db_runtime].to_f,
    view_runtime:   event.payload[:view_runtime].to_f,
    server:         Socket.gethostname,
    status:         event.payload[:status],
    request_params: event.payload[:params].to_json
  }

  data = {
    values: info,
    tags:   {
      request_host:   event.payload[:params]['origin'],
      request_method: event.payload[:method]
    }, # tags are optional
    timestamp: (Time.now.to_r * 1000).to_i # 每次记录的时间戳
  }

  $influxdb.write_point("meiweb", data)
end
  1. 关于 InfluxDB::Client 初始化参数详解(只说主要的)
    • retry 如果不希望在出现问题时用连接尝试淹没数据库服务器,那么这个参数很重要。我设置的是4次,这个参数可以自定义。
    • username and password 如果你的influxdb 开启了用户鉴权,那么这里需要填写你的用户和密码。不过如果没有开启用户鉴权,那么理论上随便一个用户都可以访问 influxdb 库。(详细请看 – 待定博客更新中…)
    • time_precision 时间精度,influxdb 默认的精度是‘s’(这个应该不用解释吧。)
    • 可选参数use_ssl 主要用户influx 不在当前服务器上,并且influx配置了https 的访问方式(配置中可配),但一般自己用都是用的内网,所以设置这玩意很鸡肋,就用它默认的 false 就行。

修仙的码农...

发表评论

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