zabbix 监控 Pod Restart 状态
zabbix
Date:2019 年 01 月 14 日 18:10:23
在 k8s 生产环境中,会遇到 pod restart 次数过高的问题。当 pod restart 次数过高时,会对服务器的负载造成影响,同时会影响业务的稳定。一般情况下,pod restart 会有两种原因,一种是程序有 bug(内存溢出) 另外一种就是业务量过大。虽然 k8s 有自己的健康检查机制,但是还是会对业务造成影响,有的时候发现 pod restart 次数已经达到 600 多次,可想对服务器对业务的影响有多大

关于 zabbix 安装以及配置可以参考 zabbix 板块
首先,先把脚本复制下来,放到服务器中。需要修改一下脚本的内容
[root@YZSJHL81-32 scripts]# cat k8s.sh
#!/bin/bash
# this kubernetes pod status
# pod restart status
metric=$1
tmp_file=/tmp/sql/k8s_status.txt
/usr/local/kubernetes/client/kubectl get pod --namespace=prod-rrqc |awk -F "[ ]+" '{print $1,$4}' >$tmp_file
case $metric in
credit-open-plat)
output=$(awk '/credit-open-plat/{print $2}' $tmp_file|sort -rn|awk '{print $1}'|sed -n '1p')
echo $output
;;
renren-jinkong-kylin-app-push-server)
output=$(awk '/renren-jinkong-kylin-app-push-server/{print $2}' $tmp_file|sort -rn|awk '{print $1}'|sed -n '1p')
echo $output
;;
renren-jinkong-kylin-auth-server)
output=$(awk '/renren-jinkong-kylin-auth-server/{print $2}' $tmp_file|sort -rn|awk '{print $1}'|sed -n '1p')
echo $output
;;
pod 名称)
output=$(awk '/pod 名称/{print $2}' $tmp_file|sort -rn|awk '{print $1}'|sed -n '1p')
echo $output
;;
*)
echo "please input 工程名称"
;;
esac
脚本添加完毕,需要对脚本授权同时设置属主
chown zabbix k8s.sh
chmod +x k8s.sh
chmod zabbix /tmp/sql/k8s_status.txt
#还需要对存储数据的目录进行授权,否则会造成权限拒绝
#脚本参数解释
这个脚本其实就是将 Pod 名称以及重启次数过滤到/tmp/下的文件,同时对应的项目进行 awk grep 以达到获取到 restart 次数
#还需要 kubectl 设置 zabbix 可执行,由于每个人安装都不一样,我就不写命令了
脚本配置完毕,还需要修改 zabbix_agent.conf, 添加 key
[root@YZSJHL81-32 zabbix]# tail zabbix_agentd.conf
#k8s pod status
UserParameter=k8s_pod_status[*],/etc/zabbix/scripts/k8s.sh "$1"
#添加完毕后,我们需要重启 zabbix
centos7 重启
systemctl restart zabbix-agent
Centos6 重启
/etc/init.d/zabbix_agetd restart
脚本添加完毕,我们通过 zabbix_get 获取
[root@YZSJHL82-200 ~]# zabbix_get -s 10.4.81.32 -k k8s_pod_status[credit-open-plat]
7
可以获取到数据,说明没啥问题。如果获取不到大概就是 zabbix 权限拒绝或者命令有问题
接下来就是在 Zabbix Web 界面添加一个模板

配置模板
找到我们创建的模板,我们需要创建一个应用集,在应用集添加监控项
右上角创建应用集


点击监控项目

点击创建监控项

其他的所有项目都按照这种方式进行添加,这里就不一一截图了

添加完毕后
1. 这里的键值对应的是脚本里面对应的 key
2. 获取时间我们设置为 15 分钟 (时间间隔太短会给服务器造成 io 负载)
3. 我们设置的 key 的单位为次
4. 设置好对应的应用集

创建图形展示



添加完毕我们可以点预览查看一下

我们点击确认,保存,点击主机添加监控模板

我们获取 key 的时间设置为 900 秒 (15 分钟) 测试的时候设置短一点,等添加完在修改。等待一会出图

图片已经添加完成,剩下就是添加监控项
配置--> 模板-->k8s 模板

表达式添加需要点击添加,选中对应的 Key


选择主机,找到监控项,点击插入

当 pod restart 次数达到 5 次,即可触发器报警


添加完毕后

触发器创建完成现在需要测试,触发器测试


同时图片也是显示正常

接下来我们将这个 pod 删除,从新创建,查看是否会恢复

报警恢复,间隔 15 分钟
zabbix 监控 Pod Restart 状态
zabbix
Date:2019 年 01 月 14 日 18:10:23
在 k8s 生产环境中,会遇到 pod restart 次数过高的问题。当 pod restart 次数过高时,会对服务器的负载造成影响,同时会影响业务的稳定。一般情况下,pod restart 会有两种原因,一种是程序有 bug(内存溢出) 另外一种就是业务量过大。虽然 k8s 有自己的健康检查机制,但是还是会对业务造成影响,有的时候发现 pod restart 次数已经达到 600 多次,可想对服务器对业务的影响有多大

关于 zabbix 安装以及配置可以参考 zabbix 板块
首先,先把脚本复制下来,放到服务器中。需要修改一下脚本的内容
[root@YZSJHL81-32 scripts]# cat k8s.sh
#!/bin/bash
# this kubernetes pod status
# pod restart status
metric=$1
tmp_file=/tmp/sql/k8s_status.txt
/usr/local/kubernetes/client/kubectl get pod --namespace=prod-rrqc |awk -F "[ ]+" '{print $1,$4}' >$tmp_file
case $metric in
credit-open-plat)
output=$(awk '/credit-open-plat/{print $2}' $tmp_file|sort -rn|awk '{print $1}'|sed -n '1p')
echo $output
;;
renren-jinkong-kylin-app-push-server)
output=$(awk '/renren-jinkong-kylin-app-push-server/{print $2}' $tmp_file|sort -rn|awk '{print $1}'|sed -n '1p')
echo $output
;;
renren-jinkong-kylin-auth-server)
output=$(awk '/renren-jinkong-kylin-auth-server/{print $2}' $tmp_file|sort -rn|awk '{print $1}'|sed -n '1p')
echo $output
;;
pod 名称)
output=$(awk '/pod 名称/{print $2}' $tmp_file|sort -rn|awk '{print $1}'|sed -n '1p')
echo $output
;;
*)
echo "please input 工程名称"
;;
esac
脚本添加完毕,需要对脚本授权同时设置属主
chown zabbix k8s.sh
chmod +x k8s.sh
chmod zabbix /tmp/sql/k8s_status.txt
#还需要对存储数据的目录进行授权,否则会造成权限拒绝
#脚本参数解释
这个脚本其实就是将 Pod 名称以及重启次数过滤到/tmp/下的文件,同时对应的项目进行 awk grep 以达到获取到 restart 次数
#还需要 kubectl 设置 zabbix 可执行,由于每个人安装都不一样,我就不写命令了
脚本配置完毕,还需要修改 zabbix_agent.conf, 添加 key
[root@YZSJHL81-32 zabbix]# tail zabbix_agentd.conf
#k8s pod status
UserParameter=k8s_pod_status[*],/etc/zabbix/scripts/k8s.sh "$1"
#添加完毕后,我们需要重启 zabbix
centos7 重启
systemctl restart zabbix-agent
Centos6 重启
/etc/init.d/zabbix_agetd restart
脚本添加完毕,我们通过 zabbix_get 获取
[root@YZSJHL82-200 ~]# zabbix_get -s 10.4.81.32 -k k8s_pod_status[credit-open-plat]
7
可以获取到数据,说明没啥问题。如果获取不到大概就是 zabbix 权限拒绝或者命令有问题
接下来就是在 Zabbix Web 界面添加一个模板

配置模板
找到我们创建的模板,我们需要创建一个应用集,在应用集添加监控项
右上角创建应用集


点击监控项目

点击创建监控项

其他的所有项目都按照这种方式进行添加,这里就不一一截图了

添加完毕后
1. 这里的键值对应的是脚本里面对应的 key
2. 获取时间我们设置为 15 分钟 (时间间隔太短会给服务器造成 io 负载)
3. 我们设置的 key 的单位为次
4. 设置好对应的应用集

创建图形展示



添加完毕我们可以点预览查看一下

我们点击确认,保存,点击主机添加监控模板

我们获取 key 的时间设置为 900 秒 (15 分钟) 测试的时候设置短一点,等添加完在修改。等待一会出图

图片已经添加完成,剩下就是添加监控项
配置--> 模板-->k8s 模板

表达式添加需要点击添加,选中对应的 Key


选择主机,找到监控项,点击插入

当 pod restart 次数达到 5 次,即可触发器报警


添加完毕后

触发器创建完成现在需要测试,触发器测试


同时图片也是显示正常

接下来我们将这个 pod 删除,从新创建,查看是否会恢复

报警恢复,间隔 15 分钟

评论 (0)