CentOS7安装Prometheus+Grafana

Prometheus简介

prometheus受启发于Google的Brogmon监控系统(相似kubernetes是从Brog系统演变而来), 从2012年开始由google工程师Soundcloud以开源形式进行研发,并且与2015年早起对外发布早期版本。 2016年5月继kubernetes之后成为第二个加入CNCF基金会的项目,同年6月正式发布1.0版本。2017年底发布基于全兴存储层的2.0版本,能更好地与容器平台、云平台配合。

Prometheus优势

prometheus是基于一个开源的完整监控方案,其对传统监控系统的测试和告警模型进行了彻底的颠覆,形成了基于中央化的规则计算、统一分析和告警的新模型。相对传统的监控系统有如下几个优点。

  • 易于管理: 部署使用的是go编译的二进制文件,不存在任何第三方依赖问题,可以使用服务发现动态管理监控目标。

  • 监控服务内部运行状态: 我们可以使用prometheus提供的常用开发语言提供的client库完成应用层面暴露数据,采集应用内部运行信息。

  • 强大的查询语言promQL: prometheus内置一个强大的数据查询语言PromQL,通过PromQL可以实现对监控数据的查询、聚合。同时PromQL也被应用于数据可视化(如grafana)以及告警中的。

  • 高效: 对于监控系统而言,大量的监控任务必然导致有大量的数据产生。而Prometheus可以高效地处理这些数据。

  • 可扩展:prometheus配置比较简单, 可以在每个数据中心运行独立的prometheus server, 也可以使用联邦集群,让多个prometheus实例产生一个逻辑集群,还可以在单个prometheus server处理的任务量过大的时候,通过使用功能分区和联邦集群对其扩展。

  • 易于集成: 目前官方提供多种语言的客户端sdk,基于这些sdk可以快速让应用程序纳入到监控系统中,同时还可以支持与其他的监控系统集成。

  • 可视化:prometheus server自带一个ui, 通过这个ui可以方便对数据进行查询和图形化展示,可以对接grafana可视化工具展示精美监控指标。

Prometheus的基础架构

CentOS7安装Prometheus+Grafana_第1张图片

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

Prometheus的核心组件

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

Prometheus Server可以通过静态配置管理监控目标,也可以配合使用Service Discovery的方式动态管理监控目标,并从这些监控目标中获取数据。其次

Prometheus Server需要对采集到的监控数据进行存储,Prometheus Server本身就是一个时序数据库,将采集到的监控数据按照时间序列的方式存储在本地磁盘当中。最后PrometheusServer对外提供了自定义的PromQL语言,实现对数据的查询以及分析。

Prometheus Server内置的Express Browser UI,通过这个UI可以直接通过PromQL实现数据的查询以及可视化。

exporters

exporter简单说是采集端,通过http服务的形式保留一个url地址,prometheus server 通过访问该exporter提供的endpoint端点,即可获取到需要采集的监控数据。exporter分为2大类。

  • 直接采集:这一类exporter直接内置了对Prometheus监控的支持,比如cAdvisor,Kubernetes等。原生监控

  • 间接采集: 原有监控目标不支持prometheus,需要通过prometheus提供的客户端库编写监控采集程序,例如Mysql Exporter, JMX Exporter等。 非原生监控

AlertManager

在prometheus中,支持基于PromQL创建告警规则,如果满足定义的规则,则会产生一条告警信息,进入AlertManager进行处理。可以集成邮件,Slack或者通过webhook自定义报警。

PushGateway

由于Prometheus数据采集采用pull方式进行设置的,内置必须保证prometheus

pushgateway是另一种数据采集的方式,采用被动推送来获取监控数据的prometheus插件,它可以单独运行在任何节点上,并不一定要运行在被监控的客户端。

· 首先通过用户自定义编写的脚本把需要监控的数据发送给pushgateway,

· pushgateway再将数据推送给对应的Prometheus服务

使用Pushgateway的主要原因

原因一:因为Prometheus 采用 pull 模式,可能由于不在一个子网或者防火墙,导致 Prometheus 无法直接拉取各个 target 数据。

原因二:在监控业务数据的时候,需要将不同数据汇总, 由 Prometheus 统一收集。

Prometheus的优缺点

优点:

  • 基于时间序列模型,时间序列是指将某种现象某一个统计指标在不同时间上的各个数值,按时间先后顺序排列而形成的序列 ,时间序列分析的主要目的是根据已有的历史数据对未来进行预测。

  • 基于K V的数据模型

  • 采样数据的查询,完全基于数学运算

  • 采用HTTP pull/push两种对应的数据采集传输方式

  • 本身自带图形调试

缺点:

  • 因其数据采集的精度 如果集群数量太⼤,那么单点的监控有性能瓶颈

  • 对磁盘资源也是耗费的较⼤,这个具体要看 监控的集群量 和 监控项的多少 和保存时间的长短

安装Prometheus

下载Prometheus安装包 Prometheus官网选择自己想要的安装包

[root@prometheus ~]# tar zxvf prometheus-2.42.0.linux-amd64.tar.gz
[root@prometheus ~]# mv prometheus-2.42.0.linux-amd64 /usr/local/prometheus
[root@prometheus ~]# mkdir  /usr/local/prometheus/data
[root@prometheus ~]# useradd -s /sbin/nologin prometheus
[root@prometheus ~]# chown -R prometheus:prometheus /usr/local/prometheus/ -R

配置系统启动脚本

[root@prometheus ~]# vim /usr/lib/systemd/system/prometheus.service
[Unit]
Description=prometheus
After=network.target

