Prometheus

引言

为什么要监控?
答:长期趋势分析;通过对监控样本数据的持续收集和统计,对监控指标进行长期趋势分析。
对照分析;通过监控能够方便的对系统进行跟踪和比较。
告警;当系统出现或者即将出现故障时,监控系统需要迅速反应并通知管理员,从而能够对问题进行快速的处理或者提前预防问题的发生,避免出现对业务的影响。故障分析与定位;当问题发生以后需要对问题进行调查和处理。
通过对不同监控以及历史数据的分析,能够找到并解决根源问题。
数据可视化;通过可视化仪表盘能够直接获取系统的运行状态、资源使用情况、以及服务运行状态等直观的信息。

监控的四要素:
监控对象 【主机状态、服务、资源、页面、URL】
用什么监控 【zabbix、nagios、Prometheus】
什么时间监控 【7x24、5x8】
报警给谁 【管理员】

监控软件

  • mrtg(Multi Router Traffic Grapher):通过snmp协议得到设备的流量信息,并以包含PNG格式的图形的HTML文档形式显示给用户
  • cacti:用php语言实现的一个软件,它的主要功能是用snmp服务获取数据,然后用rrdtool存储和更新数据。
  • nagios:能够跨平台,插件多,报警功能强大。
  • centreon:底层使用的就是nagios。是一个nagios的整合版软件
  • zabbix:一款开源的企业级的监控解决方案,跨平台,画图,多条件告警,多种api接口。使用基数特别大。
  • prometheus:基于时间序列的数值的容器监控解决方案。

概念

Prometheus是最初在SoundCloud上构建的开源系统监视和警报工具包 。自2012年成立以来,许多公司和组织都采用了Prometheus,该项目拥有非常活跃的开发人员和用户社区。现在,它是一个独立的开源项目,并且独立于任何公司进行维护。为了强调这一点并阐明该项目的治理结构,Prometheus在2016年加入了 Cloud Native Computing Foundation,这是继Kubernetes之后的第二个托管项目。

Prometheus由golang开发的一套开源的监控&报警&时间序列数据库的组合,是一个开放性的监控解决方案,用户可以非常方便的安装和使用Prometheus并且能够非常方便的对其进行扩展。适合监控docker容器,对云环境的原生支持。新一代的云原生监控系统。强大的功能,除了对云平台之外,还支持主机、各种db资源、web网站、dns、网络延迟、端口口连通性、各种语言写的程序监控等。单机单实例支持数十万监控项/秒。

时间序列数据特点

  • 性能好
    关系型数据库对大规模数据的处理性能糟糕。NoSQL可以比较好的处理大规模数据,这样依然比不上时间序列数据库
  • 储存成本低
    高效的压缩算法,节省存储空间,有效降低IO。
    Prometheus有着非常高效的时间序列数据存储方法,每个采样数据仅仅战勇3.5Byte作于空间,有这上百万条时间序列,30秒间隔,保留60天,大概花了200多G(官方数据)

时序数据库(TSDB)

时序数据库(Time Series DataBase),用于保存时间序列(按时间顺序变化)的数据。每条记录都有完整的时间戳,基于时间的操作都比较方便

  • 优点:时间作为主轴,数据按顺序到达
    大多数操作是插入新数据,偶尔伴随查询,更新数据比较少
    时间序列数据累计速度非常快,更高的容纳率、更快的大规模查询以及更好的数据压缩
    TSDB通常还包括一些共同的对时间序列数据分析的功能和操作:数据保留策略、灵活的时间聚合等

Pronetheus的主要特征

  • 一个多维的数据模型,时间序列数据通过metric名和键值对来区分。所有的metric都可以设置任意的多维标签
  • PromQL,一种灵活的查询语言,可利用此维度
  • 不依赖分部署存储;单个服务器自治
  • 时间序列收集通过HTTP上的pull模型进行
  • 通过中间网关支持push时间序列
  • 通过服务发现或者静态配置发现目标
  • 多种图形和仪表盘支持模式。由于数据采集可能会有丢失,所以Prometheus不使用于对采集数据要100%的情况
  • 准确的情形。但如果用于记录时间序列数据,Prometheus具有很大的查询优势,适用于微服务的体系架构

组件

在这里插入图片描述

Prometheus server:Prometheus组件中的核心部分,负责实现对监控数据的获取,存储以及查询。

  • Prometheus Server可以通过静态配置管理监控目标,也可以配置Service Discover
    的方式动态管理监控目标,并从这些监控目标中获取数据。
  • Prometheus Server需要对采集到的监控数据进行存储,Prometheus Server本身就是一个时序数据库,将采集到的监控数据按照时间序列的方式存储在本地磁盘中。
  • Prometheus Server对外提供了自定义的PromSQL语言,实现对数据的查询以及分析。
  • Prometheus Server内置的Express Browser的PromSQL UI,通过这个UI可以通过PromSQL实现数据的查询以及可视化。
  • Prometheus Server的联邦集群能力可以其从其他的Prometheus Server实例中获取数据,因此在大规模监控的情况下,可以通过联邦集群以及功能分区的方式对Prometheus Server进行扩展

