Prometheus Monitoring System & Time Series Database
什么是 TSDB (Time Series Database):
我们可以简单的理解为.一个优化后用来处理时间序列数据的软件,并且数据中的数组是由时间进行索引的.
时间序列数据库的特点:
- 大部分时间都是写入操作
- 写入操作几乎是顺序添加;大多数时候数据到达后都以时间排序.
- 写操作很少写入很久之前的数据,也很少更新数据.大多数情况在数据被采集到数秒或者数分钟后就会被写入数据库.
- 删除操作一般为区块删除,选定开始的历史时间并指定后续的区块.很少单独删除某个时间或者分开的随机时间的数据.
- 数据一般远远超过内存大小,所以缓存基本无用.系统一般是 IO 密集型
- 读操作是十分典型的升序或者降序的顺序读,
- 高并发的读操作十分常见.
因此非常适用于用来存储和处理监控数据。
什么是Prometheus
Prometheus是SoundCloud发布的一个开源的系统监控和报警工具。自2012成立以来,许多公司和组织都采用了普罗米修斯,该项目拥有一个非常活跃的开发人员和用户社区。它现在是一个独立的开源项目,并且独立于任何公司。为了强调这一点,并明确项目的治理结构,Prometheus在2016年加入了Cloud Native Computing Foundation,作为在 kubernetes之后的第二个由基金会主持的项目。
Prometheus是一个强大的监控平台,提供了监控数据搜集、存储、处理、可视化和告警一套完整的解决方案。
官方网站:https://prometheus.io
Features
prometheus主要的特性:
- 多维数据模型(时序列数据由metric名和一组key/value组成)
- 在多维度上灵活的查询语言(PromQl)
- 不依赖分布式存储,单主节点工作.
- 通过基于HTTP的pull方式采集时序数据
- 可以通过中间网关进行时序列数据推送(pushing)
- 目标服务器可以通过发现服务或者静态配置实现
- 多种可视化和仪表盘支持
Components
prometheus生态系统由多个组件组成,其中许多是可选的:
- the main Prometheus server which scrapes and stores time series data
- client libraries for instrumenting application code
- a push gateway for supporting short-lived jobs
- special-purpose exporters for services like HAProxy, StatsD, Graphite, etc.
- an alertmanager to handle alerts
- various support tools
Most Prometheus components are written in Go, making them easy to build and deploy as static binaries.
Architecture
从这个架构图,也可以看出 Prometheus 的主要模块包含, prometheus server, exporters, pushgateway, PromQL, Alertmanager, WebUI 等。下面我就简单介绍各个组件实现的功能:
1. prometheus server: 定期从静态配置的 targets 或者服务发现(主要是DNS、consul、k8s、mesos等)的 targets 拉取数据。
2. exporters:负责向prometheus server做数据汇报的程序统。而不同的数据汇报由不同的exporters实现,比如监控主机有node-exporters,mysql有MySQL server exporter,更多请参考链接。
3. pushgateway:主要使用场景为:
Prometheus 采用 pull 模式,可能由于不在一个子网或者防火墙原因,导致 Prometheus 无法直接拉取各个 target 数据。在监控业务数据的时候,需要将不同数据汇总, 由 Prometheus 统一收集。
总结:实现类似于zabbix-proxy功能;
4. Alertmanager:实现prometheus的告警功能。
5. webui:主要通过grafana来实现webui展示。
环境搭建
Prometheus Server
Prometheus Server 本身也将以容器的方式运行。
Exporter
Prometheus 有很多现成的 Exporter,完整列表请参考 https://prometheus.io/docs/instrumenting/exporters/
我们将使用:
Node Exporter,负责收集 host 硬件和操作系统数据。它将以容器方式运行在所有 host 上。
cAdvisor,负责收集容器数据。它将以容器方式运行在所有 host 上。
Prometheus Monitoring System & Time Series Database的更多相关文章
- Prometheus Monitoring Solution
Prometheus Monitoring Solution 普罗米修斯 https://prometheus.io/ 警报 监控 增强指标和警报 领先 开源监控解决方案 https://promet ...
- 【翻译】从头开始写一个时间序列数据库-Writing a Time Series Database from Scratch
本文来自: https://fabxc.org/tsdb/, 如翻译有误,请纠正. 我是从事监控工作的.特别是Prometheus, 一个包含自定义的时间序列库以及集成Kuberntes的监控系统. ...
- Time series database
https://en.wikipedia.org/wiki/Time_series_database https://influxdb.com/docs/v0.9/introduction/getti ...
- InfluxDB 2.x Open Source Time Series Database
1. 说明 目前,大家普遍还在采用 InfluxDB 1.x 的版本,官方2.x的版本已经发布一段时间了, 其主推flux语言且自带前端炫酷图表. 2. 官方网站 https://www.influx ...
- 项目管理实践【六】自动同步数据库【Using Visual Studio with Source Control System to synchronize database automatically】
在上一篇项目管理实践[五]自动编译和发布网站中,我们讲解了如何使用MSBuild+Robocopy+WebDeployment来自动编译和部署网站,今天,我们来看一下,如何使用MSBuild +SVN ...
- 关于Time Series Database
今天观察了下clojure之父datomic.com的数据库 有点类似sequence数据库的变种 不过这类数据库,感觉用在移动端会更有市场: 1. 移动端需要这种可以本地存储,无删除,联网只增加,只 ...
- Prometheus & SoundCloud
Prometheus 系统监控方案 一 - Vovolie - 博客园https://www.cnblogs.com/vovlie/p/Prometheus_CONCEPTS.html Prometh ...
- Prometheus 系列开篇:为什么要学 Prometheus ?
「Prometheus 系列开篇:为什么要学 Prometheus ?」首发于[陈树义]公众号,点击跳转到原文https://mp.weixin.qq.com/s/HCS6X3l6nVBw_hAnd6 ...
- go语言项目汇总
Horst Rutter edited this page 7 days ago · 529 revisions Indexes and search engines These sites prov ...
随机推荐
- Apache thrift - 使用,内部实现及构建一个可扩展的RPC框架
本文首先介绍了什么是Apache Thrift,接着介绍了Thrift的安装部署及如何利用Thrift来实现一个简单的RPC应用,并简单的探究了一下Thrift的内部实现原理,最后给出一个基于Thri ...
- iOS JSON字符串转化为字典-字典转Json字符串-
1. JSON字符串转化为字典 + (NSDictionary *)dictionaryWithJsonString:(NSString *)jsonString { if (jsonString = ...
- ios -为什么用WKWebView加载相同的html文本,有时展示的内容却不一样。
如图: 红色框部分是WKWebView,左边的是正常显示情况,右边的异常显示.我是在网页加载完成回调里执行的webview高度自适应内容: // 页面加载完成之后调用 - (void)webVie ...
- 【转】Visual studio 快捷键大全
原文:http://book.douban.com/review/4871157/ 可同时参考:http://www.cnblogs.com/TankXiao/p/3164995.html 还记得刚工 ...
- Git安装部署
1.1 最新git源码下载地址 https://github.com/git/git/releases https://www.kernel.org/pub/software/scm/git/ 1.2 ...
- C++编译过程与内存空间
为什么须要知道C/C++的内存布局和在哪能够能够找到想要的数据?知道内存布局对调试程序很有帮助,能够知道程序运行时,究竟做了什么,有助于写出干净的代码.本文的主要内容例如以下: 源文件转换为可运 ...
- Unity3d 重力感应
Input.acceleration 加速度 最近一次测量的设备在三维空间中的线性加速度(只读); void Update () { v3=Input.acceleration; } void OnG ...
- Delphi Pdf的使用方法
此方法安装了llPDFLib.v3.6 控件.对pdf左侧.右侧正文进行了操作. procedure TForm1.Button1Click(Sender: TObject); var node,nd ...
- JavaScript事件onblur与onfocus区别
一.onblur 1.1 说明 onblur属性在元素失去焦点时触发,onblur常用于表单验证代码(例如用户离开表单字段). 1.2 示例 <input type="text&quo ...
- MySQL将语句写入到binlog二进制日志中
由于二进制日志是公共资源,所有线程都要写二进制日志,所以一定要避免两个线程同时更新二进制日志.因此,在事件组写二进制日志时,二进制日志将获得一个互斥锁LOCK_log,然后在事件组写完后释放,由于服务 ...