Prometheus 是一个开源的监控和告警软件,监控某台主机的cpu、内存、磁盘、网络流量等信息。
https://prometheus.io/ 间隔15秒抓取数据
metrics 是监控指标:cpu、内存、磁盘容量和io读写、网络流量等性能
Prometheus由哪些组件组成? Prometheus Server(存储数据TSDB 提供接口): Exporters Pushgateway(中间件代理软件) Alertmanager: Grafana Prometheus Operator Client Libraries: web ui(user interface)数据可视化工具
exporter是专门收集信息的软件(数据采集软件),被监控的其他服务器上。
TSDB 时序数据库,time series database,数据会按照时间的顺序插入到数据库里
如何报警:短信 钉钉 微信 电话 邮件
- 使用ansible下发node_exporter-1.4.0-rc.0.linux-amd64.tar.gz 到web和db服务器上
- ansible all -m copy -a "src=/root/node_exporter-1.4.0-rc.0.linux-amd64.tar.gz dest=/root/node_exporter-1.4.0-rc.0.linux-amd64.tar.gz"
- ansible all -m fetch -a "src=/etc/passwd dest=/root"
- ansible all -m yum -a “name=epel-release state = removed/installed/absentminute”
- mkdir /prome
- cd /prome
- ls
tar xf prometheus-2.43.0.linux-amd64.tar.gz
mv prometheus-2.43.0.linux-amd64 prometheus 改名
PATH=/prom/prometheus:$PATH 临时和永久修改PATH变量,添加prometheus的路径
echo 'PATH=/prom/prometheus:$PATH' >>/etc/profile
把prometheus做成一个服务来进行管理,方便日后维护和使用
[root@nfs-ansible-prom prom]# vim /usr/lib/systemd/system/prometheus.service
[Unit]
Description=prometheus
[Service]
ExecStart=/prom/prometheus/prometheus --config.file=/prom/prometheus/prometheus.yml
ExecReload=/bin/kill -HUP $MAINPID
KillMode=process
Restart=on-failure
[Install]
WantedBy=multi-user.target
- 重新加载systemd相关的服务,识别Prometheus服务的配置文件
[root@nfs-ansible-prom prom]# systemctl daemon-reload
- 启动Prometheus服务
- [root@nfs-ansible-prom prom]# systemctl start prometheus
- [root@nfs-ansible-prom prom]# systemctl restart prometheus
- [root@nfs-ansible-prom prom]# ps aux|grep prome
- 设置开机启动
- [root@nfs-ansible-prom prom]# systemctl enable prometheus
- 访问Prometheus 的web server
安装exporter
第2步:在整个web集群节点服务器(任何一台linux系统,例如nfs、mysql、web1、web2、LB1、LB2等)上安装exporter程序
exporter 是Prometheus的客户端的数据采集工具--》go语言编写的
node-exporter 是专门用来采集节点服务器的通用性能指标(cpu、内存、磁盘、网速等)
将node-exporter传递到所有的服务器上的/root目录下
ansible all -m copy -a 'src=node_exporter-1.4.0-rc.0.linux-amd64.tar.gz dest=/root/'
编写在其他机器上安装node_exporter的脚本
[root@nfs-ansible-prom prom]# vim install_node_exporter.sh
#!/bin/bash
tar xf /root/node_exporter-1.4.0-rc.0.linux-amd64.tar.gz -C /
cd /
mv node_exporter-1.4.0-rc.0.linux-amd64/ node_exporter
cd /node_exporter/
echo 'PATH=/node_exporter/:$PATH' >>/etc/profile
#生成nodeexporter.service文件
cat >/usr/lib/systemd/system/node_exporter.service <<EOF
[Unit]
Description=node_exporter
[Service]
ExecStart=/node_exporter/node_exporter --web.listen-address 0.0.0.0:9090
ExecReload=/bin/kill -HUP $MAINPID
KillMode=process
Restart=on-failure
[Install]
WantedBy=multi-user.target
EOF
#让systemd进程识别node_exporter服务
systemctl daemon-reload
#设置开机启动
systemctl enable node_exporter
#启动node_exporter
systemctl start node_exporter
使用ansible的copy模块推送脚本到db服务器
[root@ansible prometheus]# ansible db -m copy -a "src=install_node_exporter.sh dest=/root"
演示shell模块的使用
[root@mysql ~]# cat mkdir.sh
mkdir sc{1..100}
[root@mysql ~]#
[root@ansible prometheus]# ansible db -m shell -a "bash /root/mkdir.sh"
192.168.205.133 | CHANGED | rc=0 >>
prometheus]#ansible db -m script -a "/prome/prometheus/install_node_exporter.sh"
shell模块和script模块的区别
shell模块执行的脚本,需要提前copy到其他的机器上也可以执行命令
script模块不需要提前将脚本传输到其他机器,直接在ansible机器上执行就可以,会自动先推送文件到执行脚本的机器上,执行完后删除脚本 专门一点
- 在ansible服务器上执行安装node_exporter的脚本
[root@nfs-ansible-prom prom]# ansible all -m script -a "/prome/install_node_exporter.sh"
- 在其他的服务器上查看是否安装node_exporter成功
[root@lb2 ~]# ps aux|grep node
添加被监控的服务器
- 在prometheus服务器上添加抓取数据的配置,添加node节点服务器,将抓取的数据存储到时序数据库里[root@nfs-ansible-prom prometheus]# vim prometheus.yml
- scrape_configs:
# The job name is added as a label `job=<job_name>` to any timeseries scraped from this config. 在此文件新增web和mysql 注意要对齐
job_name: "prometheus"
static_configs:
- targets: ["192.168.159.138:9090"]
- job_name: "web-1"
static_configs:
- targets: ["192.168.159.136:9090"]
- job_name: "mysql"
static_configs:
- targets: ["192.168.159.137:9090"]
- 重启Prometheus服务
[root@nfs-ansible-prom prometheus]# service prometheus restart
- 在windows的浏览器访问
http://192.168.203.138:9090/targets