Prometheus(由go语言(golang)开发)是一套开源的监控&报警&时间序列数据库的组合。适合监控docker容器。
基于时间序列的数值数据的容器监控解决方案。
按照时间顺序记录系统、设备状态变化的数据被称为时序数据
优势
易于管理
轻易获取服务内部状态
高效灵活的查询语句
支持本地和远程存储
采用http协议,默认pull模式拉取数据,也可以通过中间网关push数据
支持自动发现
可扩展
易集成
grafana 将Prometheus收集到的数据以图形化展现
通过grafana+onealert实现报警
模拟项目---对远程机器进行监控
实现7*24小时监控
报警分级
一级 电话通知
二级 微信通知
三级 邮件通知
完成报警处理机制
异地集中监控
实验环境准备
grafana服务器一台,prometheus服务器一台,被监控服务器一台
初始化服务器
设置好IP后,修改/etc/hosts
172.16.30.217 prometheus
172.16.30.222 grafana
172.16.30.223 agent
1 #!/bin/bash
2 for li in `cat ip.txt`
3 do
4 echo "lianjie $li..."
5 sshpass -p saka ssh -o "StrictHostKeyChecking=no" root@$li mv /etc/hosts /etc/hosts.bk
6 scp /etc/hosts root@$li:/etc/
7 done
时间同步
由于连接了外网,使用了外网的NTP server 在此只做时间检查
#!/bin/bash
for li in `cat ip.txt`
do
sshpass -p saka ssh -o StrictHostKeyChecking=no root@$li date
done
prometheus安装
tar -xvf prometheus-2.5.0.linux-amd64.tar.gz -C /usr/local
mv prometheus-2.5.0.linux-amd64 prometheus
cd prometheus
./prometheus --config.file="/usr/local/prometheus/prometheus.yml" & //执行后台安装
ss -natlp | grep 9090 //测试端口占用情况
ip:9090 即可看到prometheus的自带界面
默认监控自己
监控项有搜索提示
监控远程主机
在被监控的主机上安装组件(所有需要监控的机器都需要安装)
监控不同的服务需要不同的组件,比如mysqld_exporter
安装node_exporter(主要监控系统信息)
tar -xvf node_exporter-0.16.0.linux-amd64.tar.gz -C /usr/local
mv node_exporter-0.16.0.linux-amd64 node_exporter
cd node_exporter
nohup ./node_exporter & //永久运行node_exporter
查看是否运行
lsof -i:9100 //node_exporter 默认监听9100端口
通过ip:9100/metrices 来查看监控的数据
回到prometheus服务器的配置文件中添加被监控机器的地址段
vim prometheus.yml
- job_name: 'agent1'
static_configs:
- targets: ['172.16.30.223:9100'] //严格控制缩进
改完后重启服务
回到prometheus服务器的监控页面,已经可以看到添加的被监控主机
监控mysqld_exporter
解压安装
安装mysql(start enable)
lsof -i:3306 //查看是否运行
创建mysql账号,只允许本机访问
grant select,replication client,process ON *.* to 'mysql_monitor'@'localhost' identified by '123';
刷新权限
flush privileges;
完成之后,需要去添加配置文件来给prometheus登录Mysql来拉取数据
vim /usr/local/mysqld_exporter/.my.cnf
[client]
user=mysql_monitor
password=123
运行mysqld_exporter
nohup /usr/local/mysqld_exporter/mysqld_exporter --config.my-cnf=/usr/local/mysqld_exporter/.my.cnf & //添加参数,指明配置文件路径
ss -natlp | grep 9104 //确认已启动
到网页中查看是否已搜集到数据
回到prometheus服务器的配置文件中添加被监控机器的地址段
- job_name: 'agent1_mariadb'
static_configs:
- targets: ['172.16.30.223:9104']
修改完成后重启prometheus服务,在web上已经能看到监控的targets
grafana图形工具
grafana是开源的度量分析和可视化工具,可以通过将prometheus采集的数据分析,查询,然后进行可视化的展示,并实现报警。监听3000端口
安装
rpm -ivh grafana-5.3.4-1.x86_64.rpm
systemctl start grafana-server
systemctl enable grafana-server
通过Ip:3000进入 grafana测试页面,默认用户名密码均为admin,第一次登陆后需要更改密码
与prometheus关联
添加数据源
点击页面中的add data source添加prometheus服务器的信息
点+给数据源做图形展示
可以通过两种方式来筛选监控数据
1.{instance="IP:PORT"}
2.{job="JOB NAME"} //job name在prometheus的配置文件中
通过grafana监控mysql数据
需要安装模板并修改配置文件
修改配置文件
vim /etc/grafana/grafana.ini
[dashboards.json]
enabled = true //开启json
path = /var/lib/grafana/dashboards //模板路径
cd /var/lib/grafana/dashboards后
git clone https://github.com/percona/grafana-dashboards.git //下载模板
cp -r grafana-dashboards/dashboards/ /var/lib/grafana //把模板拉出来
systemctl restart grafana-server
在grafana中导入json 文件
页面中存在上传页面
选择上传mysql_overview.json
//上传后没有数据,因为没设置数据源
//设置数据源
//默认名字为Prometheus,之前的名字叫prometheus_data
//一觉睡醒grafana没采集到数据,prometheus报错no data points 发现3台机器时间不同步,重新校时 ntpdate cn.ntp.org.cn 所有机器保证时间同步
更改dashboards界面 https://grafana.com/grafana/dashboards
编号9276比较酷炫,是收集系统信息的,需要node_exporter
grafana+onealert实现报警
prometheus报警需要alertmanager组件,且报警规则需要手动添加,并不友好,所以使用grafana+onealert实现报警
onealert需要注册
https://caweb.aiops.com/#/ //页面有创建提示
在grafana中配置webhook url
在grafana中创建Notification channel 类型为webhook
链接地址不能填错
将webhook Notification Channel添加到grafana Alert中
在grafana dashboards中添加报警触发条件
cat /dev/urandom | md5sum
//目前未付费状态 只能微信推送或者钉钉 //绑定微信后已经可以从邮箱和微信推送获取报警信息
dpkg-reconfigure openssh-server重新生成ssh配置文件
有疑问加站长微信联系(非本文作者)