Monitor 监控架构
采集器: 负责采集监控数据的,采集到数据之后传输给服务端,通常是直接写入时序库
对时序库的数据 :

采集器:负责采集监控数据
采集器的部署方式 :
采集器的数据,推给服务端的两种方法 :
| 采集器 | 优点 | 缺点 | 推荐场景 |
|---|---|---|---|
| Telegraf | 指标的全家桶 | 不适合 Prometheus 生态 | 配合 InfluxDB 使用 |
| Exporters | 生态庞大 | Exporter 水平参差不齐 | Kubermetes |
| Grafana-Agent | 指标, 日志, 链路统一 | 采集器集成不全 | Kubermetes |
| Categraf | 指标, 日志, 链路统一 | 采集器集成不全 | 物理机, 虚拟机, 容器都适用 |
Telegraf 是 InfluxData 公司的产品
Telegraf 采集数据多为字符串类型,这类数据推给 Prometheus,VictoriaMetrics、M3DB、Thanos (数值型时序数据) 要转为数值型存储
对于标签变化的指标 (标签非稳态结构) ,与 Prometheus 生态的时序库对接时 ,要把这类标签丢弃掉
metric_version = 2Exporter : 专门对接 Prometheus 生态的组件
由于 Prometheus 影响较大,很多中间件都内置暴露 /metrics 监控数据的接口
Grafana-Agent 是 Grafana 公司推出的 All-In-One 采集器
Grafana-Agent 有个框架,方便导入各类 Exporter,如: Node-Exporter、Kafka-Exporter、Elasticsearch-Exporter、Mysqld-Exporter
Categraf 是快猫团队开源的一款监控采集器
prometheus.yml 的 scrape 配置,对接各类服务发现机制| 时序库 | 优点 | 缺点 |
|---|---|---|
| OpenTSDB | 指标设计较灵活 | 基于 Hbase, Cassandra 架构较复杂 |
| influxDB | 与 Grafana , Telegraf 整合良好 | 只开源单机版本 |
| TDEngine | 集群爸爸开源 , 针对设备场景优化设计 | 不支持 Prometheus Querier 接口 |
| M3DB | 抗住大容量 , 扩展方便 | 对 CPU,内存要求较高 , 架构复杂 |
| VictoriaMetrics | 集群版 , 架构简单 , 支持 Prometheus Querier 接口 | |
| TimescaleDB | 基于 PostgreSQL 开发 | 国内应用较少 |
OpenTSDB 出现较早,2010 年左右就有了
架构图 :

InfluxDB 来自 InfluxData
TDEngine 是国产版 InfluxDB,针对物联网设备的场景做了优化,性能很好,能配合 Grafana、Telegraf 使用

M3DB 是 Uber 的时序数据库
VM (VictoriaMetrics) : 架构非常简单清晰,采用 merge read 方式,避免数据迁移
/api/v1/query、/api/v1/query_range、/api/v1/label/<label-key>/valuesVM 架构图 :

