zoukankan      html  css  js  c++  java
  • InfluxDB 开源分布式时序、事件和指标数据库

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

    特点

    • schemaless(无结构),可以是任意数量的列
    • Scalable
    • min, max, sum, count, mean, median 一系列函数,方便统计
    • Native HTTP API, 内置http支持,使用http读写
    • Powerful Query Language 类似sql
    • Built-in Explorer 自带管理工具

    管理界面:

    API

    InfluxDB 支持两种api方式

    • HTTP API
    • Protobuf API

    Protobuf 还未开发完成, 官网文档都没有

    如何使用 http api 进行操作?

    比如对于foo_production这个数据库,插入一系列数据,可以发现POST 请求到 /db/foo_production/series?u=some_user&p=some_password, 数据放到body里。

    数据看起来是这样的:

    下面的"name": "events", 其中"events"就是一个series,类似关系型数据库的表table

    [
      {
        "name": "events",
        "columns": ["state", "email", "type"],
        "points": [
          ["ny", "paul@influxdb.org", "follow"],
          ["ny", "todd@influxdb.org", "open"]
        ]
      },
      {
        "name": "errors",
        "columns": ["class", "file", "user", "severity"],
        "points": [
          ["DivideByZero", "example.py", "someguy@influxdb.org", "fatal"]
        ]
      }
    ]
    

    格式是json,可以在一个POST请求发送多个 series, 每个 series 里的 points 可以是多个,但索引要和columns对应。

    上面的数据里没有包含time 列,InfluxDB会自己加上,不过也可以指定time,比如:

    [
      {
        "name": "response_times",
        "columns": ["time", "value"],
        "points": [
          [1382819388, 234.3],
          [1382819389, 120.1],
          [1382819380, 340.9]
        ]
      }
    ]
    

    time 在InfluxDB里是很重要的,毕竟InfluxDB是time series database
    在InfluxDB里还有个sequence_number字段是数据库维护的,类似于mysql的 主键概念

    InfluxDB 增删更查都是用http api来完成,甚至支持使用正则表达式删除数据,还有计划任务。

    比如:

    发送POST请求到 /db/:name/scheduled_deletes, body如下,

    {
      "regex": "stats..*",
      "olderThan": "14d",
      "runAt": 3
    }
    

    这个查询会删除大于14天的数据,并且任何以stats开头的数据,并且每天3:00 AM运行。

    更加详细查看官方文档: http://influxdb.org/docs/api/http.html

    查询语言

    InfluxDB 提供了类似sql的查询语言

    看起来是这样的:

    select * from events where state == 'NY';
    
    select * from log_lines where line =~ /error/i;
    
    select * from events where customer_id == 23 and type == 'click';
    
    select * from response_times where value > 500;
    
    select * from events where email !~ /.*gmail.*/;
    
    select * from nagios_checks where status != 0;
    
    select * from events 
    where (email =~ /.*gmail.* or email =~ /.*yahoo.*/) and state == 'ny';
    
    delete from response_times where time > now() - 1h
    

    非常容易上手, 还支持Group ByMerging SeriesJoining Series, 并内置常用统计函数,比如max, min, mean 等

    文档: http://influxdb.org/docs/query_language/

    常用语言的库都有,因为api简单,也很容易自己封装。

    InfluxdDB作为很多监控软件的后端,这样监控数据就可以直接存储在InfluxDB
    StatsDCollectDFluentD

    还有其它的可视化工具支持InfluxDB, 这样就可以基于InfluxDB很方便的搭建监控平台

    InfluxDB 数据可视化工具

    InfluxDB 用于存储基于时间的数据,比如监控数据,因为InfluxDB本身提供了Http API,所以可以使用InfluxDB很方便的搭建了个监控数据存储中心。

    对于InfluxDB中的数据展示,官方admin有非常简单的图表, 看起来是这样的

    除了自己写程序展示数据还可以选择:

    tasseo

    tasseo,为Graphite写的Live dashboard,现在也支持InfluxDB,tasseo 比较简单, 可以配置的选项很少。

    Grafana

    Grafana是一个纯粹的html/js应用,访问InfluxDB时不会有跨域访问的限制。只要配置好数据源为InfluxDB之后就可以,剩下的工作就是配置图表。Grafana 功能非常强大。使用ElasticsSearch保存DashBoard的定义文件,也可以Export出JSON文件(Save ->Advanced->Export Schema),然后上传回它的/app/dashboards目录。

    配置数据源:

       datasources: {      
          influx: {
            default: true,
            type: 'influxdb',
            url: 'http://<your_influx_db_server>:8086/db/<db_name>',
            username: 'test',
            password: 'test',
          }
        },
    

  • 相关阅读:
    Ajax 的 GET 和 POST 模式
    AJax中post与get请求注意事项
    代理模式 (Proxy)
    装饰模式 (Decoratory)
    抽象工厂模式( Abstract Factory )
    单例模式(Singleton)
    原型设计模式
    Intro.js的简介和用法
    mysql 分片
    数据分片(二)如何为数据分片
  • 原文地址:https://www.cnblogs.com/qiumingcheng/p/5258401.html
Copyright © 2011-2022 走看看