【ArchSummit架构师峰会】探讨数据与人工智能相互驱动的关系>>> 了解详情
写点什么

开源的监控技术栈除了 ELK,还有 InfluxData 的 TICK

  • 2018-11-17
  • 本文字数:3570 字

    阅读完需:约 12 分钟

开源的监控技术栈除了ELK,还有InfluxData的TICK

应用程序是会表达的,而时序数据就是它们的语言之一。DevOps,云计算和容器技术改变了我们编写和运行应用的方式。基于一些列开源项目,InfluxData 及其社区正在致力于提供一套现代化且灵活的监控工具包。


在过去的十年中,容器,虚拟机,云计算改变了一切。这些变化发生快速,我们需要能够应对这种变化速度的环境,应用程序也需要以一种更便于维护的方式继续演进。因此,我们需要理解应用的行为,准备好应对故障,进而改进应用。现在我们已经拥有了相应的工具和技术,只需要将它们集成起来去理解应用如何运行,基础设施如何演进,并最终理解系统故障进而提升性能。

监控日志

我们一直在读日志,也有一些工具能帮助我们理解应用行为。我们做这些是因为:


  1. 我们必须信任某些东西。光靠屏幕上的信息,我们是没法理解应用行为的。我们需要知道用户如何使用应用,出现了多少异常。可以跟踪的指标有很多,把它们结合起来才能在我们的系统中建立信任。

  2. 我们希望能预测未来。我们希望将预测建立在我们识别出的各类指标和行为上,这样就能够判断我们自身是否在成长,有多少成长,在未来还能够成长多快。有了这些信息,我们可以设计一个方案,或许还能预测一些不太好的事件。


日志样例


系统监控组使用一个叫“tail”的强大命令来读日志。通常,我们的应用通过这种方式表达。至于日志,有一个基础或者说正常状态。如果日志在正常状态下持续输出,那么没问题。如果日志输出地过快或者过慢,那么就有问题了,需要采取纠正措施。



日志并不是理解应用最聪明的方式,但却是最常见的,人人都在用这种方式监控应用。我们现在肯定可以做的更好,不过这个涉及到日志的特性。


日志是描述性的,包含大量信息。将它们保存在数据库中的代价太大。由于日志通常是纯文本格式,它们并不容易索引。这意味着引擎必须努力去理解日志间的关系并且支持搜索信息。如果你有很多日志,或者正在用日志记录应用中发生的一切,你需要一个很好的系统来支持。这很难,但也不是不可能。


有很多工具和服务能够将日志结合并且计算出正在发生的事件,比如 Logstash,Kibana,Elasticsearch,NewRelic,CloudWatch,Graphite 等等。它们中有些是以服务形式提供,有些是开源项目,有些两种形式兼有。关键一点是有很多的选择。

选择日志监控工具

如何选择合适的工具取决于你正在做的事情。有一些场景你需要日志来与人辩论或者仅仅用于存档。既然日志包含正在发生的事件的详细信息,你就可以将日志用于这些场景。当出现一个异常时,你可以断定它的类型。日志更多是用来获取这样的信息的。


然而,在一些其他的场景中,你仅仅想知道应用是如何运行的,比如说日志是变多了还是变少了,异常在时间上又是如何分布的。你并不需要知道究竟发生了什么事,它们为什么发生–你只需要知道应用在行为上有改变就行了。另一方面,你每天同时也在使用时序数据来帮助理解系统行为。时序数据并没有日志那么详细–它们是另一种语言。比如说,CPU、内存的使用率就是时序数据。


你不能仅仅使用时序数据而不使用日志,因为有些问题必须借助日志才能解决。我并不是要在这里辩论日志和时序数据谁更好,因为你很可能两种都需要,它们都有价值。不仅仅两种你都需要,实际上日志就是时序数据的一种形式。如果你用时间序列和值来简化日志,我们可以做一些计算,日志也会更容易索引。



你实际上是在将日志转换成时序数据。想象一下你的应用中有多少登录,多少异常,或者如果你是一家金融公司,有多少笔交易,这些都是时序数据,因为它们是时间点上的一个值,一次登录。它们是时间上的一个分布。这就是时序数据的含义。日志就是可以这样被转换的。这不是一个整数或者一个值,而是从不同角度看的一个日志。


简单说,你可以将日志简化为仅仅一个值以及对应的时间点,你可以将这些时间点进行聚合,比较等等。如果花 10 分钟思考一下你的应用,你能拿到很多时序数据。


另外,所有你能从服务器获得并且使用的资源都是时序数据。你可以使用应用数据统计来可视化它们,进而理解突增的异常率是怎样导致内存使用率上升的。



