部署grafana+prometheus监控

一:简介

1.Prometheus 的介绍

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

2.Prometheus 的优点:

(1)配置灵活

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

(2)监控的多样性

prometheus支持多种语言的的客户端,我们通过客户端方便对核心业务进行埋点,比如下单,添加购物车等流程。

而且prometheus已经有非常多的系统集成

比如:

应用层面的监控:nginx,haproxy,mysql ,docker等

系统层面如:SNMP协议监控,主机监控,进程监控

容器云监控:docker,k8s openstack私有云

(3)非常高效的存储

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

二:prometheus的架构

对照图中的每一部分进行介绍:
·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        服务端一台主机

grafana              服务端一台主机

prometheus和grafana可以安装在同一主机上

node_exporter和mysqld_exporter   被监控的主机插件一台主机

我是在做演示,所以全部安装在同一台主机上

四:prometheus 部署

1.安装前准备

安装前先检查一下时间是不是同步,不同步的话会导致数据收集不到,会报错

[root@localhost ~]# date
2020年 08月 31日 星期一 12:19:18 CST

我是还原快照,所以时间并不同步

解决办法:

命令如下:

# yum -y install ntp

# ntpdate time1.aliyun.com        #同步阿里云时间
# hwclock -w                              #将系统时间赋值给硬件时间,有些时候 硬件时间会比系统时间快8个小时

关闭防火墙和selinux

# systemctl stop firewalld && setenforce 0 && iptables -F

准备安装包

prometheus-2.6.1.linux-amd64.tar

grafana-7.1.5-1.x86_64

node_exporter-0.17.0.linux-amd64.tar

mysqld_exporter-0.12.1.linux-amd64.tar

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

2.开始安装部署

命令如下:

# tar -zvxf prometheus-2.6.1.linux-amd64.tar.gz

# mv prometheus-2.6.1.linux-amd64 /usr/local/prometheus

# cd /usr/local/prometheus/

# ./prometheus &           #后台启动

然后通过浏览器访问:http://192.168.20.100:9090

web网页介绍

http://IP:9090

查看监控目标

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

prometheus默认监控图像,如下图:

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

3.实例:监控linux主机

需要在被监控的主机安装node_exporter插件,是prometheus来收集数据

在官网上下载node_exporter-0.17.0.linux-amd64.tar安装包

命令如下:

# tar -zvxf node_exporter-0.17.0.linux-amd64.tar.gz

# mv node_exporter-0.17.0.linux-amd64 node_exporter

# cd node_exporter

# nohup ./node_exporter &

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

在浏览器上查看监控信息 http://IP:9100/metrics

配置prometheus server端文件 prometheus.yml 可以拉取node信息

# vim /usr/local/prometheus/prometheus.yml

将以下内容添加到文件最后

  - job_name: 'agent'

    static_configs:
    - targets: ['192.168.20.100:9100']

注意:一定格式正确,否则服务重启不了      IP应该填写的是被监控主机的IP,我是把服务端客户端做在同一主机上了

添加完成后重新启动prometheus

命令如下:

# pkill prometheus

# cd /usr/local/prometheus/

# ./prometheus &

然后通过web可以看见两台,如下两张图

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

mysql_exporter下载地址:https://prometheus.io/download/mysqld_exporter-0.12.1.linux-amd64.tar.gz

命令如下:

# tar -zvxf mysqld_exporter-0.12.1.linux-amd64.tar.gz

# mv mysqld_exporter-0.12.1.linux-amd64 /usr/local/mysqld_exporter

# cd /usr/local/mysqld_exporter/

# yum -y install mariadb*      (这里mariadb数据库为参考)

# systemctl start mariadb && systemctl enable  mariadb              启动并设置开机自启

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

# mysql

MariaDB [(none)]> grant select,replication client,process ON *.* to 'mysql_monitor'@'localhost' identified by '12345678';

MariaDB [(none)]> flush privileges;

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

在mysql_exporter中设置mysql配置信息

命令如下:

# cd /usr/local/mysqld_exporter

# vim .my.cnf         (手工创建)

[client]
user=mysql_monitor
password=12345678

启动mysql_exporter
# nohup ./mysqld_exporter --config.my-cnf=/usr/local/mysqld_exporter/.my.cnf &

配置prometheus拉取mysql节点信息

在prometheus的server端进行修改

# vim /usr/local/prometheus/prometheus.yml

  - job_name: 'mariadb'
    
    static_configs:
    - targets: ['192.168.20.100:9104']

 重启prometheus服务

命令如下:

# pkill prometheus

# cd /usr/local/prometheus/

# ./prometheus &

然后在web网页中刷新一下,会出现三台

知识扩展:

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过滤器允许动态创建新的键/值过滤器,这些过滤器会自动应用于使用该数据源的所有查询。

1.安装grafana

下载地址:grafana官网下载
# wget https://dl.grafana.com/oss/release/grafana-7.1.5-1.x86_64.rpm

# yum -y install grafana-7.1.5-1.x86_64.rpm

启动服务并设置开机自启

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

在浏览器上访问http://IP:3000    用户名和密码默认是admin

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

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

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

4.点击“+”里面的import选项

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

原文地址:https://www.cnblogs.com/zgqbky/p/13672343.html