1.Prometheus概述

    Prometheus(普罗米修斯)是一套开源的监控&报警&时间序列数据库的组合,起始是由SoundCloud公司开发的。现在最常见的Docker、Mesos、Kubernetes容器管理系统中,通常会搭配Prometheus进行监控。

    Prometheus基本原理是通过HTTP协议周期性抓取被监控组件的状态,这样做的好处是任意组件只要提供HTTP接口就可以接入监控系统,不需要任何SDK或者其他的集成过程。这样做非常适合虚拟化环境比如VM或者Docker 。

    输出被监控组件信息的HTTP接口被叫做exporter。目前互联网公司常用的组件大部分都有exporter可以直接使用,比如Varnish、Haproxy、Nginx、MySQL、Linux 系统信息 (包括磁盘、内存、CPU、网络等等),具体支持的源看:

https://github.com/prometheus。

    对比主流的监控工具的操作界面:

nagios监控界面:

prometheus云原生监控 prometheus 监控服务_mysql

zabbix监控界面

prometheus云原生监控 prometheus 监控服务_Server_02

Grafana+Prometheus监控界面:

prometheus云原生监控 prometheus 监控服务_linux_03

    通过上面的界面,我们可以看出来Grafana+Prometheus展示界面更美观。

Prometheus 架构图解

    普罗米修斯(Prometheus)及其一些生态系统组件的整体架构:

prometheus云原生监控 prometheus 监控服务_linux_04

Prometheus各组件运行流程如下:

1、Prometheus Server:Prometheus Sever是Prometheus组件中的核心部分,负责实现对监控数据的获取,存储及查询。Prometheus Server可以通过静态配置管理监控目标,也可以配合使用Service Discovery(服务发现)的方式动态管理监控目标,并从这些监控目标中获取数据。其次Prometheus Sever需要对采集到的数据进行存储,Prometheus Server本身就是一个实时数据库,将采集到的监控数据按照时间序列的方式存储在本地磁盘当中。Prometheus Server对外提供了自定义的PromQL,实现对数据的查询以及分析。另外Prometheus Server的联邦集群能力可以使其从其他的Prometheus Server实例中获取数据。
2、Exporters:Exporter将监控数据采集的端点通过HTTP服务的形式暴露给Prometheus Server,Prometheus Server通过访问该Exporter提供的Endpoint端点,即可以获取到需要采集的监控数据。可以将Exporter分为2类:
(1)、直接采集:这一类Exporter直接内置了对Prometheus监控的支持,比如cAdvisor,Kubernetes,Etcd,Gokit等,都直接内置了用于向Prometheus暴露监控数据的端点。
(2)、间接采集:原有监控目标并不直接支持Prometheus,因此需要通过Prometheus提供的Client Library编写该监控目标的监控采集程序。例如:Mysql Exporter,JMX Exporter,Consul
3、AlertManager:在Prometheus Server中支持基于Prom QL创建告警规则,如果满足Prom QL定义的规则,则会产生一条告警。常见的接收方式有:电子邮件,webhook等。
4、PushGateway:Prometheus数据采集基于Prometheus Server从Exporter pull数据,因此当网络环境不允许Prometheus Server和Exporter进行通信时,可以使用PushGateway来进行中转。

Prometheus的工作流:
1.Prometheus server定期从配置好的jobs和exporters中拉取metrics,或者接收来自Pushgateway发送过来的metrics,或者从其它的Prometheus server中拉metrics。
2.Prometheus server在本地存储收集到的metrics,并运行定义好的alerts.rules,记录新的时间序列或者向Alert manager推送警报。
3.Alertmanager根据配置文件,对接收到的警报进行处理,发出告警。
4.在图形界面中,可视化采集数据。


安装配置Prometheus监控服务

  1. 安装go语言环境
    方法1:使用tar包安装go语言环境
    上传到go1.13.3.linux-amd64.tar.gz到linux服务器上
    或在线下载:
wget  -c https://storage.googleapis.com/golang/go1.13.3.linux-amd64.tar.gz
tar -zxvf go1.13.3.linux-amd64.tar.gz  -C /usr/local
echo "export PATH=$PATH:/usr/local/go/bin" > /etc/profile.d/go.sh
source /etc/profile.d/go.s
go
  1. 出现以下信息表示go环境安装成功

prometheus云原生监控 prometheus 监控服务_运维_05

  1. 方法2:使用yum安装go语言环境
yum install -y epel-release
yum install go -y
go version
  1. 扩展:
    Go(又称Golang)是Google开发的一种静态强类型、编译型、并发型,并具有垃圾回收功能的编程语言。
  2. 下载Prometheus
    下载地址:Download | Prometheus
