Prometheus 是什么?

Prometheus是一套开源的监控&报警&时间序列数据库的组合,起始是由SoundCloud公司开发的。随着发展,越来越多公司和组织接受采用Prometheus,社区也十分活跃,他们便将它独立成开源项目,并且有公司来运作。google SRE的书内也曾提到跟他们BorgMon监控系统相似的实现是Prometheus。现在最常见的Kubernetes容器管理系统中,通常会搭配Prometheus进行监控。

Prometheus 的优点

1. 配置灵活

使用过zabbix的同学应该都体验过安装时候的安装依赖包的痛苦,而premetheus核心部分只有一个单独的二进制文件,下载解压安装即可,没有依赖的第三方库。

2. 监控更多多样性

prometheus支持多种语言的的客户端,我们通过客户端方便对核心业务进行埋点,比如下单,添加购物车等流程。
而且prometheus已经有非常多的系统集成:比如
应用层面的监控:nginx,haproxy,mysql ,docker等
系统层面如:SNMP协议监控,主机监控,进程监控
容器云监控:docker,k8s openstack私有云

3. 非常高效的存储

平均一个采样数据占 ~3.5 bytes左右,320万的时间序列,每30秒采样,保持60天,消耗磁盘大概228G。

prometheus的架构

grafana 改密码 grafana默认账号密码_数据

对照图中的每一部分进行介绍:

·prometheus server
主要负责数据的采集和存储,提供PromQL查询语言支持
Retrieval:采样模块,prometheus的服务器在哪里拉取数据,检索拉取到的数据分发给 TSDB进行存储
TSDB:存储模块默认本地存储为TSDB
HTTP server : 提供http接口查询和面板,默认端口为9090

·short-lived jobs:
存在时间不足以被删除的短暂或批量业务,无法通过pull的方式拉取,需要使用push的方式,与pushgeteway结合使用

·Service Discovery:
服务发现,prometheus支持多种服务发现机制:文件,DNS,k8s,openstack,等,基于服务发现的过程,通过第三方接口,prometheus查询到需要监控的target列表,然后轮询这些target获取监控数据

·客户端SDK
官方提供的客户端类库有go,java,python,ruby

·pushgateway
支持临时性的job主动推送指标的中间网关,prometheus默认通过pull方式从exporters拉取,但有些情况我们是不允许promethes与exporters直接进行通信的,这时候我们可以使用pushgateway由客户端主动push数据到pushgateway,在由prometheus拉取。很多时候我们需要自定义一些组件来采集

·proDash
使用rails开发的dashboard,用于可视化指标数据

·exporters
支持其他数据源的指标导入到prometheus,支持数据库,硬件,消息中间件,存储系统,http服务器,jmx等
负责收集目标对象的性能数据,并通过http接口供prometheus server获取
只要符合接口格式,就可以被采集

·alertmanager
实验性组件,用来进行报警

·prometheus_cli
命令行工具

prometheus的工作流程

1.prometheus server 定期从配置好的jobs或者exporters中拉metrics.或者接受来自pushgateway发过来的metrics,或者从其他的prometheus server中拉取metrics

2.prometheus server 在本地存储收集到的metrics,并运行已经定义好的arlt.rules,记录新的时间序列或者向alertmanager推送报警

3.Alertmanager根据配置文件,对接受的警报进行处理,发出告警

4.在图形界面中,可视化采集数据,可以使用别人写好的grafana模板。

prometheus 部署

官网下载地址https://prometheus.io/download/

grafana 改密码 grafana默认账号密码_数据_02

tar -zxvf prometheus-2.21.0.-rc.0.linux-amd64.tar.gz
 mv prometheus-2.21.0.-rc.0.linux-amd64 /usr/local/Prometheus
 cd /usr/local/prometheus/
 [root@zmedu-17 prometheus]# ls
console_libraries  NOTICE          promtool
consoles           prometheus
LICENSE            prometheus.yml

