当前位置: 首页 > news >正文

使用Grafana监控K8S中的异常Pod

工作中要维护多个K8S集群,发现运行异常的Pod要及时介入处理。

想到一个思路:使用Grafana将异常的Pod通过图表的方式显示出来。

这里用到了一个Grafana插件,Grafana-Infinity,关于这个插件的使用可以参考玩转Grafana-Infinity插件使用。

思路

通过Python脚本采集K8S集群中运行异常的Pod信息,包括命名空间、状态、重启次数、运行时长等。然后将这些数据通过http接口,以JSON格式的方式暴露出来,数据供Infinity来消费。

完整脚本

脚本很简单,读者可以根据实际情况修改,

import re
import jsonimport ansible_runnerfrom flask import Flask, requestdef get_abnormal_pod(ip):response = {}data = []modules_args = "kubectl get pod --no-headers -A | grep -E -v -i 'running|completed'"ansi_escape = re.compile(r'\x1B(?:[@-Z\\-_]|\[[0-?]*[ -/]*[@-~])')pattern = re.compile(r"\s{2,}")try:runner_obj = ansible_runner.run(private_data_dir="/opt/jsonsource/abnormal_pod",inventory='/opt/jsonsource/abnormal_pod/inventory',host_pattern=ip,quiet=True,module='shell',module_args=modules_args)for line in runner_obj.stdout.readlines():# remove the ANSI escape sequencesnew_line = ansi_escape.sub('', line)resource_list = pattern.split(new_line)# 加保护,防止Grafana的Table panel显示异常if 'FAILED' in resource_list[0]:return {'data': [{'namespace': '正常', 'name': '正常', 'status': '正常','restarts': '正常', 'age': '正常'}]}ns_resource_detail = {}if len(resource_list) == 6:ns_resource_detail["namespace"] = resource_list[0]ns_resource_detail["name"] = resource_list[1]ns_resource_detail["status"] = resource_list[3]ns_resource_detail["restarts"] = resource_list[4]ns_resource_detail["age"] = resource_list[5].strip('\n')data.append(ns_resource_detail)response['data'] = dataexcept:print("There is a exception")return responseapp = Flask(__name__)@app.route('/items')
def items():k8s_name_ip = {}k8s_name_ip['prod'] = '10.10.0.2'k8s_name_ip['demo'] = '10.11.0.2'k8s_name_ip['test'] = '10.12.0.2'cluster_name = request.args.get("tag")if cluster_name in k8s_name_ip:ip = k8s_name_ip[cluster_name]return get_abnormal_pod(ip)# 保护,防止返回错误数据return {'data': [{'namespace': '仅支持指定平台', 'name': '仅支持指定平台', 'status': '仅支持指定平台','restarts': '仅支持指定平台', 'age': '仅支持指定平台'}]}if __name__ == "__main__":app.run(host="0.0.0.0", port=3111)

因为脚本运行的服务器不能直接访问K8S,这里使用了Ansible来远程执行。Inventory文件内容如下,

10.10.0.2
10.11.0.2
10.12.0.2

配置Grafana

新开一个Panel,类型选择“Table”,数据源选择“Infinity”。

这里有个技巧,参照上面的Python脚本,

cluster_name = request.args.get("tag")

集群的控制服务器IP通过查询参数“tag”传递,在配置“Infinity”插件时,要给“URL”配置一个查询参数,

这样我们就可以在Grafana上自由切换来显示不同环境的Pod运行状态。

显示效果

这样便可以通过Grafana上的一个单一Panel监控多个K8S集群的运行异常Pod。

http://www.dtcms.com/a/491801.html

相关文章:

  • C语言基础之:指针、结构体、链表
  • 王国保卫战全集下载 1~5部全系列MOD DLC修版 安卓+ios+PC电脑版
  • wordpress邮件发验证码网站站内结构优化
  • 国内专业网站设计关于网站运营
  • 【Java序列化与反序列化详解】
  • JAiRouter v1.0.0 正式发布:企业级 AI 服务网关的开源解决方案
  • HDR Scattering and Tone Mapping
  • 做我的世界皮肤壁纸的网站工业设计软件上市公司
  • 网站备案模板自己做的网站可以发布吗
  • vue-easy-tree树状结构
  • 重庆网站设计公司小白测评做网站
  • 可以发布广告的网站农村网站建设补助
  • 哪个网站做的简历最好专业网站设计力荐亿企邦
  • 轻量云服务器Lighthouse × 1Panel Halo 开启创意新玩法,建站与服务部署全攻略
  • 亦庄附近的网站建设公司关键词排名怎么查
  • 做网站建设的利润南宁做企业网站
  • 群体稳定性指标PSI:机器学习模型稳定性评估的核心工具
  • **标题:发散创新:探索自愈系统的设计与实现**引言:随着计算机技术的飞速发展,软件系统的可靠性和稳定性问题愈发受到关注。本文将
  • 常驻服务问答
  • 龙岩建网站公司手机网站建设公司
  • Flink性能调优基石:资源配置与内存优化实践
  • h5页面制作流程抖音seo搜索优化
  • 自己动手做网站公司网页网站建设ppt模板
  • 图片渐变透明,图片透明渐变,图片怎么渐变透明,颜色渐变透明,颜色透明渐变,怎么让图片渐变透明,图片边缘渐变透明,图片渐变半透明
  • 数据产品(3)-数据中台
  • STM32理论 —— 存储、中断
  • 如何选择做网站软件制作
  • 营销型网站建设广州搭建 网站 模版
  • 在NumPy中合并两个一维数组的多种方法
  • 如何求「加减 value 任意次后的最大 MEX」同余类求解