Prometheus+Grafana监控系统部署与使用
Prometheus 简介
Prometheus是一套开源的监控&报警&时间序列数据库的组合,起始是由SoundCloud公司开发的。随着发展,越来越多公司和组织接受采用Prometheus,社区也十分活跃,他们便将它独立成开源项目,并且有公司来运作。google SRE的书内也曾提到跟他们BorgMon监控系统相似的实现是Prometheus。现在最常见的Kubernetes容器管理系统中,通常会搭配Prometheus进行监控。
1)Prometheus的特点
强大的数据模型,Prometheus采集的监控数据均以metric的形式存放在内置的时序数据库TSDB当中易于管理,因为Prometheus的核心部分只有一个单独的二进制文件,因此不存在任何的第三方依赖强大的查询语言,Prometheus内置了一个强大的数据查询语言PromQL, 通过它可以实现对监控数据的查询与聚合高可用与可扩展,Prometheus的数据不仅可以存储在本地,还可以使用远程存储,同时还可以使用第三方工具加上它的联邦集群来实现高可用``可视化平台,Prometheus自带了一个UI,不过较为简陋,但Grafana天然支持Prometheus,两者完美结合,可以创建更加精美的数据监控图标;
2)Prometheus数据采集方式
pull方式:该方式为拉取形式,首先需要在Client安装exporter,exporters以守护进程的模式运行,然后开始采集数据每个exporters程序为一个单独的http-server,因为它可以对http的请求做出响应,并返回metric(K/V数据)而Prometheus-server则通过pull的形式去访问每个节点上的exporter并采集所需要的数据,默认为该方式;
push方式:该方式为推送形式,如需使用push方式,则需在服务端或者客户端上安装pushgateway插件pushgateway我们可以将其理解为一个代理,它位于客户端与服务端之间pushgateway先接收指标,然后pushgateway再推送给prometheus-server,这里的pushgateway不一定要安装客户端,也可以安装在服务端甚至其它节点;
3)Prometheus的指标类型
指标的英文叫做metrics,metrics就是一组K/V数据,可以理解为metrics是对采集过来的数据的一种统称而非一个具体的数值或者指标,因为指标的类型是多样的,但实际在Prometheus-server当中并不对指标类型进行区分``而是简单地把这些指标统一视为无类型的时间序列,说到这里,我们来看看metrics的指标类型有哪些;
1.Counter(计数器):从0开始累积计算,代表一种样本数据单调递增的指标,也就是它只增不减,除非监控系统发生了重置我们可以用这种类型的指标来表示服务器的请求数量,错误发生的总数量,已经完成的总数量在使用Counter类型时,不要将其应用于样本数据非单调递增的指标,比如说系统当前运行的进程数量,此时应该使用其它类型;
2.Gauge(仪表盘):它收集的数据是瞬时的,与时间没关系,这种类型代表一种样本数据可以任意变化的指标,也就是它不一定会持续增长,但也不一定会持续降低它的变化没有规则,我们可以使用这种类型的指标来采集硬盘容量的使用率与内存使用率,同时也可以表示能随时增加或者减少的总数,比如并发请求数量;
3.Histogram(直方图):直方图用于表示一段时间内的数据采集结果,并能够对指定区间以及总数进行统计,它通常用来计算分位数的直方图,比如说请求的持续时间或者响应的大小;
4.Summary(摘要):它和Histogram类型相似,用于表示一段时间内的数据采集结果,但是它直接存储了分位数而不是通过区间来进行计算
Prometheus 优点
另外Prometheus还存在以下优点:
1.高效:单一Prometheus可以处理数以百万的监控指标;每秒处理数十万的数据点。
2.易于伸缩:通过使用功能分区(sharing)+联邦集群(federation)可以对Prometheus进行扩展,形成一个逻辑集群;Prometheus提供多种语言的客户端SDK,这些SDK可以快速让应用程序纳入到Prometheus的监控当中。
3.良好的可视化:Prometheus除了自带有Prometheus UI,Prometheus还提供了一个独立的基于Ruby On Rails的Dashboard解决方案Promdash。另外最新的Grafana可视化工具也提供了完整的Proetheus支持,基于Prometheus提供的API还可以实现自己的监控可视化UI。
4.监控更多多样性**:prometheus支持多种语言的的客户端,我们通过客户端方便对核心业务进行埋点,比如下单,添加购物车等流程。
而且prometheus已经有非常多的系统集成;
比如:应用层面的监控:nginx,haproxy,mysql,docker等;
系统层面如: SNMP协议监控,主机监控,进程监控;
容器云监控: docker,k8s openstack私有云;
5.非常高效的存储 :平均一个采样数据占 ~3.5 bytes左右,320万的时间序列,每30秒采样,保持60天,消耗磁盘大概228G。
Prometheus 架构
此图说明了Prometheus的体系结构及其一些生态系统组件:
对照图中的每一部分进行介绍:
1.prometheus server: 用于收集和存储时间序列数据。
2.Retrieval:采样模块,prometheus的服务器在哪里拉取数据,检索拉取到的数据分发给 TSDB进行存储;
TSDB:存储模块默认本地存储为TSDB;
HTTP server : 提供http接口查询和面板,默认端口为9090;3.Service Discovery:
服务发现,prometheus支持多种服务发现机制: 文件,DNS,k8s,openstack,等,基于服务发现的过程,通过第三方接口,prometheus查询到需要监控的target列表,然后轮询这些target获取监控数据;4.客户端SDK
官方提供的客户端类库有go,java,python,ruby;5.short-lived jobs:
存在时间不足以被删除的短暂或批量业务,无法通过pull的方式拉取,需要使用push的方式,与pushgeteway结合使用;6.proDash
使用rails开发的dashboard,用于可视化指标数据;7.Exporters:用于暴露已有的第三方服务的 metrics 给 Prometheus。
8.Alertmanager:从 Prometheus server 端接收到 alerts 后,会进行去除重复数据,分组,并路由到对收的接受方式,发出报警。常见的接收方式有:电子邮件,pagerduty,OpsGenie, webhook 等。
9.Push Gateway:主要用于短期的 jobs。由于这类 jobs 存在时间较短,可能在 Prometheus 来 pull 之前就消失了。为此,这次 jobs 可以直接向 Prometheus server 端推送它们的 metrics。
10.prometheus_cli:命令行工具;
Prometheus 的工作流程
prometheus server 定期从配置好的jobs或者exporters中拉metrics.或者接受来自pushgateway发过来的metrics,或者从其他的prometheus server中拉取metrics
prometheus server 在本地存储收集到的metrics,并运行已经定义好的arlt.rules,记录新的时间序列或者向alertmanager推送报警
Alertmanager根据配置文件,对接受的警报进行处理,发出告警
在图形界面中,可视化采集数据,可以使用别人写好的grafana模板。
Prometheus 安装部署
下载地址:https://github.com/prometheus/prometheus/releases/
[root@ chenc01 ~]# tar xf prometheus-2.16.0.linux-amd64.tar.gz
[root@ chenc01 ~]# mv prometheus-2.16.0.linux-amd64 /usr/local/prometheus
[root@ chenc01 ~]# cd /usr/local/prometheus/
[root@ chenc01 prometheus]# pwd
/usr/local/prometheus
[root@ chenc01 prometheus]# ls
console_libraries consoles LICENSE NOTICE prometheus prometheus.yml promtool tsdb
[root@ chenc01 prometheus]# ./prometheus --version
prometheus, version 2.16.0 (branch: HEAD, revision: b90be6f32a33c03163d700e1452b54454ddce0ec)build user: root@7ea0ae865f12build date: 20200213-23:50:02go version: go1.13.8# 后台启动普罗米修斯
[root@ chenc01 prometheus]# ./prometheus &
[1] 1920
。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
Prometheus 使用
1、访问Prometheus
通过后台访问http://ip:9090
2、查看状态
3、查看配置信息
4、查看运行信息
Grafana 简介
Grafana是一款用Go语言开发的开源数据可视化工具,可以做数据监控和数据统计,带有告警功能。目前使用grafana的公司有很多,如paypal、ebay、intel等。
Grafana还支持多种数据源,包括Elasticsearch,InfluxDB,MySQL,OpenTSDB,在部署和使用Grafana之前,我们先来看看Grafana的几个基本术语 ;
1)Grafana的基本术语
1.DataSource(数据源):在上面我们说到了,Grafana支持多种数据源,包括但不限于Prometheus,而数据源通俗来讲就是提供数据的对象,比如Zabbix,比如Prometheus
2.Dashboard(仪表盘):仪表盘就是一个呈现页面,当我们添加好对应的数据源以后,这个时候就需要实现数据的可视化,在Grafana中,可以通过Dashboard来组织和管理数据可视化图表;
3.Row(行):行是Dashboard的组成单元,一个Dashboard可以包含多个行,而一个行当中又可以展示一种或者多种信息的组合,比如负载状态,内存使用率,磁盘使用率;
4.Panel(面板):面板我们可以理解为是Row展示信息的方式,它支持表格(tables),列表(alert list),热图(heatmap),在Grafana当中,所有的面板均以插件的形式进行使用;
5.Query Editor(查询编辑器):查询器的作用是指定获取哪一部分的数据,这个有点类似于SQL语句,但我们如果添加的数据源为Prometheus,那实际上使用的为PromQL;
6.User(用户):用户和我们平常登录系统的用户概念一样,Grafana中包含三种角色,分别为admin,editor,viewer,read only editor在这其中,admin的权限最高,它可以执行如何操作,editor只能创建DashBoard,viewer只能查看DashBoard,read only editor可以修改DashBoard,但不允许保存;
7.Organization(组织):在Grafana当中,DataSource与Dashboard属于一个组织,每个用户可以拥有多个不同的组织,在不同的组织当中,可以为不同的用户赋予不同的权限需要知道的是,不同组织之间的数据源和仪表板都不同,每当在Grafana当中创建一个组织,就相当于开启了一个全新的视图,这时候所有的数据源与仪表盘等内容都要重新去添加和配置
Grafana 安装部署
1)下载软件包并安装Grafana
首先登陆grafana官网,选择需要版本进行下载rpm包,下载链接为:Grafana官网下载路径
`[root@prometheus ~]# wget -c https:``//dl.grafana.com/oss/release/grafana-6.6.2-1.x86_64.rpm``[root@prometheus ~]# yum -y install /root/grafana-6.6.2-1.x86_64.rpm`
2)熟悉Grafana的配置文件
Grafana的默认配置文件为:/etc/grafana/grafana.ini,其配置项有700多行,多数为默认即可,下面来看看几个常用的配置项
[root@ chenc01 ~]# vim /etc/grafana/grafana.ini
[paths]
# 定义数据存储路径,用来存储sqlite3,临时文件
data = /var/lib/grafana# 在data目录中的临时数据要存储多久,默认为24h,也可以
temp_data_lifetime = 24h# 定义日志存储路径
logs = /var/log/grafana# 定义插件存储目录
plugins = /var/lib/grafana/plugins[server]
# 定义访问的协议,默认为http
protocol = http# 定义监听的IP地址,默认为所有
http_addr = 10.2.3.11# 定义监听的端口,默认为3000
http_port = 3000# 定义在浏览器中访问Grafana的全路径,默认即可,也可以写成http://ip:port
root_url = %(protocol)s://%(domain)s:%(http_port)s/# 是否记录web请求日志,默认为关闭
router_logging = false# 前端静态文件的存储路径,默认为/usr/share/grafana/public目录
static_root_path = public# 选择数据库类型,默认为sqlite3,也可以选择MySQL
[database]
type = sqlite3# 定义连接地址与端口
host = 127.0.0.1:3306# 定义数据库名称
name = grafana# 定义连接用户
user = root# 定义连接密码
password = 123# 关闭SSL
ssl_mode = disable# 这里只是sqlite3需要,定义sqlite3的数据存储路径,默认为/var/lib/grafana目录
path = grafana.db[users]
# 是否允许普通用户登录,默认为允许
allow_sign_up = true# 是否允许普通用户创建组织,默认为允许
allow_org_create = true# 如果为true,则自动把新增的用户增加到id为1的组织中,如果为false,则新建用户的时候会新增一个组织 ,默认为true
auto_assign_org = true# 默认的背景页面,也可以选择light
default_theme = dark
3)定义Grafana的配置文件
[root@ chenc01 ~]# cp /etc/grafana/grafana.ini /etc/grafana/grafana.ini.bak
[root@ chenc01 ~]# vim /etc/grafana/grafana.ini
[paths]
data = /var/lib/grafana
temp_data_lifetime = 24h
logs = /var/log/grafana
plugins = /var/lib/grafana/plugins
provisioning = conf/provisioning[server]
protocol = http
http_addr = 10.2.3.11
http_port = 3000
root_url = %(protocol)s://%(domain)s:%(http_port)s/
serve_from_sub_path = false
router_logging = false
static_root_path = public
enable_gzip = true[users]
allow_sign_up = true
allow_org_create = true
auto_assign_org = true
default_theme = dark
4)启动Grafana并设置为开机自启
[root@ chenc01 ~]# systemctl enable grafana-server
Created symlink from /etc/systemd/system/multi-user.target.wants/grafana-server.service to /usr/lib/systemd/system/grafana-server.service.
[root@ chenc01 ~]# systemctl start grafana-server
level=info ts=2020-03-28T06:28:07.583Z caller=compact.go:496 component=tsdb msg="write block" mint=1585366069255 maxt=1585368000000 ulid=01E4FX6YNHTQPYGTEKNJ9TCH2E duration=3.110826386slevel=info ts=2020-03-28T06:28:07.682Z caller=head.go:661 component=tsdb msg="head GC completed" duration=72.63582ms
[root@ chenc01 ~]# systemctl status grafana-server
● grafana-server.service - Grafana instanceLoaded: loaded (/usr/lib/systemd/system/grafana-server.service; enabled; vendor preset: disabled)Active: active (running) since Sat 2020-03-28 14:28:09 CST; 4s agoDocs: http://docs.grafana.orgMain PID: 17041 (grafana-server)CGroup: /system.slice/grafana-server.service└─17041 /usr/sbin/grafana-server --config=/etc/grafana/grafana.ini --pidfile=/var/...Mar 28 14:28:08 localhost.localdomain grafana-server[17041]: t=2020-03-28T14:28:08+0800 lvl=..."
Mar 28 14:28:08 localhost.localdomain grafana-server[17041]: t=2020-03-28T14:28:08+0800 lvl=..."
Mar 28 14:28:09 localhost.localdomain grafana-server[17041]: t=2020-03-28T14:28:08+0800 lvl=..."
Mar 28 14:28:09 localhost.localdomain grafana-server[17041]: t=2020-03-28T14:28:08+0800 lvl=...s
Mar 28 14:28:09 localhost.localdomain grafana-server[17041]: t=2020-03-28T14:28:09+0800 lvl=...s
Mar 28 14:28:09 localhost.localdomain grafana-server[17041]: t=2020-03-28T14:28:09+0800 lvl=...e
Mar 28 14:28:09 localhost.localdomain grafana-server[17041]: t=2020-03-28T14:28:09+0800 lvl=...p
Mar 28 14:28:09 localhost.localdomain grafana-server[17041]: t=2020-03-28T14:28:09+0800 lvl=..."
Mar 28 14:28:09 localhost.localdomain grafana-server[17041]: t=2020-03-28T14:28:09+0800 lvl=...=
Mar 28 14:28:09 localhost.localdomain systemd[1]: Started Grafana instance.
Hint: Some lines were ellipsized, use -l to show in full.
Grafana 使用
1)访问Grafana
提示:访问的用户名与密码为admin,第一次登录会被要求更改密码
2)Grafana基本配置
1)添加数据源
提示:这里选择Prometheus作为数据源,如果选择的数据源为Zabbix,则需要安装插件
2)查询仪表盘
提示:这里进入官网,直接复制ID即可,当然也可以下载,然后再Grafana中上传JSON文件
3)添加仪表盘
提示:选择添加以后,将刚刚复制的ID粘贴进去即可自动识别
4)展示数据
Prometheus+Grafana监控系统部署与使用相关推荐
- Grafana监控系统之Prometheus+Grafana监控系统搭建
Grafana监控系统之Prometheus+Grafana监控系统搭建 本文章内容较长,可通过右上角点击目录快速定位想看的内容 => => 一. 概述 1.1 Grafana介绍 Gra ...
- 万字好文!Docker环境部署Prometheus+Grafana监控系统
点击上方 "编程技术圈"关注, 星标或置顶一起成长 后台回复"大礼包"有惊喜礼包! 每日英文 It doesn't matter how slow you ar ...
- 搭建prometheus+grafana监控系统
prometheus简介 Prometheus是最初在SoundCloud上构建的开源系统监视和警报工具包 .自2012年成立以来,许多公司和组织都采用了Prometheus,该项目拥有非常活跃的开发 ...
- k8s prometheus/grafana 监控系统建设
全栈工程师开发手册 (作者:栾鹏) 架构系列文章 prometheus架构 其中 1.pushgateway是用来接收业务推送的数据形成metrics接口. 2.exporter是用来监控组件(三方中 ...
- Prometheus 搭建监控系统
Prometheus 是一款基于时序数据库的开源监控告警系统,说起 Prometheus 则不得不提 SoundCloud,这是一个在线音乐分享的平台,类似于做视频分享的 YouTube,由于他们在微 ...
- 基于 Prometheus 的监控系统实践
监控作为底层基础设施的一环,是保障生产环境服务稳定性不可或缺的一部分,线上问题从发现到定位再到解决,通过监控和告警手段可以有效地覆盖了「发现」和「定位」,甚至可以通过故障自愈等手段实现解决,服务开发和 ...
- Prometheus+Grafana 监控 MySQL
Prometheus 获取 MySQL 的监控数据,并通过 Grafana 展示的过程.首先来看整体架构图: 1 架构图 如上图,通过 mysql_exporter 获取 MySQL 的监控数据,通过 ...
- 基于Prometheus+Grafana监控SQL Server数据库
墨墨导读:本文整理了基于Prometheus+Grafana监控SQL Server数据库的全过程,分享至此,希望对大家有帮助. 搭建SQL Server环境 使用容器建立SQL Server环境非常 ...
- prometheus+grafana监控以及企业微信告警
prometheus+grafana监控以及企业微信告警(单机二进制部署) 一.下载部署包,更改其中两个包名称,放到/data下 1.安装包以及解压步骤 grafana-enterprise-8.4. ...
- 十一、Grafana监控系统
@Author : By Runsen @Date : 2020/6/19 作者介绍:Runsen目前大三下学期,专业化学工程与工艺,大学沉迷日语,Python, Java和一系列数据分析软件.导致翘 ...
最新文章
- python 快速排名发包_2020年SEO快速排名发包技术及原理
- 【Python】如何学好Python
- String是值传递还是引用传递
- 进度条设置_项目功能分解4:MATLAB GUI如何设计有特色的进度条。
- 服务器运维一般的故障率,服务器平均故障率
- webpack的一些常用配置 (转)
- android Content provider 组件
- IOS 学习笔记 2015-03-24 OC-API-不可变字符串
- 转帖一则——从医学角度论成熟
- AD常见集成库和立创EDA封装库导入AD与Gerber文件生成
- netstate 命令归纳
- 大学生搜题软件哪个好用?2020搜题软件排行榜
- 我的世界java版幻翼_见到幻翼的方式是熬夜?这几个被忽略了
- cpu 调频 温度 ondemand
- 深入理解Character Region Awareness for Text Detection (CRAFT)
- 同一局域网下windows主机和wsl子系统相互网络服务访问
- 【U8】登录账套显示“账套XXX年度XXXX是以前版本的数据,请使用系统管理升级”
- 虽然中国超大城市的施工成本可能上升,但仍处于世界最便宜之列
- 论文笔记【A Comprehensive Study of Deep Video Action Recognition】
- 【NeurIPS2020视频解读】图机器学习热门方向及应用