[Service]
User=prometheus
Group=prometheus
WorkingDirectory=/usr/local/prometheus
ExecStart=/usr/local/prometheus/prometheus
[Install]
WantedBy=multi-user.target

[root@prometheus ~]# systemctl daemon-reload 
[root@prometheus ~]# systemctl enabled --now prometheus
[root@prometheus ~]# systemctl status prometheus.service 
[root@prometheus ~]# netstat -anptu | grep 9090

[root@prometheus ~]# firewall-cmd --add-port=9090/tcp --permanent 
[root@prometheus ~]# firewall-cmd --reload 

后端存储配置

默认情况下prometheus会将采集的数据存储到本机的data目录, 存储数据的大小受限和扩展不便,这是使用influxdb作为后端的数据库来存储数据。

influxdb安装配置

influxdb的官方文档地址为: https://docs.influxdata.com/influxdb/v1.7/introduction/downloading/ 根据不同系统进行下载,这里使用官方提供的rpm进行安装。

下载rpm
[root@prometheus ~]# wget https://dl.influxdata.com/influxdb/releases/influxdb-1.7.8.x86_64.rpm
本地安装rpm
[root@prometheus ~]# yum localinstall influxdb-1.7.8.x86_64.rpm
[root@prometheus ~]# systemctl enable --now influxdb
[root@prometheus ~]# systemctl status influxdb

[root@prometheus ~]# firewall-cmd --add-port=8086/tcp --permanent 
[root@prometheus ~]# firewall-cmd --reload 

客户端登陆测试, 创建一个prometheus的database供后续的prometheus使用。
[root@prometheus ~]# influx
> create database prometheus;
> show databases;
name: databases
name
----
_internal
prometheus

配置prometheus集成influxdb

[root@prometheus ~]# vim /usr/local/prometheus/prometheus.yml
remote_write:
  - url: "http://localhost:8086/api/v1/prom/write?db=prometheus"

remote_read:
  - url: "http://localhost:8086/api/v1/prom/read?db=prometheus"

[root@prometheus ~]# systemctl restart prometheus

测试数据是否存储到influxdb中

[root@prometheus ~]# influx
> use prometheus;
> show MEASUREMENTS;
> select * from prometheus_http_requests_total limit 10 ; 

Prometheus配置文件讲解

1、Prometheus以scrape_interval规则周期性从监控目标上收集数据,然后将数据存储到本地存储上。
2、scrape_interval可以设定全局也可以设定单个metrics。# 数据采集间隔
3、Prometheus以evaluation_interval规则周期性对告警规则做计算,然后更新告警状态。
4、evaluation_interval只有设定在全局。    # 告警周期
•    global:全局配置
•    alerting:告警配置
•    rule_files:告警规则
•    scrape_configs:配置数据源,称为target,每个target用job_name命名。又分为静态配置和服务发现
# 全局配置global:
  # 默认抓取周期,可用单位ms、smhdwy #设置每15s采集数据一次,默认1分钟
  [ scrape_interval:  | default = 1m ]
  # 默认抓取超时
  [ scrape_timeout:  | default = 10s ]
  # 估算规则的默认周期 # 每15秒计算一次规则。默认1分钟
  [ evaluation_interval:  | default = 1m ]
  # 和外部系统(例如AlertManager)通信时为时间序列或者警情(Alert)强制添加的标签列表
  external_labels:
    [ :  ... ]
 
# 规则文件列表
rule_files:
  [ -  ... ]
 
# 抓取配置列表
scrape_configs:
  [ -  ... ]
 
# Alertmanager相关配置
alerting:
  alert_relabel_configs:
    [ -  ... ]
  alertmanagers:
    [ -  ... ]
 
# 远程读写特性相关的配置
remote_write:
  [ -  ... ]
remote_read:
  [ -  ... ]

在prometheus中,我们可以使用web页面进行数据的查询和展示,不过展示效果不太理想,这里使用一款专业的展示平台进行展示。

Grafana安装

[root@localhost ~]# wget https://dl.grafana.com/enterprise/release/grafana-enterprise-9.4.3-1.x86_64.rpm
[root@localhost ~]#  yum install grafana-enterprise-9.4.3-1.x86_64.rpm -y 
[root@localhost ~]# systemctl enable grafana-server.service --now
[root@localhost ~]# systemctl status grafana-server.service 
[root@localhost ~]# netstat -anptu | grep 3000
tcp6       0      0 :::3000                 :::*                    LISTEN      19757/grafana      
[root@prometheus ~]# firewall-cmd --add-port=3000/tcp --permanent 
[root@prometheus ~]# firewall-cmd --reload  

访问本地ip加grafana端口号

192.168.43.254:3000

CentOS7安装Prometheus+Grafana_第2张图片

默认账号:admin 默认密码:admin

CentOS7安装Prometheus+Grafana_第3张图片

新密码--确认新密码

CentOS7安装Prometheus+Grafana_第4张图片

添加数据源

点击 "Add data source" 按钮 ,选择Prometheus作为数据源类型

CentOS7安装Prometheus+Grafana_第5张图片
CentOS7安装Prometheus+Grafana_第6张图片

添加dashboard

选择import导入方式,输入1860,可以看到如下图。

CentOS7安装Prometheus+Grafana_第7张图片
CentOS7安装Prometheus+Grafana_第8张图片

保存仪表盘

CentOS7安装Prometheus+Grafana_第9张图片
CentOS7安装Prometheus+Grafana_第10张图片

添加精简导出器

我这边根据网络上面的dashardboard进行修改,使用在工作中的dashboard如下图。

Node-exporter dashboard网址如下

https://grafana.com/grafana/dashboards?dataSource=prometheus

你可能感兴趣的:(linux,运维,服务器)