目录
Prometheus官方网站:Prometheus - Monitoring system & time series database
四、在Prometheus的监控服务器上安装Prometheus
3、临时和永久修改PATH变量,添加prometheus的路径
2、把Prometheus做成一个服务器来进行管理,使之更加方便
五、在NFS服务器上安装exporter,检测NFS服务器的性能!
1、下载node_exporter源码安装包,上传到NFS服务器上去
六、在prometheus服务器上添加抓取数据的配置,添加node节点服务器,将抓取的数据存储到时序数据库里!
Prometheus官方网站:Prometheus - Monitoring system & time series database
一、监控的意义?
能即时的发现问题,提醒工程师尽快的去解决问题,减少公司的损失,提升了产品的品质,增强了用户的信任
监控:monitor 监控我们的服务器或者服务,一但出现问题,需要告诉我们(告警),然后需要运维人员即时去处理,将公司损失减小到最小。
监控在公司里非常的重要,任何公司都很重视,还需要监控背后:收集数据,分析数据,可以提前预知一些问题,即时去处理。
二、Prometheus是什么?
Prometheus是一个开源的系统监控和警报工具包,最初由SoundCloud构建。自2012年成立以来,许多公司和组织都采用了Prometheus,该项目拥有非常活跃的开发人员和用户社区。它现在是一个独立的开源项目,独立于任何公司进行维护。为了强调这一点,并澄清项目的治理结构,Prometheus于2016年加入了云原生计算基金会,成为Kubernetes之后的第二个托管项目。
云原生计算基金会(Cloud Native Computing Foundation):由Google、Ibm、redhat等知名公司组成的一个组织,而且还完成了k8s(Kubernetes)的创作,k8s是一个管理容器集群的软件。
Prometheus收集和存储它的指标作为时间序列数据,也就是说,指标信息与它被记录的时间戳一起存储,以及称为标签的可选键值对。
三、Prometheus的架构是什么?
这张图说明了Prometheus的架构和一些 其生态系统组成部分:
组件:
1、TSDB 时序数据库 (time series database ) --》hdd/ssd hdd机械磁盘 ssd固态磁盘
2、HTTP server web服务
3、pushgateway 中间件(代理)
4、alertmanager 告警的软件
5、exporter 收集数据,采集数据,可以看作木马程序 :安装到被监控的机器上
metrics:指标,就是各种各样的数据,例如cpu的使用率,内存的使用率,网络的带宽等数据
因此我们可以划分出来:
采集数据:exporter pushgateway
存储数据:TSDB
提供数据:HTTP server
显示数据:grafana
告警报警:alertmanager
获取数据的方式:
1、pull server --》pull --》client 主动去获取数据,可以避免发生大并发
2、push client --》 push --》 server\client 主动送数据过来,数据会一直更新,保持很新的状态,但是如果出现大量数据同时push过来,会导致传输路径被堵死了
四、在Prometheus的监控服务器上安装Prometheus
官方源码安装指导:Installation | Prometheus
我自己在VMware上安装了一台centos7.9作为Prometheus的监控服务器,如下图所示:
1、Prometheus源码安装
步骤:
1、源码安装,上传下载的源码包到linux服务器上
官网上的下载地址:
(我们下载linux版本的)
我们将下载好的安装包上传到linux上面
2、新建文件夹,将压缩包给解压
在根目录创建一个文件夹,将压缩包传入进去
[root@mysql ~]# cd /
[root@mysql /]# ls
bin boot dev etc home lianxi lib lib64 media mnt nginx o
[root@mysql /]# mkdir prometheus
[root@mysql /]# ls
bin boot dev etc home lianxi lib lib64 media mnt nginx o
[root@mysql /]# cd ~
[root@mysql ~]# mv prometheus-2.43.0.linux-amd64.tar.gz /prometheus/ #移动压缩包
[root@mysql ~]# cd /prometheus/
[root@mysql prometheus]# ls
prometheus-2.43.0.linux-amd64.tar.gz
[root@mysql prometheus]#
[root@mysql prometheus]# tar xf prometheus-2.43.0.linux-amd64.tar.gz #解压
[root@mysql prometheus]# ls
prometheus-2.43.0.linux-amd64
prometheus-2.43.0.linux-amd64.tar.gz
[root@mysql prometheus]#
[root@mysql prometheus]# mv prometheus-2.43.0.linux-amd64 prometheus #给文件改名 也可以使用cp命令
[root@mysql prometheus]# ls
prometheus prometheus-2.43.0.linux-amd64.tar.gz
[root@mysql prometheus]#
[root@mysql prometheus]# ls
console_libraries LICENSE prometheus promtool
consoles NOTICE prometheus.yml
[root@mysql prometheus]#
3、临时和永久修改PATH变量,添加prometheus的路径
[root@mysql prometheus]# PATH=/prometheus/prometheus:$PATH #临时修改
[root@mysql prometheus]# vim /root/.bashrc #永久修改
[root@mysql prometheus]# cat /root/.bashrc
# .bashrc
# User specific aliases and functions
alias rm='rm -i'
alias cp='cp -i'
alias mv='mv -i'
# Source global definitions
if [ -f /etc/bashrc ]; then
. /etc/bashrc
fi
PATH=/prometheus/prometheus:$PATH #添加
[root@mysql prometheus]#
[root@mysql prometheus]# which prometheus #检查是否配置成功
/prometheus/prometheus/prometheus
[root@mysql prometheus]#
[root@mysql prometheus]# nohup prometheus --config.file=/prometheus/prometheus/prometheus.yml &
[1] 5338
[root@mysql prometheus]# nohup: 忽略输入并把输出追加到"nohup.out"
可以添加nohup prometheus --config.file=/prometheus/prometheus/prometheus.yml &
可以使prometheus在后台运行,屏蔽hup信号,可以防止前台关闭后就无法运行了,可以防止终端关闭后还能继续运行
[root@mysql prometheus]# ps aux|grep prometheus #检查prometheus的进程号
root 5338 0.4 4.2 798956 42304 pts/0 Sl 06:53 0:00prometheus --config.file=/prometheus/prometheus/prometheus.yml
root 5345 0.0 0.0 112824 988 pts/0 R+ 06:54 0:00 grep --color=auto prometheus
[root@mysql prometheus]#
[root@mysql prometheus]# netstat -anpult|grep prometheus #检查prometheus的端口号
tcp6 0 0 :::9090 :::* LISTEN 5338/prometheus
tcp6 0 0 ::1:60070 ::1:9090 ESTABLISHED 5338/prometheus
tcp6 0 0 ::1:9090 ::1:60070 ESTABLISHED 5338/prometheus
[root@mysql prometheus]#
4、安装完成后可以直接去访问prometheus
如下图所示:
如果访问不到,请将防火墙关闭
如果没有数据并且出现这个警告:
Warning: Error fetching server time: Detected 305231.92299985886 seconds time difference between your browser and the server. Prometheus relies on accurate time and time drift might cause unexpected query results.
获取服务器时间错误:检测到浏览器和服务器之间的时间差异为305231.92299985886秒。 Prometheus赖于精确的时间和时间漂移可能会导致意外的查询结果。
我们需要在安装prometheus服务器输入命令:ntpdate ntp.aliyun.com
同步时间即可正常~
我们需要下载ntp
:yum install ntp -y 方便我们同步阿里云网站的时间
[root@mysql prometheus]# ntpdate ntp.aliyun.com
10 Apr 20:05:01 ntpdate[5441]: step time server 203.107.6.88 offset 305152.905096 sec
[root@mysql prometheus]#
2、把Prometheus做成一个服务器来进行管理,使之更加方便
将源码二进制安装的Prometheus,添加成为一个service方式管理
在上面的基础上,对/usr/lib/systemd/system/下的文件今天配置
[root@mysql prometheus]# vim /usr/lib/systemd/system/sshd.service #可以参考这个文件进行修改
[root@mysql prometheus]# vim /usr/lib/systemd/system/prometheus.service
#创建一个prometheus.service文件
[root@mysql prometheus]# cat /usr/lib/systemd/system/prometheus.service
#如果需要自行复制
[Unit]
Description=prometheus
[Service]
ExecStart=/prometheus/prometheus/prometheus --config.file=/prometheus/prometheus/prometheus.yml
ExecReload=/bin/kill -HUP $MAINPID
KillMode=process
Restart=on-failure
[Install]
WantedBy=multi-user.target
[root@mysql prometheus]#
[root@mysql prometheus]# systemctl daemon-reload
#说明我已经向systemd注册prometheus.service文件了,意思是重新加载systemd相关服务
[root@mysql prometheus]# service prometheus restart #对prometheus服务进行运行
Redirecting to /bin/systemctl restart prometheus.service
[root@mysql prometheus]#
[root@mysql prometheus]# ps aux|grep prometheus #检查prometheus的进程是否存在
root 5338 0.1 5.3 930420 52784 pts/0 Sl 19:39 0:02 prometheus --config.file=/prometheus/prometheus/prometheus.yml
root 5506 0.0 0.0 112824 992 pts/0 R+ 20:22 0:00 grep --color=auto prometheus
[root@mysql prometheus]# service prometheus stop
Redirecting to /bin/systemctl stop prometheus.service
[root@mysql prometheus]# ps aux|grep prometheus
root 5338 0.1 5.3 930420 52784 pts/0 Sl 19:39 0:02 prometheus --config.file=/prometheus/prometheus/prometheus.yml
root 5524 0.0 0.0 112824 988 pts/0 R+ 20:22 0:00 grep --color=auto prometheus
因为第一次是使用nohup方式启动的prometheus,所以还是需要kill的方式杀死进程
后面就可以使用service的方式启动prometheus了
[root@mysql prometheus]# kill -9 5338 #需要kill原来没有使用service运行的prometheus进程
[root@mysql prometheus]# service prometheus restart
Redirecting to /bin/systemctl restart prometheus.service
[1]+ 已杀死 nohup prometheus --config.file=/prometheus/prometheus/prometheus.yml
[root@mysql prometheus]# ps aux|grep prometheus
root 5541 1.0 3.9 798700 39084 ? Ssl 20:23 0:00 /prometheus/prometheus/prometheus --config.file=/prometheus/prometheus/prometheus.yml
root 5548 0.0 0.0 112824 992 pts/0 R+ 20:23 0:00 grep --color=auto prometheus
[root@mysql prometheus]# service prometheus stop #关闭prometheus,成功关闭
Redirecting to /bin/systemctl stop prometheus.service
[root@mysql prometheus]# ps aux|grep prometheus
root 5567 0.0 0.0 112824 992 pts/0 R+ 20:23 0:00 grep --color=auto prometheus
[root@mysql prometheus]#
验证成功
五、在NFS服务器上安装exporter,检测NFS服务器的性能!
我们以NFS服务器为例,当然其他的服务器也需要安装exporter程序,但是需要安装对应的exporter程序包
步骤:
1、下载node_exporter源码安装包,上传到NFS服务器上去
我们安装下面展示的node_exporter中的linux安装包
node_exporter表示通用的节点exporter包,他会采集这台服务器通用的数据,如cpu,内存,磁盘等等
2、将压缩包里面解压
[root@mysql ~]# mv node_exporter-1.5.0.linux-amd64.tar.gz /
[root@mysql ~]# cd /
[root@mysql /]# ls
bin boot data dev etc home lianxi lib lib64 media mnt nginx node_exporter-1.5.0.linux-amd64.tar.gz opt proc prometheus root run sbin srv sys tmp usr var web
[root@mysql /]# tar xf node_exporter-1.5.0.linux-amd64.tar.gz #解压
[root@mysql /]# mv node_exporter-1.5.0.linux-amd64 /node_exporter #改名
[root@mysql /]# ls
bin data etc lianxi lib64 mnt node_exporter opt prometheus run srv tmp var
boot dev home lib media nginx node_exporter-1.5.0.linux-amd64.tar.gz proc root sbin sys usr web
[root@mysql /]# cd node_exporter
[root@mysql node_exporter]# ls
LICENSE node_exporter NOTICE
[root@mysql node_exporter]# PATH=/node_exporter/:$PATH #临时改变PATH变量
[root@mysql node_exporter]# vim /root/.bashrc #永久改变PATH变量
[root@mysql node_exporter]# cat /root/.bashrc
# .bashrc
# User specific aliases and functions
alias rm='rm -i'
alias cp='cp -i'
alias mv='mv -i'
# Source global definitions
if [ -f /etc/bashrc ]; then
. /etc/bashrc
fi
PATH=/prometheus/prometheus:$PATH
PATH=/node_exporter/:$PATH #添加这一条
[root@mysql node_exporter]#
3、执行node_exporter代理程序agent
[root@mysql node_exporter]# nohup node_exporter --web.listen-address 0.0.0.0:8090 &
#8090这个端口号可以自己定义的,说明的它会从本机的8090端口输出监控数据,只要不和其他的服务冲突就可以
[1] 5671
[root@mysql node_exporter]# nohup: 忽略输入并把输出追加到"nohup.out"
[root@mysql node_exporter]# ps aux|grep node_exporter
root 5671 0.0 1.1 724656 11064 pts/1 Sl 21:00 0:00 node_exporter --web.listen-address 0.0.0.0:8090
root 5688 0.0 0.0 112824 988 pts/1 R+ 21:01 0:00 grep --color=auto node_exporter
[root@mysql node_exporter]# netstat -anpult|grep node_exporter
tcp6 0 0 :::8090 :::* LISTEN 5671/node_exporter
[root@mysql node_exporter]#
4、安装完毕后,可以直接访问node_exporter上的metrics
网址:http://172.20.10.3:8090/metrics
六、在prometheus服务器上添加抓取数据的配置,添加node节点服务器,将抓取的数据存储到时序数据库里!
[root@mysql prometheus]# vim prometheus.yml #在Prometheus的配置文件里添加被监听的端口
[root@mysql 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"]
#添加NFS服务器的监控端口
- job_name: "NFS1"
# metrics_path defaults to '/metrics'
# scheme defaults to 'http'.
static_configs:
- targets: ["172.20.10.3:8090"]
# 添加负载均衡器的监控端口
# - job_name: "LB1"
# metrics_path defaults to '/metrics'
# scheme defaults to 'http'.
# static_configs:
# - targets: ["192.168.2.200:8090"]
[root@mysql prometheus]#
完成后需要重新运行Prometheus
service prometheus restart #重启Prometheus
最后打开浏览器进行测试:
打开Prometheus网址,点击status的Targets即可看到被监控服务器的node数据
完成prometheus下载!!!