Exporters:将监控数据采集的端点通过HTTP服务的形式暴露给Prometheus Server,Prometheus Server通过访问该Exporter提供的Endpoint端点,即可获取到需要采集的监控数据。一般可以将Exporters分为2两类:

  • 直接采集:直接内置了对Prometheus监控的支持,不如cAdivsor,Kubernetes,Etcd,Gokit等,都直接内置了用于想Prometheus暴露监控数据的端点
  • 间接采集:原有监控目标并不支持Prometheus,因此需要通过Prometheus提供的Client Library编写该监控目标的监控采集程序。比如MySQL Exporter,JMX Exporter,Consul Exporter等

PushGateway:在Prometheus Server中支持基于PromSQL创建告警规则,如果满足PromSQL定义的规则,则会产生一条告警,而告警的后续处理流程则由AlertManager进行管理。在AlertManager中我们可以与邮件,slack等等内置的通知方式进行继承,也可以通过Webhook自定义告警处理方式。

Service Discovery:服务发现在Prometheus中特别重要的一个部分,基于Pull模型抓取方式,需要在Prometheus中配置大量的抓取节点信息才可以进行数据收集。有了服务发现后,用户通过服务发现和注册工具对成百上千的节点进行服务注册,并最终将注册中心的地址配置在Prometheus的配置文件中,大大简化了配置文件的复杂程度,也可以更好的管理各种服务。在众多云平台中,Prometheus可以通过平台自身的apihi直接自动发现运行于平台上的各种服务,从抓取他们的信息Kubeernetes掌握并管理着所有的容器以及服务信息,那此时Prometheus只需要于Kubernetes建立连接就可以找打所有需要监控的容器以及服务对象

  • Consul(官方推荐)等服务发现注册软件
  • 通过DNS进行服务发现
  • 通过静态配置文件(适合在服务节点规模不大的情况下)

Prometheus UI:是Prometheus内置的一个可视化管理界面,通过Prometheus UI用户能够轻松的了解Prometheus当前的配置,监控任务运行状态等。通过Graph面板,用户可以直接使用PromSQL实时查询监控数据。访问ServerIP:9090/graph打开WEB界面,通过PromSQL可以查询数据,可以进行基础的数据展示。

Grafana

Grafana是一个跨平台的开源的度量分析和可视化工具,可以通过将采集的数据查询然后可视化的展示。Grafana提供了对Prometheus的友好支持,各种工具帮助管理员构建更加炫酷的数据可视化。

Grafana特点

  • 可视化:快速和灵活的客户端图形具有多种选项。面板插件为许多不同的方式可视化和日志
  • 报警:可视化为最重要的指标定义警报规则。Grafana将持续评估他们,并发送通知
  • 通知:警报更改状态时,它会发出通知。接受电子邮件通知
  • 动态仪表盘:使用模板变化创建动态和可重用的仪表盘,这些模板变量作为下拉菜单出现在仪表盘顶部
  • 混合数据源:在同一个图中混合不同的数据源,可以根据每个查询指定数据源。适用于自定义数据源
  • 注释:注释来自不同的数据源图表。将鼠标悬停在事件上可以显示完整的事件元数据和标记
  • 过滤器:过滤器允许管理员动态创建新的键/值过滤器,这些过滤器将自动应用于使用该数据源的所有查询

Frafana UI

Prometheus+grafana通过PromSQL进行简单的服务器负载的监控可视化。我们也可以通过第三方提供可视化JSON文件来帮助我们快速实现服务器、Elasticserach、MySQL等监控。我们在grafana提供的第三方dashboard的地址来下载对应的json文件然后导入grafana实现服务器的监控。
除了服务端的监控,可以监控应用服务。Promtheus监控应用的方式非常简单,只需要进程暴露了一个用于获取当前监控样本数据的HTTP访问地址。这样的程序册称为Exporter,Exporter的实例称为Target。Prometheus通过轮询的方式定时从这些Target中获取监控数据样本,对于应用来讲,只需要暴露一个包含监控数据的HTTP访问地址即可,当然提供的数据需要满足一定的格式,这个就是Metrics格式。

Prometheus+AlterManager+Grafana

环境准备

3台CentOS的虚拟机

IP角色
192.168.2.73Prometheus Server
192.168.2.71Grafana
192.168.2.72Agent

1 静态IP地址(可以上外网)
2 主机名配置

hostnamectl set-hostname prometheus-server
hostnamectl set-hostname grafana
hostnamectl set-hostname server

cat /etc/hosts
192.168.2.73 prometheus-server
192.168.2.71 grafana
192.168.2.72 server

3 时间同步(我这里用的ansible,和阿里云的时间服务器同步一下)

