服务器数据监控、业务数据监控调研

1.Grafana【数据可视化】

grafana 是一款采用 go 语言编写的开源应用,主要用于大规模指标数据的可视化展现,是网络架构和应用分析中最流行的时序数据展示工具,目前已经支持绝大部分常用的时序数据库。官网(http://docs.grafana.org/

Grafana支持许多不同的数据源。每个数据源都有一个特定的查询编辑器,该编辑器定制的特性和功能是公开的特定数据来源。 官方支持以下数据源:Graphite,Elasticsearch,InfluxDB,Prometheus,Cloudwatch,MySQL和OpenTSDB等。

每个数据源的查询语言和能力都是不同的。你可以把来自多个数据源的数据组合到一个仪表板,但每一个面板被绑定到一个特定的数据源,它就属于一个特定的组织。

支持的数据源

DashBoard:仪表盘,就像汽车仪表盘一样可以展示很多信息,包括车速,水箱温度等。Grafana的DashBoard就是以各种图形的方式来展示从Datasource拿到的数据。

Row:行,DashBoard的基本组成单元,一个DashBoard可以包含很多个row。一个row可以展示一种信息或者多种信息的组合,比如系统内存使用率,CPU五分钟及十分钟平均负载等。所以在一个DashBoard上可以集中展示很多内容。

Panel:面板,实际上就是row展示信息的方式,支持表格(table),列表(alert list),热图(Heatmap)等多种方式,具体可以去官网上查阅。

Query Editor:查询编辑器,用来指定获取哪一部分数据。类似于sql查询语句,比如你要在某个row里面展示test这张表的数据,那么Query Editor里面就可以写成select *from test。这只是一种比方,实际上每个DataSource获取数据的方式都不一样,所以写法也不一样(http://docs.grafana.org/features/datasources/,比如像zabbix,数据是以指定某个监控项的方式来获取的。

Organization:组织,org是一个很大的概念,每个用户可以拥有多个org,grafana有一个默认的main org。用户登录后可以在不同的org之间切换,前提是该用户拥有多个org。不同的org之间完全不一样,包括datasource,dashboard等都不一样。创建一个org就相当于开了一个全新的视图,所有的datasource,dashboard等都要再重新开始创建。

User:用户,这个概念应该很简单,不用多说。Grafana里面用户有三种角色admin,editor,viewer。admin权限最高,可以执行任何操作,包括创建用户,新增Datasource,创建DashBoard。editor角色不可以创建用户,不可以新增Datasource,可以创建DashBoard。viewer角色仅可以查看DashBoard。在2.1版本及之后新增了一种角色read only editor(只读编辑模式),这种模式允许用户修改DashBoard,但是不允许保存。每个user可以拥有多个organization。

demo:http://119.29.168.212:3000/?orgId=1

账号:admin 密码:admin123

2.Kibna【数据可视化】

Kibana 是一种开源数据可视化和挖掘工具,可以用于日志和时间序列分析、应用程序监控和运营智能使用案例。它提供了强大且易用的功能,例如直方图、线形图、饼图、热图和内置的地理空间支持。此外,它还提供了与 Elasticsearch 的紧密集成,后者是一款流行的分析和搜索引擎,这使得 Kibana 成为了可视化 Elasticsearch 中存储数据的默认之选。

demo:https://demo.elastic.co/app/kibana#/

Grafana与kibana的区别:

grafana的主要优点:

  1. 模板:设置变量很灵活,对于要统计很多不同业务有相同特点的数据,极大减少了重复劳动
  2. 图表展示:各种线条配置特别多,很多细节可以突出图表重点,让你的图很炫
  3. UI:我个人觉得比kibana美观很多,也看过网上大神配的超炫的kibana,但我比较菜,用原生的弄不出来
  4. 支持的数据库繁多:同一个dashboard中可以有influxdb源的数据也可以有ES的,结合起来一起展示
  5. 有自带的权限管理

kibana的优点:

  1. 支持强大的ES语法,还可以自定义。这点grafana封装的太死了,比如pipline aggs这种功能grafana几乎没法用。
  2. 可以直接查看原生的request请求内容。这就很方便的复用这些内容去自己写一些后端处理
  3. 有discovery栏目可以直接查询原生数据:(但我在grafana的每个dashboard里加了链接跳转按钮至kibana查日志,所以感觉也挺方便的。)

3.Prometheus【监控报警系统】

Prometheus是由SoundCloud开发的开源监控报警系统和时序列数据库(TSDB)。Prometheus使用Go语言开发,是Google BorgMon监控系统的开源版本。
2016年由Google发起Linux基金会旗下的原生云基金会(Cloud Native Computing Foundation), 将Prometheus纳入其下第二大开源项目。
Prometheus目前在开源社区相当活跃。
Prometheus和Heapster(Heapster是K8S的一个子项目,用于获取集群的性能数据。)相比功能更完善、更全面。Prometheus性能也足够支撑上万台规模的集群。

Prometheus的特点

  • 多维度数据模型。
  • 灵活的查询语言。
  • 不依赖分布式存储,单个服务器节点是自主的。
  • 通过基于HTTP的pull方式采集时序数据。
  • 可以通过中间网关进行时序列数据推送。
  • 通过服务发现或者静态配置来发现目标服务对象。
  • 支持多种多样的图表和界面展示,比如Grafana等。

官网地址:https://prometheus.io/

基本原理

Prometheus的基本原理是通过HTTP协议周期性抓取被监控组件的状态,任意组件只要提供对应的HTTP接口就可以接入监控。不需要任何SDK或者其他的集成过程。这样做非常适合做虚拟化环境监控系统,比如VM、Docker、Kubernetes等。输出被监控组件信息的HTTP接口被叫做exporter 。目前互联网公司常用的组件大部分都有exporter可以直接使用,比如Varnish、Haproxy、Nginx、MySQL、Linux系统信息(包括磁盘、内存、CPU、网络等等)。

服务过程

  • Prometheus Daemon负责定时去目标上抓取metrics(指标)数据,每个抓取目标需要暴露一个http服务的接口给它定时抓取。Prometheus支持通过配置文件、文本文件、Zookeeper、Consul、DNS SRV Lookup等方式指定抓取目标。Prometheus采用PULL的方式进行监控,即服务器可以直接通过目标PULL数据或者间接地通过中间网关来Push数据。
  • Prometheus在本地存储抓取的所有数据,并通过一定规则进行清理和整理数据,并把得到的结果存储到新的时间序列中。
  • Prometheus通过PromQL和其他API可视化地展示收集的数据。Prometheus支持很多方式的图表可视化,例如Grafana、自带的Promdash以及自身提供的模版引擎等等。Prometheus还提供HTTP API的查询方式,自定义所需要的输出。
  • PushGateway支持Client主动推送metrics到PushGateway,而Prometheus只是定时去Gateway上抓取数据。
  • Alertmanager是独立于Prometheus的一个组件,可以支持Prometheus的查询语句,提供十分灵活的报警方式。

三大套件

  • Server 主要负责数据采集和存储,提供PromQL查询语言的支持。
  • Alertmanager 警告管理器,用来进行报警。
  • Push Gateway 支持临时性Job主动推送指标的中间网关。

演示demo:http://demo.robustperception.io:9090/consoles/index.html

4.Graphite 【企业级监控工具】

Graphite 是一款用 Python 写的开源企业级监控绘图工具,可以在廉价机硬件上运行。Graphite 可以实时收集、存储、显示时间序列类型的数据,它由三个软件组件组成:

  • carbon - 基于 Twisted 的进程,用于监听并接收数据;
  • whisper - 专门存储时序数据的小型数据库,在设计上类似于 RRD;
  • graphite webapp - 基于 Django 的网页应用程序,可以从 whisper 数据库获取时间序列数据并且进行展示。

Graphite 是一个基于推送的系统,通过让应用程序推送数据到 Graphite 的 Carbon 组件中,从应用程序接收数据。 Carbon 将此数据存储在 Whisper 数据库中,Graphite Web 组件读取 Carbon 它的和数据库,允许用户在浏览器中绘制数据图或通过 API 提取数据。一个非常酷的功能是能够将这些图形导出为图像或数据文件,以便将它们轻松嵌入到其他应用程序中。

Graphite 的另一个有趣功能是能够存储与时序指标相关的任意事件。可以在 Graphite 中添加和跟踪应用程序或基础架构部署, 这允许运维人员或开发人员对问题进行故障排除,能获得正在调查的异常行为环境中更多的背景信息。

Graphite 监控上手指南:http://www.infoq.com/cn/articles/graphite-intro

Graphite通常用于监控基础设施级别的度量,比如CPU、内存、I/O利用率、网络吞吐量和延迟,当然Graphite在应用程序级的度量和业务级的度量方面也很不错。

Graphite的优点
1)Graphite非常快,它的架构是模块化可规模化的
2)Graphite很著名,有庞大的社区和广泛的支持
3)有很多与Graphite相互协作的开源工具
4)Graphite完成单个工作且做得很好
5)Graphite采用Apache 2.0许可证


