Prometheus与Grafana的完美结合:打造强大的监控与可视化平台

目录

一、Prometheus简介

1.1、Prometheus基本介绍

1.2、Prometheus监控原理

1.3、Prometheus 的局限性

二、部署Prometheus

2.1、使用apt或者yum安装

2.2、基于官方提供的二进制文件安装

2.3、基于docker镜像直接启动或通过docker-compose编排

2.4、基于Operator部署在Kubernetes环境

2.5、Prometheus配置文件主要参数

2.6、部署Prometheus服务监控端

2.6.1、下载最新版Prometheus

2.6.2、解压文件

2.6.3、编辑service文件

2.6.4、启动Prometheus服务

​编辑

2.6.5、访问Prometheus的web界面

2.7、部署node_exporter

2.7.1、下载node_exporter的二进制文件

2.7.2、解压文件

2.7.3、编辑service文件

​编辑

2.7.4、启动node_exporter

2.8、在Prometheus Server上添加node节点

2.8.1、编辑prometheus的配置文件

​编辑

2.8.2、检查prometheus.yml文件格式

2.8.3、热加载prometheus配置

2.8.4、访问prometheus页面,查看node信息

2.9、node_exporter 的PromQL查询语句

2.10、node_exporter自定义指标

2.10.1、修改node_exporter的service文件

2.10.2、编写监控脚本

2.10.3、检查自定义指标

三、部署Grafana

3.1 、grafana安装

3.1.1、grafana安装

3.1.2、添加数据源


Prometheus

1.1Prometheus

Prometheus是基于Go语言开发的一套开源的监控、告警和时间序列数据库的组合,是由 SoundCloud公司开发(2012年)的开源监控系统。

Prometheus2016年加入CNCFCloud Native Computing Foundation ,云原生计算基金会),201889Prometheus成为CNCFKubernetes

之后毕业的第二个项目,它可以监控主机,服务,容器,支持多种exporter采集数据,还支持 pushgateway进行数据上报,Prometheus性能足够支撑上万台规模的集群,Pormetheus在容器 和微服务领域中得到了广泛应用,其主要优缺点如下:

  1. 使用key-value的多种维度(多个角度、多个层面、多个方面)格式保存数据,支持通过多个 维度对数据进行查询
  2. 使用TSDB数据库存储数据:TSDB性能好,存储成本低
  3. 支持第三方dashboard实现更绚丽的图形界面,如grafana
  4. 组件是模块化的,Prometheus Server/Exporter/Alertmanager组件
  5. 不依赖存储,数据可本地保存也可以远程保存
  6. 平均每个采样点占3.5bytes,且一个Pometheus server可以处理数百万级别的metrics指标数 据
  7. 支持静态配置和自动化服务发现(基于consul等方式动态发现被监控的目标服务)
  8. 强大的数据查询语句(PromQL/Prometheus Query Language ),还提供http询接口
  9. 数据可以直接进行算术运算
  10. 易于横向伸缩
  11. 众多官方和第三方的expoter(数据导出器)实现不同的指标数据收集

1.2Prometheus

Prometheus Server 基于服务发现(Service Discovery)机制或静态配置获取要监视的目标 (Target),并通过每个目标上的指标 exporter 来采集(Scrape)指标数据;

Prometheus Server 内置一个基于文件的时间序列存储来持久存储指标数据,用户可使用 PromQL 口来检索数据,也能够按需将告警需求发往 Alertmanager 完成告警内容发送; 一些短期运行的作业的生命周期过短,难以有效地将必要的指标数据供给到 Server 端,它们一 般会采用推送(Push)方式输出指标数据, Prometheus 借助于 Pushgateway 收这些推送的 数据,进而由 Server 端进行抓取

Prometheus server 把采集到的监控指标数据通过 TSDB 储到本地 HDD/SSD 。 Prometheus 采集的监控指标数据按时间序列存储,通过配置报警规则,把触发的告警通知发送到 Alertmanager

Alertmanager 通过配置报警接收方,发送报警到邮件、钉钉或者企业微信等。 Prometheus 自带的 Web UI 界面提供 PromQL 查询语言,可查询监控数据。 Grafana 可接入 Prometheus 数据源,把监控数据以图形化形式展示出。