作为开发者,我们知道,5 年前我们做的所有事情如今会显得很复杂。我们现在的目标是将事情简化。简单的事情更容易解释给别人也容易维护。对于时序数据,我就是这样做的:一个值和一个时间,值是一个数字。有了这种模型,你可以做一些计算,聚合它们,创建一个图表,用代价不那么高昂的方式从应用中提取信息。然而,与 Cassandra,MySQL,MongoDB 这些传统的通用工具相比,InfluxDB 更适合用来处理这类数据,因为它专门为持续查询,保留策略等特定场景提供了功能特性,而不是一套序列和压缩的优化特性。

使用 InfluxDB 作为日志存储

InfluxDB 是一个时序数据库。你可以将应用或服务器产生的所有信息推送到这个数据库。它是一个在 Windows 和 Mac 上都可以下载的 Go 二进制文件,很容易安装和启动。InfluxDB 使用 InfluxQL 表达。这意味着你可以使用与 SQL 很相似的语言来查询这个数据库,而 SQL 你已经很熟悉了,不需要学习另一个新语言。这里是选择 InfluxDB 的一些理由的总结。


  • 容易上手

  • 熟悉的查询语法

  • 无外部依赖

  • 开源

  • 水平可扩展

  • 一套结合紧密的时序数据平台的成员


InfluxDB 拥有很大的用户群和社区。结合以下讨论的 InfluxData 平台的其他组件,InfluxDB 创建了一个全栈监控系统,同时支持非常规时序数据(非固定时间间隔发生的事件)和常规时序数据(固定时间间隔的事件指标),如下。



在 InfluxData,我们做了一系列基准测试来展示为什么你需要选择合适的时序数据库而不是你喜欢的那类数据库。InfluxDB 和其他可对比的数据库间的写性能差异很大。基准测试通常有倾向性,但是我们会通过独立测试尝试将它们变得更客观。参考 InfluxDB 与 Elasticsearch, MongoDB,Cassandra 和 OpenTSDB 的对比基准测试。

搭建现代化监控系统

InfluxData 拥有一套全栈的开源项目-- TelegrafInfluxDBChronografKapacitor 。 它们在一起构成 TICK 栈。


构建监控或事件系统的完整栈


  1. Telegraf 是服务端的一个指标采集和数据发送代理,它是一个可以下载和启动的 Go 二进制文件,使用起来非常简单。你可以在每个服务器上安装一个 Telegraf,将它配置为从所在服务器上采集信息。Telegraf 对各类指标,事件,运行它所在的容器或系统的日志,从第三方 API 拉取的指标甚至通过 StatsD 和 Kafka 消费者服务监听到的指标都提供了集成。Telegraf 是插件化的,并提供输入和输出插件,输出插件可以将指标发送至各类数据仓库,服务,消息队列,比如 InfluxDB,Graphite,OpenTSDB,Datadog,Librato,Kafka,MQTT,NSQ 等等。如果你已经有一个监控系统,并且正在寻找一个强大的采集器,你可以使用 Telegraf。



  1. InfluxDB 是存储引擎,可作为所有带有大量时间戳数据使用场景的数据仓库,包括 DevOps 监控,日志数据,应用指标,物联网(IoT)传感器数据以及实时分析数据。所有来自 Telegraf 的指标都可以被发送至 InfluxDB。InfluxDB 可以被配置为仅仅保留特定时长的数据,从系统中自动过期并删除不再需要的数据,这样可以节省机器的存储空间。InfluxDB 还提供了一个类似 SQL 的查询语言来进行数据交互。



  1. Chronograf 是 InfluxData 平台 TICK 栈的用户接口组件,在 Chronograf 上可以看到所有存储在 InfluxDB 的数据,这样就能构建健壮的查询和告警。Chronograf 使用简单,包含一些模板和库让你能够迅速构建带有实时可视化数据的仪表盘。你也可以在 Chronograf 上管理 InfluxDB 和 Kapacitor。如果你不打算使用 Chronograf,还有其他实现 InfluxDB 输出插件的项目,包括 Grafana。



  1. Kapacitor 是 TICK 栈的本地实时流式数据处理引擎,可以被配置为基于监听到的指标,对正在发生的事件提前采取措施。它可以同时处理来自 InfluxDB 的流式数据和批数据。Kapacitor 允许嵌入自定义逻辑或者用户定义的函数来处理动态阈值告警,对指标进行模式匹配,计算概率统计异常,以及基于告警执行类似动态负载均衡的特定动作。你可以发送 Kapacitor 告警到兼容的事件管理集成组件,包括 HipChat,OpsGenie,Alerta,Sensu,PagerDuty,Slack 等等。比如,Kapacitor 可以发送一条消息到 PagerDuty,如果夜里发生了问题你可以被通知到,或者发送一条消息到 Slack。