ansible prome -m command -a "ntpdata ntp1.aliyun.com"

4 关闭防火墙,selinux

systemctl stop firewalld
systemctl disable firewalld

sed -i 's/enforcing/disabled/' /etc/selinux/config 

安装Prometheus

官网下载相应版本,安装到服务器上,官网提供的是二进制版,解压缩就能用,不需要编译

tar -zxvf prometheus-2.5.0.linux-amd64.tar.gz -C /usr/local/
cp -a /usr/local/ prometheus-2.5.0.linux-amd64 /usr/local/bin

#直接使用默认配置文件启动
prometheus --config.file=/usr/local/ prometheus-2.5.0.linux-amd64/prometheus.yml &

#确认启动成功
lsof -i :9090

通过浏览器访问http://服务器IP:9090就可以访问到Prometheus的主界面
在这里插入图片描述
通过浏览器访问http://服务器IP:9090/metrics可以看到监控的数据

安装node_exporter

在linux主机agent端安装node_exporter组件,下载地址

tar -zxvf node_exporter-0.16.0.linux-amd64.tar.gz -C /usr/local/
cp -a /usr/local/node_exporter-0.16.0.linux-amd64/node_exporter /usr/local/bin
cd  /usr/local/node_exporter-0.16.0.linux-amd64
nohup node_export &

#确认启动成功
lsof -i :9100

通过浏览器访问http://agent IP:9100/metrics就可以查看到node_exporter在被监控端收集的监控信息

在到prometheus服务的配置文件中添加agent的配置

#在主配置文件最后添加
vim /usr/local/ prometheus-2.5.0.linux-amd64/prometheus.yml
 - job_name: 'agent'   ##给监控的服务器起个名字
   static_configs:
   - targets: [192.168.2.72:9100]  ## 被监控服务器的IP加端口
保存退出,重启服务
pkill prometheus
#确认关闭
lsof -i :9090
prometheus --config.file=/usr/local/ prometheus-2.5.0.linux-amd64/prometheus.yml &
lsof -i :9090

在到prometheus的web界面,status,targets,就可以看到多了一台agent监控目标
使用同样的方法,监控prometheus服务器和grafana也加入到监控中

监控MySQL

在agent上安装mysqld_exporter组件,下载地址

tar -zxvf mysqld_exporter-0.11.0.linux-amd64.tar.gz -C /usr/local/
cp -a /usr/local/mysqld_exporter-0.11.0.linux-amd64/mysqld_exporter /usr/local/bin
#安装mariadb数据库,授权
yum -y install mariadb\* 
systemctl restart mariadb
systemctl enable mariadb
mysql
grant all on * . * to 'prometheus'@'localhost' indetified by '123123';    ##注意:授权ip为localhost,因为不是prometheus服务器来找mariadb获取数据,而是prometheus找mysqld_exporter,mysqld_exporter在找mariadb。所以这个localhost是mysqld_exporter的IP
flush privileges;
quit

#创建一个mariadb配置文件,写上连接的用户名与密码
vim /usr/local/mysqld_exporter-0.11.0.linux-amd64/.my.cnf
[client]
user=prometheus
password=123123

#启动mysqld_exporter
nohup /usr/local/mysqld_exporter-0.11.0.linux-amd64/mysqld_exporter --config.my-cnf=/usr/local/mysqld_exporter-0.11.0.linux-amd64/.my.cnf &

#确认端口
lsof -i :9104

在prometheus服务器的配置文件里添加mariadb的配置段

vim /usr/local/ prometheus-2.5.0.linux-amd64/prometheus.yml
- job_name: "agent-mariadb"
  static_configs:
  - targets: ['192.168.2.73:9104']
保存退出,重启prometheus
pkill prometheus
lsof -i :9090
prometheus --config.file=/usr/local/ prometheus-2.5.0.linux-amd64/prometheus.yml &
lsof -i :9090

在到prometheus的web界面,status,targets,就可以看到又多了一台agent-mariadb监控目标

安装Grafana

Grafana是一个开源的度量分析和可视化工具,可以通过采集的数据分析,查询,然后进行可视化的展示,并能实现报警。网址

#在Grafana服务器上下载安装
rpm -ivh /usr/local/grafana-5.3.4/grafana-5.3.4-1.x86_64.rpm

#启动服务
systemctl start grafana-server
systemctl enable grafana-server

#确认端口
lsof -i :3000

浏览器访问http://grafana服务器ip:3000到达登录界面,用户名admin,密码admin

添加数据源
把prometheus服务器收集到的数据作为一个数据源添加到grafana,让grafana可以得到prometheus

dashboards —> home —> add data source
在这里插入图片描述
Name: 自定义数据源名称
Type:数据源类型,选Prometheus
URL:Prometheus服务器的ip和端口
Access:默认访问模式
Auth:认证部分。数据加密与验证用的
其他都默认就可以 Save&Test

点击Configuration—> data sources —看到数据源

altermanager报警+企业微信

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值