后台启动prometheus:

# ./prometheus &

通过网址访问

通过后台执行http://192.168.1.17:9090

grafana 改密码 grafana默认账号密码_grafana 改密码_03

web端的基本使用及介绍

http:.//ip:9090

查看监控目标:

grafana 改密码 grafana默认账号密码_数据_04

可以看到系统默认监控了自己的主机信息,监控接口通过http://服务器IP:9090/metrics 可以直接看到监控数据,如下图:

grafana 改密码 grafana默认账号密码_grafana默认用户名密码_05

prometheus默认监控图像

grafana 改密码 grafana默认账号密码_grafana默认用户名密码_06

grafana 改密码 grafana默认账号密码_mysql_07

在图1的位置输入process_cpu_seconds_total ,可以查看到cpu的使用情况。

案例:监控远程linux主机

首先在远程linux上安装node_export组件,帮助prometheus来收集数据

 官网下载

 node_exporter-1.0.1.linux-amd64.tar.gz

1. 上传并解压安装

Tar -zxvf  node_exporter-1.0.1.linux-amd64.tar.gz
mv node_exporter-1.0.1.linux-amd64 node_exporte

2. 后台启动node_exporter来收集数据

# nohup ./node_exporter &

此处用nohup让程序一直运行下去,且在后台运行
备注:
关于nohup

nohup 是 Linux 的一个常用命令,当你想要在退出账户或者关闭终端后进程仍在运行时,就可以使用 nohup 命令。nohup 就是不挂断的意思(no hang up)。

3. 查看9100端口的占用情况

# lsof -i:9100

4. 查看监控的信息

grafana 改密码 grafana默认账号密码_grafana 改密码_08

5. 配置prometheus server端可以拉取node信息

/usr/local/prometheus-2.20.1.linux-amd64.tar.gz/prometheus.yml

在文件最后添加内容

- job_name: 'agent'
    static_configs:
      - targets: ['192.168.1.20:9100']

添加完成后重新启动prometheus

pkill Prometheus
# ./prometheus &
# ss -naltp |grep 9090
LISTEN     0      128       [::]:9090          [::]:*                   users:(("prometheus",pid=83351,fd=8))

6. 通过web端查看,是否成功

可以看到增加了一台监控的信息

grafana 改密码 grafana默认账号密码_mysql_09

grafana 改密码 grafana默认账号密码_grafana 改密码_10

grafana 改密码 grafana默认账号密码_数据_11

监控mysql需要在被监控机器安装mysql_exporter

mysql_exporter下载地址:https://prometheus.io/download/

mysqld_exporter-0.12.1.linux-amd64.tar.gz

1. 上传解压安装mysqld_exporter

Tar -zxvf mysqld_exporter-0.12.1.linux-amd64.tar.gz
Mv mysqld_exporter-0.12.1.linux-amd64.tar.gz mysqld_exporter
cd mysqld_exporter/

2. 安装mariadb (这里mariadb数据库为参考)

# yum install mariadb\* -y
systemctl start mariadb && systemctl enable  mariadb

3. 在数据库里创建mysql账号用户收集数据

# mysql
grant select,replication client,process ON *.* to 'mysql_monitor'@'localhost' identified by '12345678';
flush privileges;

备注:此处是prometheus服务器来找mysql_exporter,然后mysql_exporter 在找mariadb,所以这里用的是localhost,指的是mysql_exporter的ip

5.在mysql_exporter中设置mysql配置信息

Cd /usr/local/mysql_exporter
# vim .my.cnf  (手工创建)
[client]
user=mysql_monitor
password=12345678

5. 启动mysql_exporter

nohup ./mysqld_exporter --config.my-cnf=/usr/local/mysqld_exporter/.my.cnf &

ss -naltp |grep 9104

LISTEN   0         128                       *:9104                   *:*        users:(("mysqld_exporter",pid=68249,fd=3))

6. 配置prometheus拉取mysql节点信息

