zabbix监控Pod Restart状态

摘要

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

zabbix监控Pod Restart状态

zabbix
Date:2019年01月14日18:10:23


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

image_1d17qer7b10fg1a7f53h1n87bofbl.png-381.9kB

关于zabbix安装以及配置可以参考 zabbix板块

首先,先把脚本复制下来,放到服务器中。需要修改一下脚本的内容

  1. [root@YZSJHL81-32 scripts]# cat k8s.sh
  2. #!/bin/bash
  3. # this kubernetes pod status
  4. # pod restart status
  5. metric=$1
  6. tmp_file=/tmp/sql/k8s_status.txt
  7. /usr/local/kubernetes/client/kubectl get pod --namespace=prod-rrqc |awk -F "[ ]+" '{print $1,$4}' >$tmp_file
  8. case $metric in
  9. credit-open-plat)
  10. output=$(awk '/credit-open-plat/{print $2}' $tmp_file|sort -rn|awk '{print $1}'|sed -n '1p')
  11. echo $output
  12. ;;
  13. renren-jinkong-kylin-app-push-server)
  14. output=$(awk '/renren-jinkong-kylin-app-push-server/{print $2}' $tmp_file|sort -rn|awk '{print $1}'|sed -n '1p')
  15. echo $output
  16. ;;
  17. renren-jinkong-kylin-auth-server)
  18. output=$(awk '/renren-jinkong-kylin-auth-server/{print $2}' $tmp_file|sort -rn|awk '{print $1}'|sed -n '1p')
  19. echo $output
  20. ;;
  21. pod名称)
  22. output=$(awk '/pod名称/{print $2}' $tmp_file|sort -rn|awk '{print $1}'|sed -n '1p')
  23. echo $output
  24. ;;
  25. *)
  26. echo "please input 工程名称"
  27. ;;
  28. esac
  29. 脚本添加完毕,需要对脚本授权同时设置属主
  30. chown zabbix k8s.sh
  31. chmod +x k8s.sh
  32. chmod zabbix /tmp/sql/k8s_status.txt
  33. #还需要对存储数据的目录进行授权,否则会造成权限拒绝
  34. #脚本参数解释
  35. 这个脚本其实就是将Pod名称以及重启次数过滤到/tmp/下的文件,同时对应的项目进行awk grep 以达到获取到restart次数
  36. #还需要kubectl 设置zabbix可执行,由于每个人安装都不一样,我就不写命令了

脚本配置完毕,还需要修改zabbix_agent.conf,添加key

  1. [root@YZSJHL81-32 zabbix]# tail zabbix_agentd.conf
  2. #k8s pod status
  3. UserParameter=k8s_pod_status[*],/etc/zabbix/scripts/k8s.sh "$1"
  4. #添加完毕后,我们需要重启zabbix
  5. centos7重启
  6. systemctl restart zabbix-agent
  7. Centos6重启
  8. /etc/init.d/zabbix_agetd restart

脚本添加完毕,我们通过zabbix_get获取

  1. [root@YZSJHL82-200 ~]# zabbix_get -s 10.4.81.32 -k k8s_pod_status[credit-open-plat]
  2. 7
  3. 可以获取到数据,说明没啥问题。如果获取不到大概就是zabbix权限拒绝或者命令有问题

接下来就是在Zabbix Web界面添加一个模板
image_1d15oa7f796lluf19c11gg318q09.png-162kB
配置模板
image_1d15od2gkgst58r11hj1q16i9vm.png-101.9kB

找到我们创建的模板,我们需要创建一个应用集,在应用集添加监控项
右上角创建应用集
image_1d165fpul884i2b16qfqek1ohv7j.png-71.3kB
image_1d165ike01s3necg193m1vk9i4a80.png-66.8kB

点击监控项目
image_1d165jj641vut1a6d8n817h0e88d.png-85.4kB
点击创建监控项
image_1d165k8rb3e417kim7i1lg91j638q.png-145kB

其他的所有项目都按照这种方式进行添加,这里就不一一截图了
image_1d165o400179u144v1icjfb179397.png-181.8kB
添加完毕后

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

image_1d15qin4a5rj1c1j1t6a1odic221t.png-231kB

创建图形展示
image_1d15rca8k1kbk6231u391g1ob372n.png-97.2kB
image_1d15rfah91s57otl15vr2q81clv34.png-116.7kB
image_1d15rj7pf85jv81iur173t1ho13h.png-369kB
添加完毕我们可以点预览查看一下
image_1d15v5iutab4a6143frji1i5o3u.png-221.5kB

我们点击确认,保存,点击主机添加监控模板
image_1d15v8nbf1o4s18231co21qb11vnc4b.png-154.4kB

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

图片已经添加完成,剩下就是添加监控项
配置-->模板-->k8s模板
image_1d163bt1dn0kedu8r7s14lt355.png-120.3kB
表达式添加需要点击添加,选中对应的Key
image_1d163qseu1nhhvf12o9ht71o3f76.png-109.5kB
image_1d163g2duk5hdti1c5e1l4416ai5v.png-63.5kB

选择主机,找到监控项,点击插入
image_1d163e0531rr7nd110oaqjs1jak5i.png-289.9kB
当pod restart次数达到5次,即可触发器报警
image_1d163ig9s196c17p4pmd1b2b1r7f6c.png-63.5kB
image_1d163mok9tf514ed6njbk71rrb6p.png-114.3kB

添加完毕后
image_1d167m224128brg6lll93p1meo9k.png-340.5kB

触发器创建完成现在需要测试,触发器测试
image_1d167ne3uk001qsv561e1ev8a1.png-72.3kB
image_1d167o3lj157mkjb6r31r9m1vp9ae.png-32.9kB

同时图片也是显示正常
image_1d167pjfcbf917131dda1v3d1f9uar.png-136.7kB

接下来我们将这个pod删除,从新创建,查看是否会恢复
image_1d1685h6810cl1eqj16dtdpcbd2b8.png-28.5kB
报警恢复,间隔15分钟

zabbix微信报警配置
zabbix板块


新闻联播老司机

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: