Grafana 监控系统是否重启
一、概述
Linux 内核(以下简称内核)是一个不与特定进程相关的功能集合,内核的代码很难轻易的在调试器中执行和跟踪。开发者认为,内核如果发生了错误,就不应该继续运 行。因此内核发生错误时,它的行为通常被设定为系统崩溃,机器重启。基于动态存储器的电气特性,机器重启后,上次错误发生时的现场会遭到破坏,这使得查找 内核的错误变得异常困难。
线上的k8s集群,有时候回出现重启的现象,但是什么原因导致重启,无法得知。
Kdump
Kdump 是一种基于 kexec 的内存转储工具,目前它已经被内核主线接收,成为了内核的一部分,它也由此获得了绝大多数 Linux 发行版的支持。与传统的内存转储机制不同不同,基于 Kdump 的系统工作的时候需要两个内核,一个称为系统内核,即系统正常工作时运行的内核;另外一个称为捕获内核,即正常内核崩溃时,用来进行内存转储的内核。
关于如何设置 kump,请参考链接:
https://blog.csdn.net/bytxl/article/details/45025183
因此,线上已经部署了Kdump,用来捕捉崩溃
二、监控脚本
系统什么时间发生了重启?不知道。所以需要有一个脚本来监测一下,一旦发生重启,就可以使用 crash分析内存转储文件
怎么知道系统重启
在ubuntu系统中,有一个 last reboot 命令,它会显示系统重启的历史列表
执行命令,效果如下:
root@localhost:~# last reboot
reboot system boot 4.4.0-119-generi Mon Jan 7 13:50 still running
reboot system boot 4.4.--generi Sat Jan : - : (+:)
reboot system boot 4.4.--generic Sat Jan : - : (:) wtmp begins Sat Jan ::
看姿色的文字,它排在第一行,也就是最近一次的重启记录。
判断条件
怎么知道昨天,系统有没有重启呢?
很简单,先用 last reboot 获取最近一次的重启时间。再获取昨天的时间,将2个时间做对比,如果一致,就说明昨晚重启了,否则没有。
获取最新一次重启时间
# 最近一次重启时间
lately=`last reboot | head - | awk '{print $5,$6,$7}'`
昨日时间
# 昨天时间
yesterday=`date -d "-1 days" | awk '{print $1,$2,$3}'`
Prometheus数据
我们需要构造Prometheus数据,将数据发送给Pushgateway,最后由Grafana 展示图表以及做报警
这里我们使用shell脚本来构造数据,格式如下:
监控名{destinationName="描述信息",instance="实例,默认值为空"} 值
这些数据,我是放在一个临时文件 /tmp/check_system_restart 里面
echo "system_restart{destinationName=\"system_restart\",instance=\"$HOSTNAME\"} 1" > /tmp/check_system_restart
注意:使用由于echo外部使用了双引号,所以内部再次使用双引号时,需要使用反斜杠进行转义才行。
我们知道,在shell里面,单引号是无法引用变量的,必须使用双引号!
$HOSTNAME 是linux 系统的一个全局变量,表示主机名
发送数据
cat /tmp/check_system_restart|curl --data-binary @- http://$localIP:9091/metrics/job/system_restart_`echo $localIP | awk -F '.' '{print $NF}'`
解释:
--data-binary 参数表示 HTTP POST请求中的数据为纯二进制数据
$localIP 表示 Pushgateway的ip地址
echo $localIP | awk -F '.' '{print $NF}' 表示获取ip地址的最后一位
注意:这里的job后面跟了一段字符串,是为了保证每一台服务器发送的url不一致。这样监控数据就不会被其他主机覆盖!
关于Pushgateway 的搭建,请参考链接:
https://www.cnblogs.com/xiao987334176/p/9933963.html
添加任务计划
常规情况下,我们一般使用 crontab -e 命令来添加任务计划
但是在shell脚本,却不能这么操作。
其实,直接修改 /etc/crontab 文件,也可以添加任务计划
下面一段代码,用来判断任务计划是否已经添加,不存在时,就添加!
if [ `cat /etc/crontab|grep 'check_reboot.sh'|wc -l` -eq ];then
cp -f /opt/check_reboot.sh /etc/ && chmod /etc/check_reboot.sh
echo "0 * * * * root bash /etc/check_reboot.sh" >>/etc/crontab
fi
完整代码
请将代码务必放到/opt目录下,因为代码路径写死了!!!
check_reboot.sh
#!/bin/bash # 最近一次重启时间
lately=`last reboot | head - | awk '{print $5,$6,$7}'` # 昨天时间
yesterday=`date -d "-1 days" | awk '{print $1,$2,$3}'` # 判断时间是否一致
if [ "$string" == "$yesterday" ];then
# 写入日志
#echo "$HOSTNAME restarted at $lately" >> /opt/restart.log
echo "system_restart{destinationName=\"system_restart\",instance=\"$HOSTNAME\"} 1" > /tmp/check_system_restart
else
echo "system_restart{destinationName=\"system_restart\",instance=\"$HOSTNAME\"} 0" > /tmp/check_system_restart
fi # 获取geteway服务器ip
localIP=`ip addr | grep '192.168' | awk '{print $2}' | cut -d '/' -f ` # 发送数据给Pushgateway
if [ `cat /tmp/check_system_restart|wc -l` -ge ];then
cat /tmp/check_system_restart|curl --data-binary @- http://$localIP:9091/metrics/job/system_restart_`echo $localIP | awk -F '.' '{print $NF}'`
else
curl -X DELETE http://$localIP:9091/metrics/job/system_restart_`echo $localIP | awk -F '.' '{print $NF}'`
fi # 添加任务计划
if [ `cat /etc/crontab|grep 'check_reboot.sh'|wc -l` -eq ];then
cp -f /opt/check_reboot.sh /etc/ && chmod /etc/check_reboot.sh
echo "0 * * * * root bash /etc/check_reboot.sh" >>/etc/crontab
fi
执行脚本,就会自动产生 /tmp/check_system_restart 文件。
查看文件内容
root@localhost:~# cat /tmp/check_system_restart
system_restart{destinationName="system_restart",instance="xx-node01"}
自动将脚本复制到 /etc/check_reboot.sh,这样是为了路径统一,方便添加任务计划!
最后,会自动添加任务计划!
任务计划定义的是每个小时执行一次,为了不等那么长时间,可以先手动执行一次 /etc/check_reboot.sh 脚本
查看 Pushgateway 数据
就会看到一条job
三、Grafana添加监控
添加一个图形,标题叫做 昨日系统重启
设置显示的值
设置报警策略
当最后一个值等于1时,触发报警
效果如下:
Grafana 监控系统是否重启的更多相关文章
- Prometheus + Grafana 监控系统搭
本文主要介绍基于Prometheus + Grafana 监控Linux服务器. 一.Prometheus 概述(略) 与其他监控系统对比 1 Prometheus vs. Zabbix Zabbix ...
- Docker搭建zabbix+grafana监控系统
一.准备工作 1.mysql数据库:192.168.1.5 2.nginx服务:192.168.1.10 3.docker服务器:192.168.1.20 4.zabbix客户端若干 二.docker ...
- Docker搭建Prometheus+grafana监控系统
一.Prometheus简介 1.简介 Prometheus是由SoundCloud开发的开源监控报警系统和时序列数据库(TSDB). Prometheus使用Go语言开发,是Google BorgM ...
- 使用cAdvisor+Influxdb+Grafana监控系统
今天准备开始研究研究当前非常流行的Grafana+Influxdb监控系统,两者都是非常轻量级的应用但是功能却异常强大,可以说Grafana在作图显示方面真的毫不逊色与Cacti. 组件介绍 cA ...
- docker-compose 搭建 Prometheus+Grafana监控系统
有关监控选型之前有写过一篇文章: 监控系统选型,一文轻松搞定! 监控对象 Linux服务器 Docker Redis MySQL 数据采集 1).prometheus: 采集数据 2).node-ex ...
- 初试 Prometheus + Grafana 监控系统搭建并监控 Mysql
转载自:https://cloud.tencent.com/developer/article/1433280 文章目录1.Prometheus & Grafana 介绍1.1.Prometh ...
- docker-compose快速搭建 Prometheus+Grafana监控系统
一.说明Prometheus负责收集数据,Grafana负责展示数据.其中采用Prometheus 中的 Exporter含:1)Node Exporter,负责收集 host 硬件和操作系统数据.它 ...
- Collectd+InfluxDB+Grafana监控系统搭建
环境配置 节点 配置 类型 操作系统 Sched 2G 2CPU 50GB ens3=>192.168.200.11 KVM虚拟机 CentOS 7 Nova 4G 2CPU 50GB ens3 ...
- 实战 Prometheus 搭建监控系统
实战 Prometheus 搭建监控系统 Prometheus 是一款基于时序数据库的开源监控告警系统,说起 Prometheus 则不得不提 SoundCloud,这是一个在线音乐分享的平台,类似于 ...
随机推荐
- xen 配置vm 跟随xen server一起启动
查看Xen Server 信息 (1)查看pool信息 [root@xenserver-243 ~]# xe pool-list uuid ( RO) : e29037aa-0dca-f95a-193 ...
- Oracle导出数据中的prompt,set feedback 等是什么意思
prompt 显示后面的提示,相当于一般的操作系统命令echo,输出后面的信息Importing table t_testset feedback off 1.set feedback 有三种方式: ...
- java的排序类 Collections
场景:比如说有一个List<Student> 里面有许多学生 我们想让这些学生按照年龄的大小排序 我们可以用java自带的 java.util.Collections 工具类来实现 Col ...
- springboot下实现邮件发送功能
springboot给我们封装好了邮件功能,非常简单,只需要稍微配置下就ok. 引入jar <dependency> <groupId>org.springframework. ...
- javascript 5秒后关闭广告案例
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- HDU - 3006 The Number of set(状态压缩位运算)
http://acm.hdu.edu.cn/showproblem.php?pid=3006 题意 给定n个集合,每个集合都是由大于等于1小于等于m的数字组成,m最大为14.问由给出的集合可以组成多少 ...
- Jena搭建SPARQL查询RDF数据
1 Jena搭建SPARQL查询RDF数据 1.1 Jena概要 · SPARQL是W3C的RDF数据工作组设计的一种查询语言和协议,用于RDF数据的查询.经过类似于JDK安装时候的配置,可以在命令行 ...
- 使用java.util.LinkedList模拟实现内存页面置换算法--LRU算法
一,LRU算法介绍 LRU是内存分配中“离散分配方式”之分页存储管理方式中用到的一个算法.每个进程都有自己的页表,进程只将自己的一部分页面加载到内存的物理块中,当进程在运行过程中,发现某页面不在物理内 ...
- Vue Admin - 基于 Vue & Bulma 后台管理面板
Vue Admin 是一个基于 Vue 2.0 & Bulma 0.3 的后台管理面板(管理系统),相当于是 Vue 版本的 Bootstrap 管理系统,提供了一组通用的后台界面 UI 和组 ...
- 阿里云3台机器组成集群配置ssh免密码登陆
1 查询阿里云局网ip 注意:需要配置同一地区同一可用区的机器 才是一个局网 2 配置好hosts文件 3 hostname确认也是正确的 4 生成公钥私钥 三台机器同样操作 ssh-keygen - ...