原监控系统以Graphite(carbon+whisper)为核心,kong通过statsd插件将服务调用信息发送给statsd,statsd通过WebAPI发送统计信息保存到Graphite.最后在Grafana中,通过GraphiteDataSource获取统计信息,并将图表输出到面板。这是在网上找到的关于Grafana的描述。Grafana是一个开源的指标监控和可视化工具。常用于展示基础设施的时序数据和应用运行分析。Grafana的dashboard展示非常炫酷,绝对是提升运维的利器。grafana的套路和kibana基本类似。他们根据查询条件设置聚合规则,并显示在合适的图表上。多个图表组合在一起形成仪表板。熟悉kibana的用户应该可以很容易上手。另外grafana的可视化功能比kibana强很多,4以上版本会集成告警功能,之前的监控只能统计kong的调用信息。整个结构复杂度高,但实现的功能比较简单。搞了这么一大堆鬼东西,就只能查看kong的监控了。虽然可以通过ZabbixPlugin查看Grafana中zabbix的监控数据,但是支持有限,而且zabbix的性能也是。。。大叔邪恶死了。。。迭代的开源时序数据库不多,其中Graphite和influxdb比较有名。这是维基百科上面对influxdb的介绍InfluxDB是InfluxData开发的开源时序数据库[注1]。它是用Go编写的,专注于以高性能查询和存储时间序列数据。InfluxDB广泛应用于存储系统数据监控、物联网行业实时数据等场景。通过了解,influxdb相对于Graphite有这些优势:它提供了telegraf作为代理来收集服务器信息,并且有非常丰富的插件用户来收集Nginx/Redis/PHPFPM/Elasticsearch等状态信息。真是提供了收藏/存储/可视化,屌屌屌。Scalability(待实践)便捷强大的查询语言,高效存储(待验证)其中,Telegraf还提供了StatsdServer功能,解决了Statsd官方推荐的influxdb后端插件只支持influxdb0.9的情况。基于Influxdb+Telegraf+Grafana搭建的监控系统在这个版本的监控系统中,我们会使用Telegraf或者直接提交给Influxdb来收集三种信息:在每台机器上安装Telegraf,收集服务器的信息和它的信息安装的软件状态和统计信息在网关所在的机器上,启用Telegraf提供的StatsdServer功能。在Kong中,启用Statsd插件,并将通话记录提交给Statsd。在服务中创建定时任务,定时向Influxdb提交业务数据。Influxdb提供了一个WebAPI用于管理。与Mysql类似,Influxdb也提供了命令行Client进行管理。同时可视化面板需要部署Grafana。部署Chronograf用于管理Influxdb。Chronograf提供了Influxdb的WebAdmin功能(在Influxdb0.9时代是Influxdb内置的),以及丰富的图表功能,但无法与Grafana相提并论。因此,我们只用它来管理Influxdb。Telegraftelegraf内置了很多InputPlugin,有什么用?回想一下,如果可以自己做一个监控,可以记录每分钟CPU的空闲率。怎么做?创建一个数据库,写一个存储数据的脚本,用它来获取CPU相关的数据,加上时间戳。然后保存到数据库中创建一个定时任务,每分钟运行一次脚本,写一个简单的程序,从数据库中查找数据,根据时间戳绘制图表。在你的在脚本中,您可以收集您收集的任何数据,然后将其发送到数据库。输入插件是一个书面脚本。你只需要在配置文件中打开它,就可以采集到相应的数据。telegraf的内置输入插件有这些:我拥有我想要的一切!而且前面提到telegraf内置了StatsdServer(ServiceInputs),解决了Kong调用监听的问题。然而,这还不是全部,telegraf还提供了Already:HTTPListenerTCPListenerUDPListenerWebhooksListenershit..这只是Input,Output还支持Graphite,Elasticsearch,Datadog等..shit..安装部署需要准备一台机器来安装数据库和用户界面。安装完成后,启动服务,在每台需要监控的机器上安装agent。根据需要配置输入插件。每份电报只能提交给一个数据库。telegraf的每个输入项都会有一个host标签,它的值默认是机器的hostname。你可以在telegraf的配置文件中修改。根据Grafana的资源布局和面板模板变量,定位机器和数据库的关系:使用每台机器的IP作为hostname,或者使用{组名}+{组号}。一组,一个数据库根据组的需要,打开输入插件固定一台机器收集mysql,redis等所有服务,然后开始!安装Influxdbcd/usr/local/srcwgethttps://dl.influxdata.com/influxdb/releases/influxdb-1.3.2.x86_64.rpmyumlocalinstallinfluxdb-1.3.2.x86_64.rpm#start/etc/init.d/influxdb启动#检查8086端口curl-i'http://127.0.0.1:8086'安装Chronografcd/usr/local/srcwgethttps://dl.influxdata.com/chronograf/releases/chronograf-1.3.6.1.x86_64.rpmyumlocalinstallchronograf-1.3.6.1.x86_64.rpm#启动/etc/init.d/chronografstart#查看8888端口curl-i'http://127.0.0.1:8888'如果8888已经被占用,需要指定端口运行nohupchronograf--port=8889>/dev/null2>&1&installGrafanacd/usr/local/srcwgethttps://s3-us-west-2.amazonaws.com/grafana-releases/release/grafana-4.4.3-1。x86_64.rpmyumlocalinstallgrafana-4.4.3-1.x86_64.rpm#启动/etc/init.d/grafana-serverstart#查看3000端口curl-i'http://127.0.0.1:3000'安装TelegrafInstall每台机器上的Telegraf作为代理收集数据并将数据报告给Influxdb。包括安装Influxdb的机器cd/usr/local/srcwgethttps://dl.influxdata.com/telegraf/releases/telegraf-1.3.5-1.x86_64.rpmyumlocalinstalltelegraf-1.3.5-1.x86_64。rpm安装完成后,默认配置已经收集了系统信息,需要添加几个输入数据库。如果配置的数据库不存在,它将自动创建。[[输出。influxdb]]urls=["http://10.1.0.1:8086"]database="servers_xxxx"rettention_policy=""write_consistency="any"timeout="5s"nginx需要在nginx上启用状态,我们使用固定端口1200。server{listen*:1200default_server;服务器名称_;位置/nginx_status{stub_statuson;access_log关闭;然后修改/etc/telegraf/telegraf.conf[[inputs.nginx]]urls=["http://127.0.0.1:1200/nginx_status"]PHPFPM需要开启fpm的statuspm.status_path=/status然后修改/etc/telegraf/telegraf.conf[[inputs.phpfpm]]urls=["fcgi://127.0.0.1:7006/status"]Net[[inputs.net]]interfaces=["eth0","eth1"]netstat[[inputs.netstat]]配置完成后,需要测试配置,启动然后启动telegraf-config/etc/telegraf/telegraf.conf-test/etc/init.d/telegrafstartConfigureGrafana面板在Grafana中,需要先配置数据源(DataSource),然后创建Dashboard,在Dashboard中创建Panel,即各种统计组件。最后完成一个面板的配置。配置数据源需要注意几个地方:类型,选择Influxdb,name,固定server_{name}url,Influxdb地址访问,固定代理。此外,还有直达。前者通过Grafana所在机器的代理访问Influxdb,后者在浏览器中直接访问Influxdb.database,目标机器的Telegraf配置数据库配置完成后,点击添加两次,如果显示测试成功,则表示成功。您可以在创建面板时选择切换到手动编辑SQL模式。然后保存,第一个面板就创建好了。具体查询语言需要查看官方文档。Influxdb使用的查询语言是类SQL的查询语言。InfluxDB的类似SQL的查询语言,用于与InfluxDB中的数据进行交互。Influxdb是一个时间序列数据库,我理解数据库自动维护created_at结构的异同点,两者都有数据库,都需要创建才能使用mysql有表,Influxdb有measurement,两者作用类似。measurement下有tag,tag下有field.measurement+tag=系列查询语句的异同在CRUD中,Influxdb只支持正则表达式的CRDInfluxdb。例如SELECT"value"FROM/kong_sms_request_status_*/tag和field可以用于where查询。Influxdb有更丰富的聚合查询。当然,这两种类型的数据库的主要用途是不同的,比较只是为了方便,并不是为了比较两者的优缺点。示例>创建数据库“demo”>showdatabasesname:databasesname----_internaldemo>使用“demo”使用数据库演示>inserthello,tag_alpha=2value=3>inserthello,tag_alpha=2value=3>inserthello,tag_alpha=4value=5>inserthello,tag_alpha=4value=6>showmeasurements;name:measurementsname----你好>select*fromhelloname:hellotimetag_alpha值-----------------150303712748560099133150303724957545126224150303738495368360345150303762634210977046'where_tag'hell-valueo46'-----------150303724957545126224>select*fromhellowheretag_alpha='4'andvalue=6name:hellotimetag_alphavalue-----------------150303762634210977046公司部署后面板图效果友情链接RunnerLee:fastD贡献者之一
