Prometheus & Grafana部署应用指导书

原创作者:运维工程师 谢晋

Prometheus架构介绍

在这里插入图片描述

组件说明

    prometheus server 是 Prometheus 组件中的核心部分, 负责实现对监控数据的获取, 存储以及查询。
    exporter 简单说是采集端, 通过 http 服务的形式保留一个 url 地址,prometheus server 通过访问该 exporter 提供的 endpoint 端点, 即可获取到需要采集的监控数据。
    AlertManager在 prometheus 中, 支持基于 PromQL 创建告警规则, 如果满足定义的规则, 则会产生一条告警信息, 进入 AlertManager 进行处理。 可以集成邮件, 微信或者通过 webhook 自定义报警。
    Pushgateway由于 Prometheus 数据采集采用 pull 方式进行设置的, 内置必须保证 prometheus server 和对应的 exporter 必须通信, 当网络情况无法直接满足时, 可以使用 pushgateway 来进行中转,可以通过 pushgateway 将内部网络数据主动 push 到 gateway 里面去, 而 prometheus 采用 pull方式拉取 pushgateway 中数据。

总结:

    prometheus 负责从 pushgateway 和 job 中采集数据, 存储到后端 Storatge 中, 可以通过PromQL 进行查询, 推送 alerts 信息到 AlertManager。 AlertManager 根据不同的路由规则进行报警通知

安装前准备

环境信息规划

详细信息规划如下:

操作系统CentOS Linux release 7.6 (Core)
主机名Promethues_106
专用 IP 地址192.168.20.106
文件系统本地文件系统

配置网络环境

根据信息规划表的要求配置操作系统的主机名、IP地址、hosts文件。

  1. 配置hosts文件
# cat /etc/hosts
  192.168.20.106   Promethues_106
  1. 配置防火墙和selinux
       关闭系统的iptables服务,以及selinux防火墙,以确保oracle对外提供服务端口(默认1521)不被阻塞,请注意,确认以上两项服务的关闭是必须的选项。
       检查iptables服务是否运行:
# systemctl status firewalld
# getenforce

   如果返回的结果不是disabled,请运行以下命令,然后重启机器:

# systemctl stop firewalld
# systemctl disable firewalld
# setenforce 0
# sed -i -e 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config

Prometheus 2.3安装

官网地址:https://prometheus.io/download/
在这里插入图片描述

Prometheus部署

  1. 解压prometheus安装包
# tar xf prometheus-2.30.3.linux-amd64.tar.gz
# mv prometheus-2.30.3.linux-amd64 /usr/local/prometheus-2.30.3
# ln -s /usr/local/prometheus-2.30.3/ /usr/local/prometheus
# cd /usr/local/prometheus
# mkdir data

解压压缩包,将其移动到/usr/local目录下进行操作,并创建软连接,创建data目录

  1. 添加到系统服务
# cat /usr/lib/systemd/system/prometheus.service
                [Unit]
                Description=https://prometheus.io
                [Service]
                Restart=on-failure
                ExecStart=/usr/local/prometheus/prometheus \
                --storage.tsdb.path=/usr/local/prometheus/data \
                --config.file=/usr/local/prometheus/prometheus.yml
                [Install]
                WantedBy=multi-user.target
#  systemctl start Prometheus
              网页登陆默认9090端口

在这里插入图片描述

  1. Prometheus配置文件介绍