Graphite的不足
1)Graphite不能对数据进行分片,因此要解决这个问题就是采用多个Graphite实例
2)Graphite的安装是一个很复杂的任务,尽管目前有了完整的Docker映像可以一次性安装Graphite及其依赖

5.ELK 【日志聚合工具】

ELK 是 Elasticsearch,Logstash 和 Kibana 的缩写,在实时数据检索和分析场合,三者通常是配合共用,是市场上最受欢迎的开源日志聚合工具。它被 Netflix,Facebook,Microsoft,LinkedIn 和 Cisco 使用。这三个组件都是由 Elastic 开发和维护的。Elasticsearch 本质上是一个 NoSQL,以 Lucene 搜索引擎实现。 Logstash 是一个日志管道系统,可以提取、转换数据并将其加载到像 Elasticsearch 这样的商店中。 Kibana 是 Elasticsearch 之上的可视化层。

几年前出现了数据收集器 Beats,能简化数据传输到 Logstash 的过程。用户可以安装 Beat,能导出 NGINX 日志或 Envoy 代理日志,以便在 Elasticsearch 中有效使用,无需了解每种类型日志的正确语法。

在安装生产级 ELK 堆栈时,可能会包含 Kafka,Redis 和 NGINX 等其他部分。此外,Logstash 通常可以用 Fluentd 替换。这个系统操作起来很复杂,早期有很多问题导致了很多抱怨。 这些问题很大程度上都被修复了,但它仍然是一个复杂的系统,所以对于较小的操作,你可能不想尝试它。