启动 InfluxDB 并运行整个 TICK 栈是相当简单的。你可以运行二进制文件或者 Docker 容器,这样一个监控系统就正常运转了。但是一个监控系统真正的目标是当基础设施出问题或者应用宕机时通知你。如果你的监控系统和服务器一起宕掉了,那么它就没有正常工作。所以你需要信任你的监控系统。你需要将它与应用以及基础设施解耦,这样你能 100%确定当应用和服务器宕掉时监控系统仍然能正常工作。你需要知道这不是一个简单的目标,也不仅仅意味着一些 Docker 运行命令。


不是人人都能管理一个监控系统


查看英文原文:How to Use the Open Source TICK Stack to Spin Up a Modern Monitoring System for Your Application and Infrastructure


2018-11-17 00:002803

评论

发布
暂无评论
发现更多内容

Atlassian应对CVE-2022-22963,CVE-2022-22965的常见问题

龙智—DevSecOps解决方案

Atlassian CVE-2022-22963 CVE-2022-22965

java培训:怎样才能写出一个优秀的对外接口

@零度

JAVA开发 对外接口

大数据培训关于数据采集面试问题分享

@零度

数据采集 面试问题 大数据开发

专车数据层架构进化往事:好的架构是进化来的,不是设计来的

勇哥java实战分享

架构

去中心化钱包系统开发app,imtoken钱包平台搭建源码

Geek_56201b

#区块链# 源码搭建 去中心化钱包

半导体行业如何保持高效远程办公?因果集群(Causal Clustering)了解一下!

龙智—DevSecOps解决方案

远程办公 因果集群

react源码解析11.生命周期调用顺序

buchila11

React

Linux驱动开发-编写W25Q64(Flash)驱动

DS小龙哥

4月月更

Android C++系列:C++最佳实践2抽象类

轻口味

c++ android 4月月更

得物App H5秒开优化实战

得物技术

前端 H5 优化 实战 Web H5

从Opentracing、OpenCensus 到 OpenTelemetry,看可观测数据标准演进史

阿里巴巴云原生

react源码解析12.状态更新流程

buchila11

React

云风:不加班、不炫技,把复杂的问题简单化

博文视点Broadview

TiDB 查询优化及调优系列(一)TiDB 优化器简介

PingCAP

新思科技助力Linux基金会开展最新开源普查项目

InfoQ_434670063458

Linux 开源 新思科技

交易所多种模式开发、各种源码交易

Geek_56201b

交易所开发 区块链应用开发 软件定制

jackson学习之九:springboot整合(配置文件)

程序员欣宸

4月月更

自己动手写Docker系列 -- 5.8实现容器制定环境变量运行

Go Docker 4月月更

EventBridge 特性介绍|以 IaC 的方式使用 EventBridge

阿里巴巴云原生

周日直播|OpenMLDB Pulsar Connector,高效打通实时数据到特征工程

Apache Pulsar

开源 架构 云原生 Apache Pulsar 消息中间件

web前端培训学习需要掌握哪些 Linux 命令

@零度

前端开发

华为云推出限量NFT云宝,区块链技术为你的数字资产保驾护航

华为云开发者联盟

华为云 NFT 云宝 华为云NFT 华为云数字资产链

今天聊一聊合成数据 (Synthetic Data)

澳鹏Appen

人工智能 数据集 数据标注 数据训练 合成数据

Docker 实战教程之从入门到提高 (四)

Jerry Wang

Docker 容器 虚拟化 docker image 4月月更

低代码极简部署

源字节1号

低代码开发

GPU和AT的区别在哪里?GPU与AT有哪些区别?

Finovy Cloud

人工智能 GPU服务器 显卡、gpu GPU算力

面试突击39:synchronized底层是如何实现的?

王磊

Java java面试

Jira 云产品宕机多日,业界热议上云如何保障数据安全

万事ONES

Atlassian Jira 研发管理工具 项目管理工具 企业研发管理

共探开源生态|Apache Pulsar 社区助力 Apache APISIX Summit Asia 2022

Apache Pulsar

开源 架构 云原生 Apache Pulsar Apache Pulsar 社区

如何通过云效Codeup高效落地分支模式,提升开发协作率

阿里云云效

云计算 阿里云 版本管理 分支管理 分支模式

web技术支持| 简单实现Vue第一章:模板编译

anyRTC开发者

Vue 前端 Web 音视频 WebRTC

开源的监控技术栈除了ELK,还有InfluxData的TICK_软件工程_Influxdata_InfoQ精选文章