# cd /usr/local/prometheus
# cat prometheus.yml
# my global config
	global:
  	scrape_interval: 15s # Set the scrape interval to every 15 seconds. 						Default is every 1 minute.
  	evaluation_interval: 15s # Evaluate rules every 15 seconds. The 				  default is every 1 minute.
  	# scrape_timeout is set to the global default (10s).

	# Alertmanager configuration
	alerting:
 	 alertmanagers:
   	 - static_configs:
        - targets:
          # - alertmanager:9093

	# Load rules once and periodically evaluate them according to the global 'evaluation_interval'.
	rule_files:
 	 # - "first_rules.yml"
 	 # - "second_rules.yml"

	# A scrape configuration containing exactly one endpoint to scrape:
	# Here it's Prometheus itself.
	scrape_configs:
 	 # The job name is added as a label `job=<job_name>` to any timeseries scraped from this config.
 	 - job_name: "prometheus"

    	# metrics_path defaults to '/metrics'
   	 # scheme defaults to 'http'.

  	  static_configs:
    	  - targets: ["localhost:9090"]

global: 此片段指定的是 prometheus 的全局配置, 比如采集间隔, 抓取超时时间等。
rule_files: 此片段指定报警规则文件, prometheus 根据这些规则信息, 会推送报警信息到alertmanager 中。
scrape_configs: 此片段指定抓取配置, prometheus 的数据采集通过此片段配置。
alerting: 此片段指定报警配置, 这里主要是指定 prometheus 将报警规则推送到指定的alertmanager 实例地址。
remote_write: 指定后端的存储的写入 api 地址。
remote_read: 指定后端的存储的读取 api 地址。
Global 配置参数
# How frequently to scrape targets by default.
[ scrape_interval: | default = 1m ] # 抓取间隔
# How long until a scrape request times out.
[ scrape_timeout: | default = 10s ] # 抓取超时时间
# How frequently to evaluate rules.
[ evaluation_interval: | default = 1m ] # 评估规则间隔
scrapy_config 片段主要参数
一个 scrape_config 片段指定一组目标和参数, 目标就是实例, 指定采集的端点, 参数描述如何采集这些实例, 主要参数如下
scrape_interval: 抓取间隔,默认继承 global 值。
scrape_timeout: 抓取超时时间,默认继承 global 值。
metric_path: 抓取路径, 默认是/metrics
*_sd_configs: 指定服务发现配置
static_configs: 静态指定服务 job。
relabel_config: relabel 设置

  1. prometheus服务及设置开机自启动
启动prometheus服务:
# systemctl start prometheus.service
设置开机自启动:
# systemctl enable prometheus.service

Prometheus主机监控

  1. 配置主机监控
 # tar xf node_exporter-1.2.2.linux-amd64.tar.gz
 # mv node_exporter-1.2.2.linux-amd64 /usr/local/node_exporter-1.2.2
 # cat /usr/lib/systemd/system/node_exporter.service
		[Unit]
		Description=Prometheus node_exporter
		[Service]
		User=nobody
		ExecStart=/usr/local/node_exporter/node_exporter --log.level=error
		ExecStop=/usr/bin/killall node_exporter
		[Install]
		WantedBy=default.target
# systemctl start node_exporter.service
# ps -ef |grep node
  nobody   17280     1  0 18:47 ?        00:00:00 
  /usr/local/node_exporter/node_exporter --log.level=error
  root     17291 16595  0 18:47 pts/0    00:00:00 grep --color=auto node

  1. 配置prometheus.yml文件
# cat /usr/local/prometheus/prometheus.yml 
	scrape_configs:
  	# The job name is added as a label `job=<job_name>` to any timeseries scraped from this config.
  - job_name: "prometheus"
    # metrics_path defaults to '/metrics'
    # scheme defaults to 'http'.
       static_configs:
        - targets: ["localhost:9090"]
        - job_name: "linux"
       static_configs:
        - targets: ["192.168.20.106:9100"]
        - targets: ["192.168.10.100:9100"]
需要在Promethues.yml文件内添加安装node_exporter主机配置文件,并加上9100端口信息

需要在Promethues.yml文件内添加安装node_exporter主机配置文件,并加上9100端口信息
在这里插入图片描述
检查语法

# cd /usr/local/prometheus/
# ./promtool check config prometheus.yml
   Checking prometheus.yml
   SUCCESS: 0 rule files found

