PS: 最近在重构公司的业务容器化平台,记录一块。关于容器日志的, kubernetes python API本身提供了日志流式数据,在以前的版本是不会输出新数据的,后续版本进行了改进。

直接上代码

Flask 前端路由块


# Router
"""获取项目pod的日志"""
@api_cluster_pod.route('/<env>/<cluster_name>/pod/<pod_name>/log')
@env_rules
def api_cluster_pod_log(env, cluster_name, pod_name):"""查看pod的log"""tail_lines = request.values.get("tail_lines", 1000)namespace = request.values.get("namespace", "")# 生成Config Objecttry:cluster_config = ClusterConfig(env=env,cluster_name=cluster_name,namespace=namespace)except Exception as e:return jsonify(dict(code=5000,message='获取集群接口时未找到对应条目, 信息:{0}'.format(str(e))))try:poder = Pod( cluster_config)resp = Response(stream_with_context(poder.get_pod_log(pod_name, tail_lines)), mimetype="text/plain")return respexcept Exception as e:return jsonify(dict(code=7000,message=str(e)))

Flask 后端代码块

# 后台功能
class Pod:...def get_pod_log(self, pod_name, tail_lines=100):"""获取pod的日志:param tail_lines: # 显示最后多少行:return:"""try:# stream pod logstreams = self.cluster.api.read_namespaced_pod_log(pod_name,self.cluster_config.namespace,follow=True,_preload_content=False,tail_lines=tail_lines).stream()return streamsexcept ApiException as e:if e.status == 404:logger.exception("Get Log not fund Podname: {0}".format(pod_name))raise PodNotFund("获取日志时,未找到此pod: {0}".format(pod_name))if e.status == 400:raise PodNotFund("容器并未创建成功,请联系运维人员进行排查。")raise eexcept Exception as e:logger.exception("Get Log Fail: {0}".format(str(e)))raise e

HTML