1.3Prometheus

Prometheus 是一款指标监控系统,不适合存储事件及日志等;它更多地展示的是趋势性的监 控,而非精准数据;

Prometheus 认为只有最近的监控数据才有查询的需要,其本地存储的设计初衷只是保存短期 (例如一个月)数据,因而不支持针对大量的历史数据进行存储;

若需要存储长期的历史数据,建议基于远端存储机制将数据保存于 InfluxDB OpenTSDB 等系 统中;

Prometheus 的集群机制成熟度不高,可基于 Thanos Cortex 实现 Prometheus 群的高可用 及联邦集群。

Prometheus

Prometheus可以通过不同的方式安装部署Prometheus监控环境,实际生产环境中只需要根据实 际需求选择其中一种方式部署即可,无论使用哪一种方式安装部署Prometheus server,以后的 使用都是一样的。

2.1使aptyum

~# apt install prometheus
~# yum install prometheus

2.2

https://prometheus.io/download

2.3docker镜像直接启动或通过docker-compose

https://prometheus.io/docs/prometheus/latest/installation

2.4OperatorKubernetes

GitHub - prometheus-operator/kube-prometheus: Use Prometheus to monitor Kubernetes and applications running on Kubernetes

2.5Prometheus

--config.file="prometheus.yml" #指定配置文件

--web.listen-address="0.0.0.0:9090" #指定监听地址

--storage.tsdb.path="data/" #指定数存储目录 --storage.tsdb.retention.size=B,KB,MB,GB,TB,PB,EB #指定block大小,默认512MB

--storage.tsdb.retention.time= #数据保存时长,默认15天

--query.timeout=2m #最大查询超时时间

--query.max-concurrency=20 #最大查询并发数

--web.read-timeout=5m #最大空闲超时时间

--web.max-connections=512 #最大并发连接数

--web.enable-lifecycle #启用API动态加载配置功能

2.6Prometheus

这里我使用官方二进制进行安装部署

2.6.1Prometheus

~# wget https://github.com/prometheus/prometheus/releases/download/v2.53.2/prometheus-2.53.2.linux-amd64.tar.gz

2.6.2

~# tar zxvf prometheus-2.53.2.linux-amd64.tar.gz -C /usr/local/
~# ln -sv /usr/local/prometheus-2.53.2.linux-amd64 /usr/local/prometheus

2.6.3service

创建Prometheusservice文件

~# vim /usr/lib/systemd/system/prometheus.service
 #写入
[Unit]
Description=Prometheus
Documentation=https://prometheus.io/
After=network.target

[Service]
# Type设置为notify时,服务会不断重启
Type=simple
User=root
# --storage.tsdb.path是可选项,默认数据目录在运行目录的./dada目录中
ExecStart=/usr/local/prometheus/prometheus --config.file=/usr/local/prometheus/prometheus.yml --storage.tsdb.path=/var/lib/prometheus --web.enable-lifecycle
ExecReload=/bin/kill -HUP $MAINPID
KillMode=process
Restart=on-failure

[Install]
WantedBy=multi-user.target

2.6.4Prometheus

~# systemctl daemon-reload && systemctl start prometheus
~# systemctl status prometheus

2.6.5访Prometheusweb

浏览器输入http://PROM_IP:9090能显示如下信息,表示prometheus server部署成功

2.7node_exporter

node-exporter简介

node-exporter收集当前机器的系统数据,采用prometheus官方提供的exporter node-exporter部署

2.7.1node_exporter

~# wget https://github.com/prometheus/node_exporter/releases/download/v1.8.2/node_exporter-1.8.2.linux-amd64.tar.gz

2.7.2

~# tar zxvf node_exporter-1.8.2.linux-amd64.tar.gz -C /usr/local/
~# ln -sv /usr/local/node_exporter-1.8.2.linux-amd64.tar.gz -C /usr/local/node_exporter

2.7.3service

创建node_exporterservice文件

~# vim /usr/lib/systemd/system/node_exporter.service
#写入
[Unit]
Description=node_exporter
Documentation=https://prometheus.io/
After=network.target