在prometheus的server端进行修改

vim prometheus.yml
- job_name: 'mariadb'
    static_configs:
- targets: ['192.168.1.20:9104']

重启prometheus服务

pkill Prometheus
# ./prometheus &

7. 通过web端查看

http://192.168.1.17:9090

grafana 改密码 grafana默认账号密码_mysql_12

8. prometheus.yml配置文件详解

global:
# 全局配置
  scrape_interval:     15s # 多久收集一次数据
  evaluation_interval: 15s # 多久评估一次规则
  scrape_timeout:  10s  # 每次收集数据的超时时间
# Alertmanager configuration #告警设置
alerting:
  alertmanagers:
  - static_configs:  #告警规则,也可以基于动态方式进行告警
    - targets:
rule_files:  #规则文件
#收集数据配置列表
scrape_configs:
  - job_name: 'prometheus'

一、Grafana介绍

Grafana是开源的度量分析和可视化工具,,可以通过将采集的数据查询然后可视化的展示,并实现报警。它主要有以下六大特点:

1、展示方式:快速灵活的客户端图表,面板插件有许多不同方式的可视化指标和日志,官方库中具有丰富的仪表盘插件,比如热图、折线图、图表等多种展示方式;

2、数据源:Graphite,InfluxDB,OpenTSDB,Prometheus,Elasticsearch,CloudWatch和KairosDB等;

3、通知提醒:以可视方式定义最重要指标的警报规则,Grafana将不断计算并发送通知,在数据达到阈值时通过Slack、PagerDuty等获得通知;

4、混合展示:在同一图表中混合使用不同的数据源,可以基于每个查询指定数据源,甚至自定义数据源;

5、注释:使用来自不同数据源的丰富事件注释图表,将鼠标悬停在事件上会显示完整的事件元数据和标记;

6、过滤器:Ad-hoc过滤器允许动态创建新的键/值过滤器,这些过滤器会自动应用于使用该数据源的所有查询。

二. 下载安装

下载地址:grafana官网下载

wget https://dl.grafana.com/oss/release/grafana-7.1.5-1.x86_64.rpm
yum install grafana-7.1.5-1.x86_64.rpm

启动服务并开机自启

# systemctl start grafana-server && # systemctl enable grafana-server

3. 浏览器访问:http://192.168.1.63:3000

grafana 改密码 grafana默认账号密码_linux_13

备注:用户名和密码都是admin

4. 修改密码

第一次登陆需要修改密码:本次修改为123456

grafana 改密码 grafana默认账号密码_linux_14

三.添加数据源(prometheus的数据源)

grafana 改密码 grafana默认账号密码_grafana 改密码_15

设置数据源,名称,类型,ip地址及端口号

grafana 改密码 grafana默认账号密码_linux_16

grafana 改密码 grafana默认账号密码_数据_17

设置完成后,save 保存

grafana 改密码 grafana默认账号密码_grafana默认用户名密码_18

点击齿轮的图标,可以看到刚才添加的prometheus的数据源信息信息

grafana 改密码 grafana默认账号密码_grafana默认用户名密码_19

2. 现成模板添加版

先要找到模板的添加码:
模板网址: https://grafana.com/grafana/dashboards

grafana 改密码 grafana默认账号密码_mysql_20

点击import

grafana 改密码 grafana默认账号密码_grafana 改密码_21

grafana 改密码 grafana默认账号密码_grafana 改密码_22

出来信息后,等一会,选择prometheus data source 为prometheus,然后点击import

grafana 改密码 grafana默认账号密码_grafana 改密码_23

点击后就会看到当前服务器监控信息:

grafana 改密码 grafana默认账号密码_grafana默认用户名密码_24

可以看到已经添加了相关的模板之后,图表就非常漂亮,省区了我们人工的一些操作,当然grafana还有一些比较高级的功能,官网上也有介绍,比如定制变量,定制图形模板等。