kubernetes log 流式数据处理
生活随笔
收集整理的這篇文章主要介紹了
kubernetes log 流式数据处理
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
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 eHTML
<!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 流式数据处理的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 同步pod时区与node主机保持一致
- 下一篇: 想要自学深度学习?不用GPU,浏览器就够