ELK 堆栈还通过 Kibana 提供了出色的可视化工具,但它缺乏警报功能。 Elastic 在付费 X-Pack 插件中提供警报功能,但开源系统中没有内置任何功能。Yelp 为这个问题提供了名为 ElastAlert 的解决方案,可能还有其他类似的工具。这个额外的软件非常强大,但它进一步增加了 ELK 堆栈的复杂性。

ELK Stack 在最近两年迅速崛起,和传统的日志处理方案相比,ELK Stack 具有如下几个优点:

  • 处理方式灵活。Elasticsearch 是实时全文索引,不需要像 storm 那样预先编程才能使用 ;
  • 配置简易上手。Elasticsearch 全部采用 JSON 接口,Logstash 是 Ruby DSL 设计,都是目前业界最通用的配置语法设计 ;
  • 检索性能高效。虽然每次查询都是实时计算,但是优秀的设计和实现基本可以达到全天数据查询的秒级响应 ;
  • 集群线性扩展。不管是 Elasticsearch 集群还是 Logstash 集群都是可以线性扩展的 ;
  • 前端操作炫丽。Kibana 界面上,只需要点击鼠标,就可以完成搜索、聚合功能,生成炫丽的仪表板。

6.Graylog 【日志管理、分析工具】

Graylog 是强大的日志管理、分析工具,基于 Elasticsearch, Java 和 MongoDB,这使得它像 ELK 堆栈一样运行起来很复杂,甚至更加复杂。但是,Graylog 开源版本带有内置的警报,以及其他一些值得注意的功能,如流式传输,消息重写和地理定位。

流式传输功能允许数据在处理时能实时路由到特定 Stream。使用此功能,用户可以在一个 Stream 中查看所有数据库错误,在另一个 Stream 中查看 Web 服务器错误。当添加新项目或超过阈值时,告警甚至可以基于这些 Stream。延迟可能是日志聚合系统的最大问题之一,Graylog 中的 Streams 中消除了这个问题,一旦日志进入,无需处理即可通过 Stream 路由到其他系统。

消息重写功能使用开源规则引擎 Drools,允许根据用户定义的规则文件来评估所有传入消息。该文件可以丢弃消息(称为黑名单),添加或删除字段,以及修改信息。

Graylog 最酷的功能可能是地理位置功能,它支持在地图上绘制 IP 地址。这样功能相当常见,Kibana 中也有这个功能,但 Graylog 中增加了很多价值,特别是你想将它用作 SIEM 系统时。地理定位功能在 Graylog 的开源版本中提供。