在这里插入图片描述

 # systemctl restart Prometheus

重启Prometheus服务即可

  1. 服务启动
启动node_exporter服务:
# systemctl start node_exporter.service
设置开机自启动:
# systemctl enable node_exporter.service 

部署Grafana 8.2

  1. 安装Grafana组件
    下载官网https://grafana.com/grafana/download
    在这里插入图片描述
部署Grafanna
        # yum install grafana-enterprise-8.2.0-1.x86_64.rpm -y
        # systemctl start grafana-server.service
        # systemctl enable grafana-server.service
        # ps -ef|grep grafana

安装grafana组件,启动Grafana服务并设置开机自动启动,验证grafana是否已启动
网页登陆grafana,默认账号密码admin admin
在这里插入图片描述

  1. Grafana添加prometheus数据源
    在这里插入图片描述
    选择Prometheus
    在这里插入图片描述
    输入Prometheus地址
    在这里插入图片描述
  2. 配置模板
    Grafana模板官网地址 https://grafana.com/grafana/dashboards/
    导入prometheus linux模板
    点击Import
    在这里插入图片描述
    可以直接输入模板编号
    在这里插入图片描述
    最后点击Import
    在这里插入图片描述
    展示Prometheus+Grafana
    在这里插入图片描述

MYSQL监控

  1. mysql端监控组件
# wget -c
https://github.com/prometheus/mysqld_exporter/releases/download/v0.12.1/ mysqld_exporter-0.13.0.linux-amd64.tar.gz
解压安装包
# tar xf mysqld_exporter-0.13.0.linux-amd64.tar.gz
# mv mysqld_exporter-0.13.0.linux-amd64 mysqld_exporter-0.13.0
创建软连接
# ln -s /usr/local/mysqld_exporter-0.13.0 /usr/local/mysqld_exporter
配置成服务启动
# cat /usr/lib/systemd/system/mysqld_exporter.service
	[Service]
	ExecStart=/usr/local/mysqld_exporter/mysqld_exporter \
	--collect.info_schema.processlist \
	--collect.info_schema.innodb_tablespaces \
	--collect.info_schema.innodb_metrics \
	--collect.perf_schema.tableiowaits \
	--collect.perf_schema.indexiowaits \
	--collect.perf_schema.tablelocks \
	--collect.engine_innodb_status \
	--collect.perf_schema.file_events \
	--collect.binlog_size \
	--collect.info_schema.clientstats \
	--collect.perf_schema.eventswaits \
	--config.my-cnf=/usr/local/mysqld_exporter/.my.cnf
	[Install]
	WantedBy=multi-user.target
增加配置文件,mysql连接的账号与密码.scok所在目录,用来采集mysql信息
# cat /usr/local/mysqld_exporter/.my.cnf
  [client]
  host=localhost
  user=exporter
  password=123456
  socket=/tmp/mysql.sock
登陆mysql
# mysql -uroot –p
mysql> GRANT SELECT, PROCESS, SUPER, REPLICATION CLIENT, RELOAD ON *.* TO'exporter'@'localhost' IDENTIFIED BY '123456';
        Query OK, 0 rows affected, 1 warning (0.00 sec)
刷新数据库
mysql> flush privileges;
查看服务端口
# netstat –lntup
  tcp6       0      0 :::9104                 :::*                         
  LISTEN      21548/mysqld_export
启动服务
# systemctl start mysqld_exporter
可以网页登陆查看是否正常
http://ip:9104/metrics

  1. Prometheus服务配置
在prometheus.yml文件最后添加mysql被监控主机
# cat /usr/local/prometheus/prometheus.yml
  - job_name: "mysql"
    static_configs:
      - targets: ["192.168.10.11:9104"]
重启prometheus服务
# systemctl restart prometheus.service

  1. 配置Grafana
    添加mysql图
    在这里插入图片描述
    输入7362为MYSQL图表,点击load
    在这里插入图片描述
    设置参数后点击Import
    在这里插入图片描述
    可以看到mysql图表展示
    在这里插入图片描述