<!DOCTYPE>
<html>
<head><title>Flushed ajax test</title><meta charset="UTF-8" /><script type="text/javascript" src="https://cdn.bootcss.com/jquery/3.0.0/jquery.min.js"></script><style>#log-container {height: 800px;/*width: 800px;*/overflow-x: scroll;padding: 10px;}.logs {background-color: black;color: aliceblue;font-size: 18px;}</style>
</head>
<body>
<div id="log-container"><pre class="logs"></pre>
</div><script type="text/javascript">var last_response_len = false;var logs = $("#log-container");$.ajax('http://localhost/api/pre/ops-test/pod/ops-test-1211763235-jfbst/log?tail_lines=100', {xhrFields: {onprogress: function(e){var this_response, response = e.currentTarget.response;if(last_response_len === false){this_response = response;last_response_len = response.length;}else{this_response = response.substring(last_response_len);last_response_len = response.length;}// console.log(this_response);// 接收服务端的实时日志并添加到HTML页面中$("#log-container pre").append(this_response);// 滚动条滚动到最低部$("#log-container").scrollTop($("#log-container pre").height() - $("#log-container").height() + 10);}}}).done(function(data){console.log('Complete response = ' + data);}).fail(function(data){console.log('Error: ', data);});console.log('Request Sent');
</script>
</body>
</html>

其它

我们应用是前后端分离的,把html里面的核心代码放置VUE里面就可以了。

效果图

日志是流式的,如果Container有日志,则窗口会运态更新。

kubernetes log 流式数据处理相关推荐

  1. Java8 新特性之流式数据处理(转)

    转自:https://www.cnblogs.com/shenlanzhizun/p/6027042.html 一. 流式处理简介 在我接触到java8流式处理的时候,我的第一感觉是流式处理让集合操作 ...

  2. Java8 :流式数据处理

    java8的流式处理极大了简化我们对于集合.数组等结构的操作,让我们可以以函数式的思想去操作,本篇文章将探讨java8的流式数据处理的基本使用. 一. 流式处理简介 在我接触到java8流式处理的时候 ...

  3. 图解大数据 | 流式数据处理-Spark Streaming

    作者:韩信子@ShowMeAI 教程地址:http://www.showmeai.tech/tutorials/84 本文地址:http://www.showmeai.tech/article-det ...

  4. JDK8 新特性流式数据处理

    在学习JDK8新特性Optional类的时候,提到对于Optional的两个操作映射和过滤设计到JDK提供的流式出来.这篇文章便详细的介绍流式处理: 一. 流式处理简介 流式处理给开发者的第一感觉就是 ...

  5. java8 新特性之流式数据处理_Java8新特性 - 集合流式编程 - 最终操作

    2.数据源的获取 2.1.数据源的简介 数据源,顾名思义,既是流中的数据的来源.是集合的流式编程的第一步,将数据源中的数据读取到流中,进行处理.注意:将数据读取到流中进行处理的时候,与数据源中的数据没 ...

  6. 基于spark的流式数据处理—流计算处理流程以及应用场景

    本文主要从一下几个方面来介绍流计算处理流程: 概述 数据实时采集 数据实时计算 实时查询服务 概述 传统的数据处理流程,需要先采集数据并存储在关系数据库等数据管理系统中,之后由用户通过查询操作和数据管 ...

  7. jstorm mysql_zookeeper,kafka,jstorm,memcached,mysql流式数据处理平台部署

    一.平台环境介绍: 1.系统信息:项目信息 系统版本:Ubuntu14.04.2 LTS \n \l 用户:***** 密码:****** Java环境:openjdk-7-jre 语言:en_US. ...

  8. jstorm 读取mysql_zookeeper,kafka,jstorm,memcached,mysql流式数据处理平台部署

    一.平台环境介绍: 1.系统信息: 项目 信息 系统版本: Ubuntu14.04.2 LTS \n \l 用户: ***** 密码: ****** Java环境: openjdk-7-jre 语言: ...

  9. 基于spark的流式数据处理—批处理和流处理区别

    静态数据 很多企业为了支持决策分析而构建的数据仓库系统,其中存放的大量历史数据就是静态数据.技术人员可以利用数据挖掘和OLAP(On-Line Analytical Processing)分析工具从静 ...

最新文章

  1. R语言可视化散点图(scatter plot)图、为图中的部分数据点添加标签、ggrepel包来帮忙
  2. arm服务器配置信息,ARM板 web服务器交叉编译及配置
  3. php实现tail,Linux-如何用php实现Linux下的tail -f命令?
  4. 对比DFT程序与FFT程序的效率
  5. Pycharm如何自动换行
  6. 小点点软件对你非常实用
  7. Android系列---JSON数据解析
  8. AndroidStudio_安卓原生开发_什么是AndroidStudio NDK ---Android原生开发工作笔记140
  9. Day709.JShell -Java8后最重要新特性
  10. 任务含有时间窗与资源含有上下班时间的时间冲突约束构建思路
  11. Mybatis之插件
  12. Gin+Mysql简单的Restful风格的API
  13. 微信iPad协议-云控系统-微商工具-云发单-微信机器人
  14. 谷歌高级搜索技巧之高级语法查询指令
  15. 树型选择器/Browsing HDFS筛选文件类型
  16. php 点赞 代码,WordPress模板如何使用纯代码实现点赞功能?
  17. php可以用scanf,PHP可以使用“scanf”来打印输出结果( )。
  18. 单目视觉SLAM综述
  19. 机房监控系统的功能特点以及工作原理!
  20. 《系统设计》微服务不是银弹

热门文章

  1. 洛谷P2312解方程
  2. boost::trait::is_reference 的研究与修改
  3. ibatis自动生成插件
  4. 构建一个计算机网络,计算机网络--网络构建(一)
  5. n阶乘的c语言代码,求10000的阶乘(c语言代码实现)
  6. POJ2349二分+并查集,类似最小树的贪心
  7. hdu4940 有上下界的无源可行流判断
  8. hdu1839 二分最短路
  9. hdu4496并查集的删边操作
  10. 【数字信号处理】相关函数与线性卷积关系 ( 卷积概念 | 相关函数概念 | 相关函数与线性卷积对比 | x(-m) 共轭 与 y(m) 的卷积就是两个信号 位移 m 的相关函数 )