Graylog 吸引人的地方:

  • 一体化方案,安装方便,不像 ELK 有 3 个独立系统间的集成问题。
  • 采集原始日志,并可以事后再添加字段,比如 http_status_code,response_time 等等。
  • 自己开发采集日志的脚本,并用 curl/nc 发送到 Graylog Server,发送格式是自定义的 GELF,Flunted 和 Logstash 都有相应的输出 GELF 消息的插件。自己开发带来很大的自由度。实际上只需要用 inotifywait 监控日志的 modify 事件,并把日志的新增行用 curl/netcat 发送到 Graylog Server 就可。
  • 搜索结果高亮显示,就像 google 一样。
  • 搜索语法简单,比如: source:mongo AND reponse_time_ms:>5000,避免直接输入 elasticsearch 搜索 json 语法。
  • 搜索条件可以导出为 elasticsearch 的搜索 json 文本,方便直接开发调用 elasticsearch rest api 的搜索脚本。

Graylog 开源版官网: https://www.graylog.org/

7.Fluentd【日志收集软件】

Fluentd 是一个完全开源免费的 log 信息收集软件,支持超过 125 个系统的 log 信息收集,用 C 和 Ruby 编写,被 CNCF 接受为孵化项目,并得到了 AWS 和 Google Cloud 的推荐。在许多安装中,Fluentd 已成为 Logstash 的常见替代工具,充当本地聚合器,用于收集所有节点日志并发送到中央存储系统。但 Fluentd 不是一个日志集成系统。

Fluentd 使用强大的插件系统,有超过 500 个插件可供使用,可快速轻松地集成不同的数据源和数据输出,涵盖你的大部分用例。

Fluentd 内存要求低(仅几十兆字节),有高吞吐量,因此是 Kubernetes 环境中的常见选择。在像 Kubernetes 这样的环境中,每个 Pod 都有一个 Fluentd side-car,内存消耗将随着每个新 Pod 的创建而线性增加。使用 Fluentd 将大大降低系统利用率。

8.Vizceral【实时监控应用程序和集群之间的网络流量】

Vizceral 是 Netflix 发布的一个开源项目,用于近乎实时地监控应用程序和集群之间的网络流量。

Vizceral 是一组采用 WebG 标准实现的动态展示线路图组件,可以实现数据的查看以及交互,分为全局、部分区域、水平三个维度,使数据更为直观明了的展示。

Vizceral 组件可以采取多个流量图,并将生成一个“全局”图,显示所有传入的流量到每个“区域”,支持跨区域通信。

Netflix 区域间流量图

9.Zabbix【企业级开源监控软件】

zabbix是一个基于web界面的企业级开源监控软件,Zabbix服务器需要LAMP环境或LNMP环境,提供分布式系统监控与网络监视功能。具备主机的性能监控,网络设备性能监控,数据库性能监控,多种告警方式,详细报表、图表的绘制等功能。监测对象可以是Linux或Windows服务器,也可以是路由器、交换机等网络设备,通过SNMP、zabbix Agent、PING、端口监视等方法提供对远程网络服务器等监控、数据收集等功能。

zabbix优点:

1、数据采集:可用性和性能检测,自动发现,支持agent、snmp、JMX、telnet等多种采集方式,支持主动和被动模式数据传输、支持用户自定义插件,自定义间隔收集数据

2、高可用:server对设备性能要求低,支持proxy分布式监控,分布式集中管理,有自动发现功能,可以实现自动化监控;开放式接口,扩展性强,插件编写容易

3、告警管理:支持多条件告警,支持多种告警方式,支持多组模板,模板继承。

4、告警设置:告警周期,告警级别,告警恢复通知、告警暂停,时段阈值、支持维护周期、支持单机停用

5、图形化展示:允许自定义创建多监控项视图,网络拓扑,自定义面板展示,自定义IT服务可用性

6、历史数据:历史数据查询可配置,内置housekeeping数据清理机制

7、安全审计:具备安全的用户审计日志,权限认证,用户可以限制允许维护的列表。

zabbix缺点:

1、性能瓶颈,监控系统没有低估高峰期,具有持续性和周期性,机器量越大,数据的增大会使数据库的写入成为一定的瓶颈,官网给出的单机上限5000台,届时就需要增加proxy,增加成本。

2、Zabbix采集数据有pull方式,也就是server主动模式,当目标机器量大之后,pull任务会出现积压。采集数据会延迟