[Service]
Type=simple
User=root
ExecStart=/usr/local/node_exporter/node_exporter
ExecReload=/bin/kill -HUP $MAINPID
KillMode=process
Restart=on-failure

[Install]
WantedBy=multi-user.target

2.7.4node_exporter

~# systemctl daemon-reload && systemctl start node_exporter

2.7.5node_exporter

~# systemctl status node_exporter

访问node_exporterweb界面

浏览器输入http://NODE_EXPORTER_IP:9100能显示如下信息表示node_exporter服务部署成 功

2.8Prometheus Servernode

2.8.1prometheus

/usr/local/prometheus/prometheus.yml件中添加节点信息

~# vim /usr/local/prometheus/prometheus.yml
添加
   - job_name: "node_exporter"
     static_configs:
     - targets: ["172.16.1.65:9100"]

2.8.2prometheus.yml

2.8.3prometheus

2.8.4访prometheusnode

2.9node_exporter PromQL

Prometheusweb页面,点击Graph,在输入框输入PromQL,执行后可以点击下面的Graph 查看图像

一些常用PromQL如下

系统启动时间

node_boot_time_seconds

CPU核数

count(node_cpu_seconds_total{mode='system'}) by (instance)

计算 CPU 使用率

计算内存使用率

(1- (node_memory_Buffers_bytes + node_memory_Cached_bytes + node_memory_MemFree_bytes) / node_memory_MemTotal_bytes) * 100

计算磁盘使用率

(1 - node_filesystem_avail_bytes{fstype=~"ext4|xfs"} /
node_filesystem_size_bytes{fstype=~"ext4|xfs"}) * 100

网络带宽

下行带宽

sum by(instance) (irate(node_network_receive_bytes_total{device!~"bond.*?|lo"}[5m]))

上行带宽

sum by(instance) (irate(node_network_transmit_bytes_total{device!~"bond.*?|lo"}[5m]))

2.10node_exporter自定义指标

node_exporter内置的采集指标不能满足需求,我们可以自定义一些采集指标,方法如下

2.10.1node_exporterservice

~# vim /usr/lib/systemd/system/node_exporter.service

2.10.2

创建上一步添加的目录,并在该目录下编写监控脚本,脚本内容随意,执行结果输出到.prom后 缀的文件中

~# mkdir -pv /usr/local/node_exporter/custom_metrics
~# cd /usr/local/node_exporter/custom_metrics
~# vim up-custom-metrics.sh

脚本示例(实时获取系统启动时间和内存空闲大小,并输出到metrics1.prommetrics2.prom两 个文件):

#!/bin/bash
UPTIME=`cat /proc/uptime | awk '{print $1}'`
MemFree=`cat /proc/meminfo | grep MemFree | awk '{print $2}'`
echo "uptime ${UPTIME}" > /usr/local/node_exporter/custom_metrics/metrics1.prom
echo "MemFree ${MemFree}" > /usr/local/node_exporter/custom_metrics/metrics2.prom

2.10.3

node_exporterweb界面能查询到如下信息说明自定义的指标已被成功收集

                         

 

Grafana

rometheus这个监控软件的展示界面实在是有些难看,所以换一个展示方式:GrafanaGrafana是一个开源的度量分析和可视化工具(没有监控功能),可以通过将采集的数据分析, 查询,然后进行可视化的展示,并能实现报警。

3.1 、grafana

3.1.1grafana

软件包获得

官方网站: grafana:Grafana: The open observability platform | Grafana Labs

启动成功后通过浏览器查看grafana的页面,初始默认用户密码admin/admin

修改中文界面

3.1.2

过主页进入DATA SOURCE

选择Prometheus

这里写PrometheusIP和端口,其他选项先默认即可

点击最下方的Save & test,显示Successfully queried the Prometheus API表示连接成功

返回主页进入DASHBOARDS

这里可以导入一些好看的可视化模版

3种方式可以导入模版,1上传json文件,2.通过ID直接导入 3.直接键入json内容

可以通过grafana官网查找自己想要的模版

选中一个自己想要的,可以通过ID和下载josn文件的方式获取

比如,使用ID直接导入

上传Json文件的方式


欢迎关注作者的公众号,公众号每天分享运维干货文章 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值