prometheus 从入门到精通(史上最全)
Prometheus(由go语言开发)是一套开源的监控&报警&时间序列(按照时间排序)数据库的组合。因为kubernetes(俗称k8s)的流行带动了prometheus的发展。它可以监控主机,服务,容器,支持多种exporter采集数据,还支持pushgateway进行数据上报,Prometheus性能足够支撑上万台规模的集群。原文链接:https://blog.csdn.net/qq_4527
zabbix监控详见:zabbix介绍及部署(超级详细讲解)-CSDN博客
目录
2.6.1.2 systemctl管理blackbox_exporter
2.6.1.3 启动、开机启动blackbox_export
一、Prometheus基本介绍
Prometheus(由go语言开发)是一套开源的监控&报警&时间序列(按照时间排序)数据库的组合。因为kubernetes(俗称k8s)的流行带动了prometheus的发展。它可以监控主机,服务,容器,支持多种exporter采集数据,还支持pushgateway进行数据上报,Prometheus性能足够支撑上万台规模的集群。
原文链接:https://blog.csdn.net/qq_45277554/article/details/130917620
时间序列数据(TimeSeries Data) : 按照时间顺序记录系统、设备状态变化的数据被称为时序数据。这种时序数据,会应用到很多场景, 如:
- 最常见的就是我们系统中的日志
- 无人驾驶车辆运行中要记录的经度,纬度,速度,方向,旁边物体的距离等等。每时每刻都要将数据记录下来做分析。
- 某一个地区的各车辆的行驶轨迹数据、车流量
- 传统证券行业实时交易数据
- 实时运维监控数据,网卡流量图,服务的当前状态,资源的使用情况,比如说,你所监控的内容出现了直线飙升、断崖式下跌、断线,一般都意味着出现了问题,不管是什么时候发生的,都要赶紧查一下出了什么问题
1.1、时间序列数据库的主要优点
时间序列数据库主要用于指处理带时间标签(按照时间的顺序变化,即时间序列化)的数据,带时间标签的数据也称为时间序列数据。
- 性能好
关系型数据库对于大规模数据的处理性能糟糕,这一点可以从I/O上有明显的体现。使用NOSQL可以比较好的处理大规模数据,但是依然比不上时间序列数据库。
- 存储成本低
由于采用的是metrics:key=value(标签:关键字=值)的数据存储方式,又使用了高效的压缩算法,平均消耗的存储成本在3.5个字节左右 ,所以比较节省存储空间 ,并且能有效降低IO
Prometheus有着非常高效的时间序列数据存储方法,每个采样数据仅仅占用3.5byte左右空间,上百万条时间序列数据,每隔30秒采集一次,保留60天,大概占用200多G的空间(来自官方文件数据)
1.2、Prometheus主要特征
- 多维度数据模型,可以通过多个维度对数据建模,也可以通过多个维度对数据进行查询
- 灵活的查询语言,提供灵活的PromQL查询方式,还提供了HTTP查询接口,可以很方便地结合Grafana等组件展示数据
- 不依赖分布式存储,支持单节点的本地存储。通过Prometheus自带的时序数据库,可以完成每秒百万及的数据存储,如果需要存储大量历史数据,还可以对接第三方的时序数据库
- 以HTTP方式,通过pull模型拉取时间序列数据,并提供了开放的指标数据标准
- 也可以通过中间网关支持push模型 ;这种推,拉监控其实就是主动和被动监控,默认情况下是以pull(拉)的方式,也就是监控主机去找被监控主机将数据要过来,如果要实现push(推)的方式需要中间网关的支持,这只是与zabbix的叫法不同而已
- 通过服务发现或者静态配置来发现目标服务对象
- 支持多种多样的图表和界面展示,可以使用第三方的工具来展示内容,如Grafana
1.3、Prometheus监控原理
- Prometheus Server负责定时在目标上抓取metrics(指标)数据,
- 每个抓取目标[主机、服务]都需要暴露一个HTTP服务接口用于Prometheus定时抓取。也就是说prometheus会将获取到的监控数据打包成一个可访问的web页面,通过访问指定的url来确定主机的状态
1.4、Prometheus配置文件六个大配置段的含义
-
prometheus配置文件各个大配置段
- scrape_configs 采集配置段 做采集器
- rule_files 告警、预聚合配置文件段
- remote_read 远程查询段
- remote_write 远程写入段
- alerting: Alertmanager信息段
-
优秀的开源项目大多是模块化的,能让使用者根据业务场景自行决定开启哪些配置
对应的配置段 | 用途 |
采集配置段 | 做采集器,数据保存在本地 |
采集配置段 + 远程写入段 | 做采集器+传输器,数据保存在本地+远端存储 |
远程查询段 | 做查询器,查询远端存储数据 |
采集配置段 + 远程查询段 | 做采集器+查询器,查询本地数据+远端存储数据 |
采集配置段 + Alertmanager信息段 + 告警配置文件段 | 做采集器+告警触发器,查询本地数据生成报警发往Alertmanager |
远程查询段 + Alertmanager信息段 + 告警配置文件段 | 做远程告警触发器,查询远端数据生成报警发往Alertmanager |
远程查询段+远程写入段 + 预聚合配置文件段 | 做预聚合指标,生成的结果集指标写入远端存储 |
二、部署prometheus监控平台
- 安装部署prometheus服务监控端
- 监控一个远端机器(linux/windows)
- 监控一个服务:mysql
- 监控一个网址:https://www.baidu.com
- 监控服务器的连通性:icmp
- 监控服务端口:tcp
2.1、部署prometheus服务监控端
# 下载prometheus 主程序包:
wget https://github.com/prometheus/prometheus/releases/download/v2.22.0/prometheus-2.22.0.linux-amd64.tar.gz
#解压缩文件:
tar xzvf prometheus-2.22.0.linux-amd64.tar.gz -C /usr/local/
cd /usr/local/prometheus-2.22.0.linux-amd64/
#启动prometheus
./prometheus --config.file=prometheus.yml --web.max-connections=512 --web.read-timeout=5m --storage.tsdb.path=/apps/softwares/data/ --query.max-concurrency=20 --query.timeout=2m &
#如果开启了防火墙(如果未开启请忽略),请添加防火墙策略:
firewall-cmd --zone=public --add-port=9090/tcp --permanent
firewall-cmd --reload
启动测试
看到这个页面说明prometheus启动成功了,默认监控了自己,我们来看一下本机的监控状态
点击 status—targets即可看到监控的机器或者资源
看到本机了,同时也可以根据提示在浏览器中输入http://IP或者域名:9090/metrics查看监控数据。
#浏览器显示监控数据
http://192.168.0.1:9090/metrics
#linux上进行查看
curl http://192.168.0.1:9090/metrics
如果能看到这些信息就说明监控拿到了数据,拿到数据就可以正常显示了。通过这个URL我们可以知道prometheus把监控的数据都统一存放在一起,然后生成一个web页面,用户可以通过web页面查看相关的数据,这些数据遵循了时序数据库的格式,也就是key=value的形式.这些数据就是我们的监控指标,只不过现在还没有办法分析,需要借助图形展示才会更方便阅读
prometheus显示同样也提供了图表,可以通过图表很直观的看到监控项的状态,只不过自带的图形实在是不怎么好看。
通过点击Graph可以显示到下列图表,在搜索栏中输入关键字可以匹配出你想看的监控项
这里输入的是process_cpu_seconds_total,CPU使用状态表就出现了,注意要点一下图表左上角的Graph按钮,默认是在console按钮页面。
2.2、监控一个远端业务机器(linux)
2.1.1 安装监控客户端
#远端主机监控插件(类似于zabbix-agent): 可直接下载也可以去官网进行下载:https://www.prometheus.io/download/
curl -LO https://github.com/prometheus/node_exporter/releases/download/v0.18.1/node_exporter-0.18.1.linux-amd64.tar.gz
#进行解压缩
tar xzvf node_exporter-0.18.1.linux-amd64.tar.gz -C /usr/local
cd /usr/local/node_exporter-0.18.1.linux-amd64/
#启动监控组件
nohup node_exporter &
#查看组件端口:
#业务机器监控插件服务端口
[root@node2 node_exporter-0.18.1.linux-amd64]# lsof -i :9100
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
node_expo 7281 root 3u IPv6 42486 0t0 TCP *:jetdirect (LISTEN)
#如果开启了防火墙(如果未开启请忽略),请添加防火墙策略:
firewall-cmd --zone=public --add-port=9100/tcp --permanent
firewall-cmd --reload
#验证 http://被监控机名称:9100/metrics
http://192.168.98.202:9100/metrics
2.1.2 在prometheus添加监控信息
#添加刚才安装客户端的服务器信息: 我这里填写的是及其名称:如果hosts里面没有做映射,机器名需替换成ip;
[root@lnode01 prometheus-2.22.0.linux-amd64]# tail -4 prometheus.yml
- job_name: 'lnode_linux' #定义名称
static_configs: #定义配置
- targets: ['lnode01:9100'] #定义目标
#可选-------如果多台机器均安装了监控客户端,则可批量添加:
[root@lnode01 prometheus-2.22.0.linux-amd64]# tail -4 prometheus.yml
- job_name: 'lnode_linux'
static_configs:
- targets: ['lnode01:9100','lnode02:9100','lnode03:9100','mgt01:9100']
####注意缩进 两个空格;
#重启服务
[root@lnode01 prometheus-2.22.0.linux-amd64]# pkill prometheus
[root@lnode01 prometheus-2.22.0.linux-amd64]# ./prometheus --config.file=prometheus.yml --web.max-connections=512 --web.read-timeout=5m --storage.tsdb.path=/apps/softwares/data/ --query.max-concurrency=20 --query.timeout=2m &
#如果遇到以下报错;
注意:prometheus启动报错
**lock DB directory: resource temporarily unavailable"**
原因:prometheus没有正常关闭,锁文件存在
处理办法:
rm $prometheus_dir/data/lock
2.1.3 测试验证
设置完查看prometheus页面
2.3、监控一个服务:mysql
要监控mysql需要两个条件,一个是系统中有mysql,另一个是要有监控插件,现在监控插件已经下载好了,所以我们要先安装mysql,然后进行相应的授权,让插件可以获取到所需要的信息,然后再设置相关插件,修改prometheus配置文件2.3.1部署mysql业务
2.3.1、部署mysql服务
#mysql业务监控插件: wget
https://github.com/prometheus/mysqld_exporter/releases/download/v0.12.0/mysqld_exporter-0.12.1.linux-amd64.tar.gz
#安装mariadb 并启动
yum -y install mariadb-server mariadb
systemctl enable mariadb
systemctl start mariadb
#创建监控用户
MariaDB [(none)]> grant select,replication client,process on *.* to 'hello'@'localhost' identified by '123456';
Query OK, 0 rows affected (0.00 sec)
MariaDB [(none)]> flush privileges;
Query OK, 0 rows affected (0.00 sec)
或者官方网站下载:Download | Prometheus
2.3.2、部署监控插件
[root@gnode29 ~]# tar xf mysqld_exporter-0.12.1.linux-amd64.tar.gz -C /usr/local
[root@gnode29 ~]# vim /usr/local/mysqld_exporter-0.12.1.linux-amd64/.my.cnf
[root@gnode29 ~]# cat /usr/local/mysqld_exporter-0.12.1.linux-amd64/.my.cnf
[client]
user=hello
password=123456
#启动
[root@gnode29 ~]# nohup /usr/local/mysqld_exporter-0.12.1.linux-amd64/mysqld_exporter --config.my-cnf=/usr/local/mysqld_exporter-0.12.1.linux-amd64/.my.cnf &
[root@gnode29 ~]# lsof -i :9104
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
mysqld_ex 7698 root 3u IPv6 46415 0t0 TCP *:peerwire (LISTEN)
#开启防火墙
firewall-cmd --zone=public --add-port=9104/tcp --permanent mysql数据采集端口
firewall-cmd --reload
2.3.3、在prometheus主配置文件中添加监控
- job_name: 'VEBsim_mysql'
static_configs:
- targets: ['gnode29:9104']
2.3.4、 重启prometheus服务
#重启服务
[root@lnode01 prometheus-2.22.0.linux-amd64]# pkill prometheus
[root@lnode01 prometheus-2.22.0.linux-amd64]# ./prometheus --config.file=prometheus.yml --web.max-connections=512 --web.read-timeout=5m --storage.tsdb.path=/apps/softwares/data/ --query.max-concurrency=20 --query.timeout=2m &
2.3.5、通过监控页面查看服务
也可通过浏览器直接访问 :http://gnode29:9104/metrics
2.4、监控远端机器(windows)
2.4.1、安装监控客户端
从官方网站进行下载window_node_exporter:
或者:链接:https://pan.baidu.com/s/13ljXMnUtK6Aqo8IgTo0v7w?pwd=ahz1
提取码:ahz1
下载完成后,双击即可完成运行,但是这种方式需要将应用一直放置在前台运行,为了以后的管理,可以将应用注册为服务项
sc create windows_exporter binpath= "C:\windwos_exporter\windows_exporter.exe" type= own start= auto displayname= windows_exporter
配置:
打开一个新的CMD窗口,在CMD窗口中输入services.msc即可打开Windows的服务管理窗口。在此窗口中,找到windows_exporter服务,使用鼠标右击点击属性按钮,在启动参数中添加–telemetry.addr=0.0.0.0:9182,配置完成后,重启即可。
2.4.2、在Prometheus添加监控信息
[root@lnode01 prometheus-2.22.0.linux-amd64]# tail -4 prometheus.yml
- job_name: 'gnode_windows'
static_configs:
- targets: ['gnode29:9182','gnode30:9182']
#重启服务
[root@lnode01 prometheus-2.22.0.linux-amd64]# pkill prometheus
[root@lnode01 prometheus-2.22.0.linux-amd64]# ./prometheus --config.file=prometheus.yml --web.max-connections=512 --web.read-timeout=5m --storage.tsdb.path=/apps/softwares/data/ --query.max-concurrency=20 --query.timeout=2m &
# windows服务器数据采集端口
firewall-cmd --zone=public --add-port=9182/tcp --permanent
firewall-cmd --reload
2.4.3、测试验证
可以通过curl进行查看监测数据:
或者通过网址进行访问
2.5、监控docker服务
2.5.1、安装监控客户端
进入docker服务所在服务器:测试多种源,最终找到此方式可行;
#使用国外服务器下载镜像上传到阿里云
docker pull gcr.io/cadvisor/cadvisor:v0.47.0
registry.cn-beijing.aliyuncs.com/luohuiwen20/cadvisor:v0.47.0
https://github.com/google/cadvisor
sudo docker run \
--volume=/:/rootfs:ro \
--volume=/var/run:/var/run:ro \
--volume=/sys:/sys:ro \
--volume=/var/lib/docker/:/var/lib/docker:ro \
--volume=/dev/disk/:/dev/disk:ro \
--publish=8080:8080 \
--detach=true \
--name=cadvisor \
--privileged \
--device=/dev/kmsg \
registry.cn-beijing.aliyuncs.com/luohuiwen20/cadvisor:v0.47.0
2.5.2、在Prometheus添加监控信息
[root@lnode01 prometheus-2.22.0.linux-amd64]# tail -4 prometheus.yml
- job_name: 'license_docker'
static_configs:
- targets: ['lnode01:8080']
#重启服务
[root@lnode01 prometheus-2.22.0.linux-amd64]# pkill prometheus
[root@lnode01 prometheus-2.22.0.linux-amd64]# ./prometheus --config.file=prometheus.yml --web.max-connections=512 --web.read-timeout=5m --storage.tsdb.path=/apps/softwares/data/ --query.max-concurrency=20 --query.timeout=2m &
# windows服务器数据采集端口
firewall-cmd --zone=public --add-port=8080/tcp --permanent
firewall-cmd --reload
2.5.3、测试验证
可以通过curl进行查看监测数据:
或者通过网址进行访问
2.6、监控服务器、网址、tcp端口连通性
blackbox_exporter 简介:
blackbox_exporter是 Prometheus 官方提供的 exporter,可通过 HTTP、HTTPS、DNS、TCP、ICMP 对端点进行可用性等指标探测。
官方文档 https://github.com/prometheus/blackbox_exporter
2.6.1、安装客户端监控服务
2.6.1.1安装部署客户端
#解压并重命名
tar -zvxf blackbox_exporter-0.24.0.linux-amd64.tar.gz -C /usr/local/
cd /usr/local/
mv blackbox_exporter-0.24.0.linux-amd64 blackbox_exporter
#查看blackbox_exporter版本信息
cd /usr/local/blackbox_exporter
./blackbox_exporter --version
2.6.1.2 systemctl管理blackbox_exporter
##vim /usr/lib/systemd/system/blackbox_exporter.service
###写入
[Unit]
Description=blackbox_exporter
After=network.target
[Service]
User=root
Type=simple
ExecStart=/usr/local/blackbox_exporter/blackbox_exporter --config.file=/usr/local/blackbox_exporter/blackbox.yml
ExecReload=/bin/kill -HUP $MAINPID
KillMode=process
Restart=on-failure
[Install]
WantedBy=multi-user.target
2.6.1.3 启动、开机启动blackbox_export
systemctl start blackbox_exporter && systemctl enable blackbox_exporter
systemctl status blackbox_exporter
ps aux | grep blackbox_exporter
netstat -antpl | grep blackbox
探针已经启动:
2.6.1.4、访问探针网页
输入网址:http://机器名:9115
2.6.1.5、修改配置文件
blackbox_exporter的配置文件无特殊需求使用默认配置即可
cat /usr/local/blackbox_exporter/blackbox.yml
2.6.2、在Prometheus添加监控配置
2.6.2.1 在prometheus.yml增加配置
在prometheus.yml中添加blackbox_exporter的配置, 要注意yml文件的语法规范
vim /usr/local/prometheus/prometheus.yml
#icmp ping 监控
- job_name: icmp_status
metrics_path: /probe
params:
module: [icmp]
static_configs:
- targets: ['lnode01','lnode02','lnode03','192.168.0.100'] #监控对象
labels:
instance: node_status
group: 'icmp-node'
relabel_configs:
- source_labels: [__address__]
target_label: __param_target
- source_labels: [__param_target]
target_label: instance
- target_label: __address__
replacement: lnode01:9115 #安装blackbox_expoter的ip地址
#监控tcp端口
- job_name: tcp_port
metrics_path: /probe
params:
module: [tcp_connect]
file_sd_configs:
- files: ['/usr/local/prometheus/conf.d/tcp_port/*.yml']
refresh_interval: 10s
relabel_configs:
- source_labels: [__address__]
target_label: __param_target
- source_labels: [__param_target]
target_label: instance
- target_label: __address__
replacement: lnode01:9115 #安装blackbox_expoter的ip地址
# http get 监控
- job_name: http_get
metrics_path: /probe
params:
module: [http_2xx]
file_sd_configs:
- files: ['/usr/local/prometheus/conf.d/http_get/*.yml']
refresh_interval: 10s
relabel_configs:
- source_labels: [__address__]
target_label: __param_target
- source_labels: [__param_target]
target_label: instance
- target_label: __address__
replacement: lnode01:9115 #安装blackbox_expoter的ip地址
2.6.2.2 增加tcp文件-监控targets文件
###新建刚才配置prometheus.yml文件中tcp模块的写的路径和文件名
mkdir -p /usr/local/prometheus/conf.d/tcp_port
#写入并改写要监控的ip和端口号
#添加监控端口文件
#vim /usr/local/prometheus/conf.d/tcp_port/tcp_port.yml
- targets: ['lnode01:22','lnode02:22','lnode03:22']
labels:
group: 'tcp port'
2.6.2.3 增加http-get文件-监控targets文件
##新建相应目录和文件
mkdir -p /usr/local/prometheus/conf.d/http_get
vim /usr/local/prometheus/conf.d/http_get/http_get.yml
##填写监控http的状态信息
- targets:
- http://www.baidu.com/
labels:
name: 'http_get'
- targets:
- https://www.sohu.com/
labels:
name: 'http_get'
2.6.3、测试验证
2.7 部署效果总览
三、prometheus Grafana数据展示及告警
prometheus这个监控软件的展示界面实在是有些难看,所以换一个展示方式:Grafana,Grafana是一个开源的度量分析和可视化工具(没有监控功能),可以通过将采集的数据分析,查询,然后进行可视化的展示,并能实现报警。
3.1 grafana安装
3.1.1、grafana安装
软件包获得
官方网站: grafana:https://grafana.com/
#软件包安装
[root@lnode01 ~]# yum install -y https://dl.grafana.com/enterprise/release/grafana-enterprise-11.0.0-1.x86_64.rpm
#查看状态
systemctl status grafana-server.service
#启动grafana
systemctl start grafana-server
#查看grafana端口状态
lsof -i:3000
#开启防火墙策略
firewall-cmd --zone=public --add-port=3000/tcp --permanent grafana服务端口
firewall-cmd --reload
grafana启动成功后,可以通过页面访问到grafana页面
要求输入账号密码: admin/admin(默认)
当看到这个页面说明grafana已经安装成功并且工作了。
输入账号密码登录时,由于是第一次登录,为了安全要求必须更改密码后才能登录;
输入两次新密码后,点击save即可登录;
登陆后页面首先从管理-默认首选项-语言--修改为中文 :
进入到安装grafana的服务器:
#修改以下文件:将 default_language = zh-Hans
vim /etc/grafana/grafana.ini
default_language = zh-Hans
#重启服务:
systemctl restart grafana-server
3.1.2 grafana页面设置-添加prometheus数据源
进入首页后;则出现以下页面,选择complete Add your first data source
选择咱们的数据源 Pometheus 进入下一步
auth部分的设置,主要是与HTTPS配合使用的,如果使用的是https就需要证书,认证等,需要对此部分内容进行一些配置
按照页面要求填入对应信息即可,一般错误都是因为输入错误造成的。点击Save & Test后保存成功
通过左侧导航栏中的齿轮图标下拉菜单中的Data Source看到刚才添加的数据源
3.2、绘制图形
3.2.1 仪表盘管理
添加完数据源后,可以继续添加仪表盘,这样我们就能以图表的方式看到数据,继续点击Creat your first dashboar
选择导入仪表板
导入仪表板
导入成功后:进入首页选择刚导入的仪表版,可以看到数据显示出来了
图形还是很好看的
3.2.2 grafana设置—使用模板图表展示MySQL监控
mysql监控模板下载
Grafana dashboards | Grafana Labs
下载好模板然后导入模板,则可以监控mysql;
推荐模板:ID: 7362:mysql overview ID:7371 :mysql replication
3.2.3 grafana设置—使用模板图表展示机器windows基础信息
windows监控模板下载
Grafana dashboards | Grafana Labs
下载好模板然后导入模板,则可以监控windows机器信息;
推荐模板:ID: 10467:Windows Exporter Dashboard 20230531-StarsL.cn ID:14694 :Windows Exporter Dashboard
3.2.4 grafana设置—使用模板图表展示docker服务监控
docker监控模板下载
Grafana dashboards | Grafana Labs
下载好模板然后导入模板,则可以监控docker服务信息;
推荐模板:ID: 11600:Docker Container ID:10619 :Docker Container & Host Metrics
3.2.5 grafana设置—使用模板图表展示监控服务器、网址、tcp等
监控模板下载
Grafana dashboards | Grafana Labs
下载好模板然后导入模板,则可以监控相关服务联通性;
推荐模板:ID: 13659:Blackbox Exporter (HTTP prober) ID: 9965:Blackbox Exporter Dashboard 20220412-StarsL.cn
3.3 首页效果总览
3.4 Grafana告警
填写报警媒介相关信息
选择关注的服务器指标:并编辑
添加一个报警规则
这里报警阈值设置的是取CPU Load平均值 因为是实验,所以预警值是0.5方便测试告警
设置完成后,发现图表上出现了预警线,点击保存
接下来在node2上增加CPU的负载;
这样就完成了报警设置,可查看钉钉报警信息; (监控还在完善中。。。。)
参考文献 链接:
https://blog.csdn.net/qq_45277554/article/details/130917620https://blog.51cto.com/chier11/9736763
更多推荐
所有评论(0)