Prometheus和zabbix对比

  1. 架构对比

Zabbix架构

在这里插入图片描述
   zabbix由两部分构成,zabbix server与可选组件zabbix agent。zabbix server可以通过SNMP,zabbix agent,ping,端口监视等方法提供对远程服务器/网络状态的监视,数据收集等功能,它可以运行在Linux,Solaris,HP-UX,AIX,Free BSD,Open BSD,OS X等平台上。
   核心组件主要是Agent和Server,其中Agent主要负责采集数据并通过主动或者被动的方式采集数据发送到Server/Proxy,除此之外,为了扩展监控项,Agent还支持执行自定义脚本。Server主要负责接收Agent发送的监控信息,并进行汇总存储,触发告警等。Zabbix Server将收集的监控数据存储到Zabbix Database中。Zabbix Database支持常用的关系型数据库,如果MySQL、PostgreSQL、Oracle等,默认是MySQL,并提供Zabbix Web页面(PHP编写)数据查询。

Prometheus架构

在这里插入图片描述
   Prometheus的基本原理是通过HTTP周期性抓取被监控组件的状态,任意组件只要提供对应的HTTP接口并且符合Prometheus定义的数据格式,就可以接入Prometheus监控。
   Prometheus Server负责定时在目标上抓取metrics(指标)数据并保存到本地存储里面。Prometheus采用了一种Pull(拉)的方式获取数据,不仅降低客户端的复杂度,客户端只需要采集数据,无需了解服务端情况,而且服务端可以更加方便的水平扩展。
   如果监控数据达到告警阈值Prometheus Server会通过HTTP将告警发送到告警模块alertmanger,通过告警的抑制后触发邮件或者webhook。Prometheus支持PromQL提供多维度数据模型和灵活的查询,通过监控指标关联多个tag的方式,将监控数据进行任意维度的组合以及聚合。

  1. 特点对比
ZabbixPrometheus
后端用 C 开发,界面用 PHP 开发,定制化难度很高。后端用 golang 开发,前端是 Grafana,JSON 编辑即可解决。定制化难度较低。
集群规模上限为 10000 个节点。支持更大的集群规模,速度也更快。
更适合监控物理机环境。更适合云环境的监控,对 OpenStack,Kubernetes 有更好的集成。
监控数据存储在关系型数据库内,如 MySQL,很难从现有数据中扩展维度。监控数据存储在基于时间序列的数据库内,便于对已有数据进行新的聚合。
安装简单,zabbix-server 一个软件包中包括了所有的服务端功能。安装相对复杂,监控、告警和界面都分属于不同的组件。
图形化界面比较成熟,界面上基本上能完成全部的配置操作。界面相对较弱,很多配置需要修改配置文件。
发展时间更长,对于很多监控场景,都有现成的解决方案。2015 年后开始快速发展,但发展时间较短,成熟度不及 Zabbix。
与grafana结合需自定义图表可完美的和grafana结合,各种成熟的表图
  1. 总结
       Zabbix 的成熟度更高,上手更快,但更好的集成导致灵活性较差,问题更大是,监控数据的复杂度增加后,Zabbix 做进一步定制难度很高,即使做好了定制,也没法利用之前收集到的数据了(关系型数据库造成的问题)。Prometheus 基本上是正相反,上手难度大一些,但由于定制灵活度高,数据也有更多的聚合可能。
       如果监控的是物理机,用Zabbix没毛病,Zabbix在传统监控系统中,尤其是在服务器相关监控方面,占据绝对优势。甚至环境变动不会很频繁的情况下,Zabbix也会比Prometheus好使;但如果是云环境的话,有容器和K8S的话建议使用Prometheus,Prometheus开始成为主导及容器监控方面的标配,并且在未来可见的时间内被广泛应用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值