3、项目二次开发,需要分析MySQL表结构,表结构比较复杂,通过API开发对开发能力有要求。

4、内置housekeeping在执行过程中会对数据库增加压力,需要对数据库进行优化
 

demo: http://119.29.168.212:99/

10.InfluxDB【时序数据库】

InfluxDB 是一个相对较新的时序数据库,使用 Go 语言编写,无需外部依赖,安装配置非常方便,适合构建大型分布式系统的监控系统。

其设计目标是实现分布式和水平伸缩扩展。

InfluxDB 的一些主要特征:

  • 无结构 (无模式):可以是任意数量的列
  • 可以设置 metric 的保存时间
  • 支持与时间有关的相关函数 (如min、max、sum、count、mean、median 等),方便统计
  • 支持存储策略: 可以用于数据的删改。(influxDB没有提供数据的删除与修改方法)
  • 支持连续查询: 是数据库中自动定时启动的一组语句,和存储策略搭配可以降低 InfluxDB 的系统占用量。
  • 原生的 HTTP 支持,内置 HTTP API
  • 支持类似 sql 语法
  • 支持设置数据在集群中的副本数
  • 支持定期采样数据,写入另外的measurement,方便分粒度存储数据
  • 自带 web 管理界面,方便使用 (登入方式:http://< InfluxDB-IP>:8083)

11.Cabot【轻量级监控报警服务

Cabot 是一个免费开源的轻量级监控报警服务,集合了 PagerDuty,Server Density,Pingdom 和 Nagios 所具备的一些最佳功能,但是没有这些工具复杂,也不如它们成本高。

Cabot 的架构和 Bosun 类似,都不收集数据。原生支持 Graphite 和 Jenkins,比较少见。

Cabot 提供了一个 Web 界面,允许监控服务(例如“Stage Redis 服务器”,“生产 ElasticSearch 集群”),并在服务发生故障时向值班团队发送电话,短信或电子邮件警报,连一行代码都不需要你写。

Catbot 的报警可以基于:

  • graphite 收集的监控数据;
  • url 的响应内容和状态码;
  • jenkins 编译任务的状态;

而不需要实现和维护一个全新的数据收集器系统。

12.Nagios【开源企业级监控系统】

官方网站:https://www.nagios.org/

Nagios是一款开源的企业级监控系统,能够实现对系统CPU、磁盘、网络等方面参数的基本系统监控,以及 SMTP,POP3,HTTP,NNTP等各种基本的服务类型。另外通过安装插件和编写监控脚本,用户可以实现应用监控,并针对大量的监控主机和多个对象 部署层次化监控架构。

十三款运维监控工具之开源工具介绍

Nagios最大的特点是其强大的管理中心,尽管其功能是监控服务和主机的,但Nagios自身并不包括这部分功能代码,所有的监控、告警功能都是由相关插件完成的。

用户群:适合复杂IT环境的企业

优点:
1. 出错的服务器、应用和设备会自动重启,自动日志滚动

2. 配置灵活,可以自定义shell脚本,通过分布式监控模式

3. 支持以冗余方式进行主机监控,报警设置多样

4. 命令重新加载配置文件无需打扰Nagios的运行

缺点:
1. 事件控制台功能很弱,插件易用性差

2. 对性能、流量等指标的处理不给力

3. 看不到历史数据,只能看到报警事件,很难追查故障原因

4. 配置复杂,初学者投入的时间、精力和成本比较大

13.Ganglia【开源集群监控项目】

官方网站:http://ganglia.info/

Ganglia是加州大学伯克利分校发起的一个开源集群监控项目,设计之初是用于监控数以千计的网络节点。Ganglia是一个跨平台可扩展的,高性能计算系统下的分布式监控系统。它已被广泛移植到各种操作系统和处理器架构上。

十三款运维监控工具之开源工具介绍

用户群:适用于大型服务器集群用户。

优点:
1. 适合监控系统性能,通过曲线很容易见到每个节点的工作状态

2. 可以自定义监控项,监控展示有表格和图像两种,支持手机版

3. 部署方便,通过不同的分层管理上万台机器,无需逐个添加配置

缺点:
1. 没有内置的消息通知系统

2. 没有报警机制,出现问题不能够及时报警

发布了8 篇原创文章 · 获赞 9 · 访问量 7299

猜你喜欢

转载自blog.csdn.net/qq_30113287/article/details/104293928