wget https://github.com/prometheus/prometheus/releases/download/v2.27.1/prometheus-2.27.1.linux-amd64.tar.gz
tar zxvf prometheus-2.27.1.linux-amd64.tar.gz -C /usr/local/
cd /usr/local/prometheus-2.27.1.linux-amd64/
  1. 修改prometheus配置文件,配置监控linux主机和mysql数据库,配置文件为yml语法,注意缩进对齐。
vim prometheus.yml
#在文档的最后插入以下内容
- job_name: system-status
 static_configs:
 - targets: ['172.16.XXX.XXX:9100']
   labels:
     instance: mgr_node1
- job_name: mysql-status
 static_configs:
 - targets: ['172.16.XXX.XXX:9104']
   labels:
     instance: node1-mysql
  1. 插入时,要和文件之前的job_name保持对齐,如下:

    ```bash
    注释:
  • job_name: system-status #每一个job_name都是一个监控项,这里代表监控操作系统状态
    static_configs:
  • targets: [‘172.16.XXX.XXX:9100’] #被监控主机IP地址和端口
    labels:
    instance: mgr_node1 #实例名称,在grafana中表示对应的主机。
  • job_name: mysql-status #监控mysql数据库状态
    static_configs:
  • targets: [‘172.16.XXX.XXX:9104’] #目标主机IP地址和端口
    labels:
    instance: node1-mysql #实例名称,在grafana中表示对应的主机。
    ```
  1. 启动
#后台启动
cd /usr/local/prometheus-2.27.1.linux-amd64
nohup ./prometheus --config.file=prometheus.yml  &
#默认使用是9000端口
#关闭防火墙
systemctl stop firewalld && systemctl disable firewalld
  1. 访问http://172.16.XXX.XXX:9090 注:因为我们还没有开始配置mgr_node1了,所以现在还获取不到mgr_node1的信息



启动用于采集linux系统和mysql服务状态的exporter服务

  1. prometheus常见的exporter及作用:
    (1)、node_exporter用于监控操作系统的性能和运行状态
    (2)、mysqld_exporter用于监控mysql服务
    (3)、snmp_exporter用于监控网络设备
    更多exporter可在官网下载:Download | Prometheus

prometheus云原生监控 prometheus 监控服务_prometheus云原生监控_06

  1. 1、配置 node_exporter监控mgr_node1运行状态
#下载
wget https://github.com/prometheus/node_exporter/releases/download/v1.2.2/node_exporter-1.2.2.linux-amd64.tar.gz
#解压到指定目录
tar zxvf node_exporter-1.2.2.linux-amd64.tar.gz -C /usr/local/
#后台启动
nohup /usr/local/node_exporter-1.2.2.linux-amd64/node_exporter &
  1. 2、配置mysqld_exporter用于监控mgr_node1上的mysql服务
    (1)、创建数据库用户(mysql8)
create user 'mysql_monitor'@'localhost' identified by '123456';
GRANT REPLICATION CLIENT, PROCESS ON *.* TO 'mysql_monitor'@'localhost';
GRANT SELECT ON performance_schema.* TO 'mysql_monitor'@'localhost';
ALTER USER mysql_monitor@localhost IDENTIFIED WITH mysql_native_password BY '123456';
flush privileges;
  1. 注:mysql 用户权限说明:
    (1)、replication client权限 #拥有此权限可以查询master server、slave server状态。
    (2)、PROCESS权限 #通过这个权限,用户可以执行SHOW PROCESSLIST和KILL命令。默认情况下,每个用户都可以执行SHOW PROCESSLIST命令,但是只能查询本用户的进程。如:
    mysql> show processlist;
    另外,管理权限 process不能够指定某个数据库,on后面必须跟.
    (3)、select权限 #必须有select的权限,才可以使用select * from table 查看数据
    (2)、安装mysqld_exporter
#下载
wget https://github.com/prometheus/mysqld_exporter/releases/download/v0.13.0/mysqld_exporter-0.13.0.linux-amd64.tar.gz
#解压到指定目录
tar -xf mysqld_exporter-0.13.0.linux-amd64.tar.gz -C /usr/local/
#创建隐藏配置文件.my.cnf,用于mysqld_exporter连接mysql采集数据。
vim /usr/local/mysqld_exporter-0.13.0.linux-amd64/.my.cnf
#写入以下内容
[client]
user=mysql_monitor
password= 123456
#后台启动
nohup /usr/local/mysqld_exporter-0.13.0.linux-amd64/mysqld_exporter --config.my-cnf="/usr/local/mysqld_exporter-0.13.0.linux-amd64/.my.cnf" &
  1. 在web界面,再次查看监控信息已经成功添加linux 和mysql节点,已经up了。

prometheus云原生监控 prometheus 监控服务_Server_07

总结prometheus使用方法:
1、想监控操作系统,只需要一步:
(1)、在被监控系统上安装node_exporter并启动,就ok了
2、想监控操mysql数据库,只需要两步:
(1)、创建一个mysql用户
(2)、安装mysqld_exporter并启动