TimescaleDB : timescale.inc 开发的一款时序数据库,基于 PostgreSQL 设计
告警引擎 : 处理告警规则,生成告警事件
告警引擎的两种架构 :
生成事件后,给告警发送的模块
监控数据的可视化用 Grafana
监控数据可视化的两类需求 :
这篇文章是继上一篇文章“Observability:从零开始创建Java微服务并监控它(一)”的续篇。在上一篇文章中,我们讲述了如何创建一个Javaweb应用,并使用Filebeat来收集应用所生成的日志。在今天的文章中,我来详述如何收集应用的指标,使用APM来监控应用并监督web服务的在线情况。源码可以在地址 https://github.com/liu-xiao-guo/java_observability 进行下载。摄入指标指标被视为可以随时更改的时间点值。当前请求的数量可以改变任何毫秒。你可能有1000个请求的峰值,然后一切都回到一个请求。这也意味着这些指标可能不准确,你还想提取最小/
我是一名决定学习Ruby和RubyonRails的ASP.NETMVC开发人员。我已经有所了解并在RoR上创建了一个网站。在ASP.NETMVC上开发,我一直使用三层架构:数据层、业务层和UI(或表示)层。尝试在RubyonRails应用程序中使用这种方法,我发现没有关于它的信息(或者也许我只是找不到它?)。也许有人可以建议我如何在RubyonRails上创建或使用三层架构?附言我使用ruby1.9.3和RubyonRails3.2.3。 最佳答案 我建议在制作RoR应用程序时遵循RubyonRails(RoR)风格。Rails
我尝试用Ruby设计一个基于Web的应用程序。我开发了一个简单的核心应用程序,在没有框架和数据库的情况下在六边形架构中实现DCI范例。核心六边形中有小六边形和网络,数据库,日志等适配器。每个六边形都在没有数据库和框架的情况下自行运行。在这种方法中,我如何提供与数据库模型和实体类的关系作为独立于数据库的关系。我想在将来将框架从Rails更改为Sinatra或数据库。事实上,我如何在这个核心Hexagon中实现完全隔离的rails和mongodb的数据库适配器或框架适配器。有什么想法吗? 最佳答案 ROM呢?(Ruby对象映射器)。还有
“架设一个亿级高并发系统,是多数程序员、架构师的工作目标。许多的技术从业人员甚至有时会降薪去寻找这样的机会。但并不是所有人都有机会主导,甚至参与这样一个系统。今天我们用12306火车票购票这样一个业务场景来做DDD领域建模。”开篇要实现软件设计、软件开发在一个统一的思想、统一的节奏下进行,就应该有一个轻量级的框架对开发过程与代码编写做一定的约束。虽然DDD是一个软件开发的方法,而不是具体的技术或框架,但拥有一个轻量级的框架仍然是必要的,为了开发一个支持DDD的框架,首先需要理解DDD的基本概念和核心的组件。一.什么是领域驱动设计(DDD)首先要知道DDD是一种开发理念,核心是维护一个反应领域概
是否可以在我的服务器上运行任何工具来监控多个Rails应用程序?我需要监控每个应用程序收到的请求数、每个应用程序使用了多少内存、使用了多少CPU以及其他类似的统计信息。我需要查看每个单独的Rails应用程序的统计信息。 最佳答案 我建议你试试NewRelicRPM.免费版:RPMLiteisthemostwidelyusedsolutionforbasicwebapplicationmonitoring.RPMLiteprovidesapplicationmonitoringforunlimitedJava,RubyorJRubya
我在当前项目中使用由Oracle数据库和memcached支持的RubyonRails。有一个非常常用的功能,它依赖于单个数据库View作为数据源,并且该数据源内部有其他数据库View和表。这是一个虚拟数据库View,能够从一个地方访问所有内容,而不是物化数据库View。大多数情况下,如果用户正在使用他们希望更新的功能,那么让数据保持最新很重要。从这个View获取数据时,我将安全表内部连接到View(安全表不是View本身的一部分),其中包含一些我们用来在更细粒度级别上控制数据访问的字段。例如,安全表有user_id,prop_1,prop_2列,其中prop_1,prop_2是数据库
我正在寻找一种方法来监视流上的事件,以便我可以确定是否有任何内容通过流。如果有,我将开始使用rtmpdump进行录制。我想象这是通过运行一个每60秒检查一次流的cron任务来实现的。如果它确定流正在通过,则调用rtmpdump开始记录它。如果没有,则什么都不做,并在60秒后再次检查。由于rtmpdump只是在没有流数据时出现错误,因此尝试使用它来监视流似乎不是一个好主意,但也许我错了。如果我在逐个案例的基础上手动执行此操作会很容易,但我正在尝试自动执行自动录制流的任务(如果它们可用)。有没有人遇到过这样做的方法?也许我可以在命令行(linux)中使用其他一些工具?如果有帮助,我正在使用
每5分钟(例如)ping20个网站的列表以了解该网站是否响应HTTP202的最佳方法是什么?最简单的想法是将20个URLS保存在数据库中,然后运行数据库并对每个URL执行ping操作。但是,当一个人不回答时会发生什么?之后的人会怎样?此外,是否有更好但更简单的解决方案?恐怕该列表会增长到20000个网站,然后没有足够的时间在我需要ping的5分钟内全部ping通它们。基本上,我是在描述PingDom、UptimeRobot等的工作原理。我正在使用node.js和RubyonRails构建这个系统。我也倾向于使用MongoDB来保存所有ping和监控结果的历史记录。建议?非常感谢!
我们有一个带有广泛管理部分的应用程序。我们对功能有点满意(就像您一样),并且正在寻找一些快速简便的方法来监控“谁使用什么”。理想情况下,一个简单的gem将允许我们在每个用户的基础上跟踪Controller/操作,以构建使用的功能和未使用的功能的图片。任何你会推荐的..谢谢主场 最佳答案 我不知道有什么流行的gem或插件可以解决这个问题;过去,我在ApplicationController中将这种审计实现为before_filter:从内存中:classApplicationControllercurrent_user,:contro
我正在开发一个包含大约10个不同功能组件的Sinatra应用程序。我们希望能够将这些组件混合并匹配到应用程序的单独实例中,完全从config.yaml文件配置,如下所示:components:-route:'/chunky'component_type:FoodListercomponent_settings:food_type:baconmax_items:400-route:'places/paris'component_type:Mappercomponent_settings:latitude:48.85387273165654longitude:2.340087890625-