监控系统"/>
prometheus+grafana搭建监控系统
Prometheus概述
- Prometheus是一套开源的监控&报警&时间序列数据库的组合。适合监控docker容器,因为k8s的流行带动了Prometheus的发展;
- 时间序列数据:按照时间顺序记录系统、设备状态变化的数据被称为时序数据;
- 时间序列数据特点
性能好:关系型数据库对于大规模数据的处理性能糟糕。NOSQL(泛指非关系型的数据库)可以比较好的处理大规模数据,但依然比不上时间序列数据库;
存储成本低:高效的压缩算法,节省存储空间,有效降低IO;Prometheus有着非常高效的时间序列数据存储方法,每个采样数据仅仅占用3.5byte左右空间,上百万条时间序列,30秒间隔,保留60天,大概花了200多G;
Prometheus架构图
- 官网:/
存储计算层
Prometheus Server,里面包含了存储引擎和计算引擎
Retrieval组件为取数组件,他会主动从Pushgateway或者Exporter拉取指标数据;
Service discovery,可以动态发现要监控的目标;
TSDB,数据核心存储与查询
HTTP server,对外提供HTTP服务
采集层
采集层分为两类,一类是生命周期较短的作业,还有一类是生命周期较长的作业。
短作业:直接通过API,在退出的时候,指标推送给Pushgateway;
长作业:Retrieval组件直接从job或者Exporter拉取数据;
应用层
应用层主要分为两种,一种是AlertManager,另一种是数据可视化
AlertManager
对接Pagerduty,是一套付费监控报警系统,可实现短信报警、5分钟无人 ack打电话通知、依然无人ack,通知值班人员Manager
数据可视化
Prometheus build-in WebUI
Grafana
其他基于API开发的客户端
环境准备
克隆虚拟机
Prometheus服务器 192.168.111.100 Prometheus.glodon
grafana服务器 192.168.111.101 grafana.glodon
被监控服务器 192.168.111.102 apiServer.glodon
初始化服务器
IP地址、hostname主机名称、绑定/etc/hosts文件、时间同步(重要)
IP地址
vim /etc/sysconf/network-scripts/ifcfg-ens33
BOOTPROTO=dhcp-->none/static
uuid 因为3台虚拟机是克隆的,所以保证3台服务器uuid不一致
PREFIX=22 子网掩码,要和本机子网掩码保持一致
IPADDR=192.168.111.100 给虚拟机设置虚拟IP
GATEWAY=192.168.111.254 虚拟机网关,要和本机网关保持一致
DNS1=114.114.114.114 DNS服务器
DNS2=223.5.5.5 备用DNS服务器
VMWare配置
针对wifi的设置(有线的话可以不用关注这里)
hostname主机名称
hostnamectl set-hostname prometheus.glodon
hostnamectl set-hostname apiServer.glodonwojiu
hostnamectl set-hostname grafana.glodon
使用命令su切换
绑定/etc/hosts文件
192.168.111.100 prometheus prometheus.glodon
192.168.111.101 grafana grafana.glodon
192.168.111.102 apiServer apiServer.glodon
时间同步(重要)
mount /dev/cdrom /mnt
yum install ntpdate -y
ntpdate cn.ntp
使用date命令来校验
安装prometheus
上传安装包到linux服务器
解压并安装软件
安装目录:/usr/local/prometheus
cd /usr/local
tar -zxvf prometheus-2.36.2.linux-amd64.tar.gz
mv prometheus-2.36.2.linux-amd64 prometheus
启动prometheus
cd /usr/local/prometheus
启动prometheus服务
nohup ./prometheus --config.file="/usr/local/prometheus/prometheus.yml" --web.enable-admin-api --web.listen-address=:9090 >/dev/null 2>&1 &
关闭防火墙
systemctl stop firewalld
测试端口占用情况
判断是否真正的启动了 lsof -i:9090
web端访问prometheus
http://服务器IP:9090访问prometheus的主界面
系统默认监控自己的主机信息,监控接口:通过http://服务器IP:9090/metrics可以查看到监控数据
prometheus通过关键字查看监控项:process_cpu_secords_total
监控远程Linux主机
node组件介绍:在远程linux主机上安装node_exporter组件(这样prometheus就可以接收到其收集系统)
上传软件包到linux服务器中
安装wget
yum install -y wget
使用wget下载node_exporter
wget .2.2/node_exporter-1.2.2.linux-amd64.tar.gz
解压安装node_exporter组件
cd /usr/local
tar -zxvf node_exporter-1.2.2.linux-am
mv node_exporter-1.2.2.linux-amd64.tar.gz node_exporter
启动node_exporter收集linux主机信息
cd /usr/local/node_exporter
nohup ./node_exporter &
扩展:nohup命令:如果把启动node_exporter的终端给关闭,那么进程随之也会关闭。nohup命令会帮助你解决这个问题
关闭防火墙
systemctl stop firewalld
查看端口占用情况
lsof -i:9100 端口被占用说明服务启动成功
web端访问node_exporter
http://服务器IP:9090访问linux主机信息
通过浏览器访问http://被监控端IP:9100/metrics就可以看到node_exporter被监控端收集的监控信息
prometheus配置node_exporter的信息
cd /usr/local/prometheus/
vi prometheus.yml 具体添加信息如下图
kill -9 pid(prometheus的进程ID)
lsof -i:9090 确认端口没有进程占用
再次启动prometheus
nohup ./prometheus --config.file="/usr/local/prometheus/prometheus.yml" --web.enable-admin-api --web.listen-address=:9090 >/dev/null 2>&1 &
lsof -i:9090 确认端口被占用,说明重启成功
systemctl stop firewalld 关闭防火墙
回到web管理界面–点击status–点击targets可以看到多了一台监控目标
安装grafana
grafana简介:grafana是一个开源的度量分析和可视化工具,可以通过将采集的数据分析、查询、然后进行可视化的展示,并能实现报警;
上传安装包到Linux服务器
使用命令下载
wget .1.3-1.x86_64.rpm
官网下载
下载地址:
安装grafana
安装服务
yum -y install grafana-7.1.3-1.x86_64.rpm
启动grafana
服务启动
service grafana-server start
关闭防火墙
systemctl stop firewalld
测试端口占用情况
监听grafana的默认端口3000
lsof -i:3000
web访问Grafana
http://192.168.111.101:3000/
Grafana默认账号密码
用户名:admin
密码:admin
首次登录需要修改默认密码
grafana配置prometheus数据展示
导入官方模板:8919、9276(建议使用此模板)
grafana+onealert报警
睿象云官网:/
优点:可以免费发送告警邮件
生成的告警信息
模拟CPU过高的代码
安装java环境
yum -y list java*
yum install java-1.8.0-openjdk.x86_64
java -version
执行java命令
javac CPU.java
java CPU
具体代码
import java.util.HashSet;public class CPU {private static HashSet hashSet = new HashSet();public static void main(String[] args) {cpuHigh();addHashSetThread();}public static void addHashSetThread(){new Thread(() -> {int count = 0;while (true){try{hashSet.add("count" + count);Thread.sleep(10000);count++;}catch(InterruptedException e){e.printStackTrace();}}}).start();}public static void cpuHigh(){new Thread(() ->{while (true){System.out.println("666~");}}).start();}
}
模拟CPU高的命令
cat /dev/urandom | md5sum
更多推荐
prometheus+grafana搭建监控系统
发布评论